1.創建文件
test.c (游戲的測試邏輯)game.c(游戲的實現邏輯)gane.h(游戲實現函數的聲明)
game.c 和game.h屬于游戲實現 test.c屬于游戲測試
test.c 源文件(源文件添加)——game.c 源文件(源文件添加)——game.h(頭文件添加)
三個文件
2.首先在test.c文件寫一個主函數,主函數里面有一個測試函數,測試函數里面寫菜單、進入游戲、退出游戲
代碼展示:
voidmenu(){printf("***************************\n");printf("********1.play********\n");printf("********0.exit********\n");printf("***************************\n");}voidtest(){intinput=0;do{menu();printf("請選擇:->");scanf("%d",&input);switch(input){case1:printf("三子棋\n");break;case0:printf("退出游戲\n");break;default:printf("選擇錯誤\n");break;}}while(input);}#include<stdio.h>intmain(){test();return0;}
注意:
(1)一般用do while (游戲可能會玩很多次,最少一次)
(2)先打印一個菜單
(3)switch語句,要記得break,要記得default
接下來 把printf("三子棋\n") 改成 game(); 然后開始寫游戲部分。
3.三子棋代碼
思路:(\n 不要忘記寫)
(1)棋盤用數組
(2)假設玩家走用' * ',電腦走用' # ',所以用字符類型的數組(3*3的)
row 中文意思是行 column 中文意思是列 init 英文最初的簡寫
引用自己寫的文件 把#include < >改成 #include " "
(3)棋盤初始化
函數的聲明在頭文件里
(4)打印棋盤 (打印數據、分割行),把數據行和分割行看做一大部分,最后一部分沒有分割行而已。
(5)玩家下棋,打印棋盤,電腦下棋,打印棋盤。
(6)每下一步棋后,會有四種結果 玩家贏,電腦贏,平局,繼續玩 。所以要進行判斷。
玩家贏 ‘*’,電腦贏‘#’,平局‘Q’,繼續 ‘C’
game.h 部分代碼展示
#pragmaonce#include<stdio.h>#include<time.h>#include<stdlib.h>#defineROW3#defineCOL3//初始化棋盤voidInitboard(charboard[ROW][COL],introw,intcol);//define定義的ROW,COL是常量,而這里的row,col都是變量,所以不能替代voidDisplayboard(charboard[ROW][COL],introw,intcol);//打印棋盤voidplayer_move(charboard[ROW][COL],introw,intcol);//玩家下棋voidcomputer_move(charboard[ROW][COL],introw,intcol);//電腦下棋charis_win(charboard[ROW][COL],introw,intcol);//判斷輸贏以及平局和繼續玩
game.c代碼展示
#include"game.h"voidInitboard(charboard[ROW][COL],introw,intcol){inti=0;intj=0;for(i=0;i<row;i++){for(j=0;j<col;j++){board[i][j]='';}}}voidDisplayboard(charboard[ROW][COL],introw,intcol){inti=0;intj=0;for(i=0;i<row;i++){//打印數據//printf("%c|%c|%c\n",board[i][0],board[i][1],board[i][2]);//固定的數字0,1,2會把棋盤給固定住,所以不能這樣寫for(j=0;j<col;j++){printf("%c",board[i][j]);if(j<col-1)printf("|");}printf("\n");//打印分割行if(i<row-1){for(j=0;j<col;j++){printf("---");if(j<col-1){printf("|");}}printf("\n");}}}intis_full(charboard[ROW][COL],introw,intcol){inti=0;intj=0;for(i=0;i<row;i++){for(j=0;j<col;j++){if(board[i][j]==''){return0;}}}return1;}voidplayer_move(charboard[ROW][COL],introw,intcol){intx=0;inty=0;printf("請輸入坐標:->");while(1){scanf("%d%d",&x,&y);//判斷坐標是否在棋盤范圍if((x>=1&&x<=row)&&(y>=1&&y<=col)){if(board[x-1][y-1]==''){board[x-1][y-1]='*';break;}else{printf("該坐標被占用,請重新輸入!\n");}}else{printf("坐標非法\n");}}}//電腦下棋voidcomputer_move(charboard[ROW][COL],introw,intcol){intx=0;inty=0;printf("電腦下棋\n");while(1){x=rand()%row;y=rand()%col;if(board[x][y]==''){board[x][y]='#';break;}}}//判斷每一步棋后是輸贏,還是平局,還是繼續玩charis_win(charboard[ROW][COL],introw,intcol){inti=0;for(i=0;i<row;i++){if(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][0]!=''){returnboard[i][0];}}for(i=0;i<col;i++){if(board[0][i]==board[1][i]&&board[1][i]==board[2][i]&&board[0][i]!=''){returnboard[0][i];}}if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=''){returnboard[0][0];}if(board[0][2]==board[1][1]&&board[1][1]==board[2][0]&&board[1][1]!=''){returnboard[1][1];}inta=is_full(board,row,col);if(1==a){return'Q';}return'C';}
test.c 部分代碼展示
#include"game.h"voidmenu(){printf("***************************\n");printf("********1.play********\n");printf("********0.exit********\n");printf("***************************\n");}voidgame(){charboard[ROW][COL]={0};Initboard(board,ROW,COL);//棋盤初始化,內容為空格Displayboard(board,ROW,COL);//打印棋盤charret=0;//下棋while(1){player_move(board,ROW,COL);Displayboard(board,ROW,COL);ret=is_win(board,ROW,COL);if(ret!='C'){break;}computer_move(board,ROW,COL);Displayboard(board,ROW,COL);ret=is_win(board,ROW,COL);if(ret!='C'){break;}}if(ret=='*'){printf("恭喜你,取得勝利!\n");}elseif(ret=='Q'){printf("平局\n");}else{printf("你輸了\n");}}voidtest(){intinput=0;srand((unsignedint)time(NULL));do{menu();printf("請選擇:->");scanf("%d",&input);switch(input){case1:game();break;case0:printf("退出游戲\n");break;default:printf("選擇錯誤\n");break;}}while(input);}intmain(){test();return0;}
以上就是關于“基于C語言實現三子棋游戲的代碼怎么寫”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注本站行業資訊頻道。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
莊家出貨的手法有哪些?1、一字出貨法這種操作手法很兇悍,在于短期快速拉高股價后,又以低于現價約3%的價格賣出,價格瞬間掉下三個點很容易吸引很多買盤,每當“賣一”快被消耗完畢,有新的賣單壓上去,一直到空頭手中無籌碼,這個過程只需要幾分鐘,在分時圖上留下一個“一”字這種出貨方法適用于熱門股。2、釣魚線出貨法這種手法,在分時圖上留下酷似釣魚的形狀,適用于熱...
什么是過程能力指數?過程能力指數是指過程能力滿足產品質量標準要求(規格范圍等)的程度。所謂的過程能力是指過程在一定時間里,處于控制狀態(穩定狀態)的實際工作能力。過程能力可表示為:B=6σ。過程能力指數過去往往稱為工序能力指數,根據ISO8402,一律將“Process”譯為過程,通常將答應的容差范圍除以6σ 的比值稱為過程能力指數,指工序能力滿足產...
網商銀行是哪個銀行?網商銀行是一家商業銀行、 私營銀行及其沒有營業網點的互聯網銀行,網商銀行必須利用網絡來給予綜合性金融服務。因為沒有營業網點,而客脅理的網商銀行銀行卡,銀行積會有卡號,不存在實體卡片,這類卡必須關聯第三方支付手機軟件才可以使用。網商銀行是一家什么性質的銀行?網商銀行就是一家民營性質的商業銀行,以互聯網為平臺,小存小貸,純互聯網運營,沒有實體網點和現金業務,也沒有分行設立。網商銀行...