C語言版三子棋游戲?qū)崿F(xiàn)代碼_第1頁
C語言版三子棋游戲?qū)崿F(xiàn)代碼_第2頁
C語言版三子棋游戲?qū)崿F(xiàn)代碼_第3頁
C語言版三子棋游戲?qū)崿F(xiàn)代碼_第4頁
C語言版三子棋游戲?qū)崿F(xiàn)代碼_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第C語言版三子棋游戲?qū)崿F(xiàn)代碼本文實(shí)例為大家分享了C語言版三子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下

實(shí)現(xiàn)一個(gè)三子棋小游戲

下面是實(shí)現(xiàn)步驟:

總共有需要三個(gè)文件

第一,test.c

我們要在這個(gè)文件里面實(shí)現(xiàn)游戲的主體流程

第二,game.c

在這個(gè)文件里我們可以實(shí)現(xiàn)各個(gè)游戲函數(shù)的分裝

第三,game.h

在這個(gè)文件里我們實(shí)現(xiàn)的是各個(gè)函數(shù)的聲明

test.c

1、首先要有一個(gè)菜單

讓玩家可以做出選擇

2、接著對(duì)玩家做出的不同選擇進(jìn)行實(shí)現(xiàn)

選1就是開始游戲,所以我們進(jìn)入到game函數(shù)里就好了

選0就是退出游戲,

其他選擇的話就是選擇錯(cuò)誤,重新選擇

這個(gè)我們可以用switch語句來實(shí)現(xiàn)

這里我們要先用的是do,while循環(huán),條件里放入我們要輸入的數(shù)

這樣的話如果輸入的數(shù)為0,即為假,正好會(huì)跳出循環(huán),后面接上return0的話程序就結(jié)束了

所以我們先把以上所描述的功能寫出來

#includestdio.h

#include"game.h"

voidmenu()

printf("***********\n");

printf("***1play***\n");

printf("***0exit***\n");

printf("***********\n");

intmain()

menu();

intinput=0;

printf("請(qǐng)選擇\n");

scanf("%d",input);

switch(input)

case1:

game();

break;

case0:

printf("退出游戲\n");

break;

default:

printf("選擇錯(cuò)誤,請(qǐng)重新選擇\n");

}while(input);

return0;

}

3、實(shí)現(xiàn)游戲函數(shù)的各個(gè)功能

我們要做的是三子棋,應(yīng)該先有一個(gè)棋盤

所以我們就可以用二維數(shù)組來創(chuàng)建這樣一個(gè)3*3的棋盤

鑒于以后可能會(huì)想要不同行和列的棋盤

所以我們可以定義宏來表示數(shù)組的行和列,以后想要修改行數(shù)和列數(shù)也很方便

創(chuàng)建棋盤之后,我們要將棋盤里的元素進(jìn)行初始化

接著還要打印出來呈現(xiàn)給玩家

然后就是下棋的過程,因?yàn)槲覀兊貌粩嘞碌揭环节A或者棋盤滿

所以我們可以用while循環(huán)來實(shí)現(xiàn)

接著就是

玩家下棋,展示棋盤,判斷輸贏

電腦下棋,展示棋盤,判斷輸贏

......

我們可以把以上功能表達(dá)出來

voidgame()

charboard[ROW][COL];//宏的定義放在game.h里面

charret=0;//我們用ret這個(gè)變量去接收判斷輸贏的函數(shù)所返回的值

IntBoard(board,ROW,COL);//這些具體的函數(shù)都會(huì)分裝到game.c上面

DisplayBoard(board,ROW,COL);

//創(chuàng)建和展示棋盤之后,就是不斷下棋,展示,判斷的過程了

while(1)

PlayerMove(board,ROW,COL);

DisplayBoard(board,ROW,COL);

ret=IsWin(board,ROW,COL);

if(ret!='C')//也就是指要么一方贏,要么棋盤滿,就應(yīng)該跳出循環(huán),不再繼續(xù)下棋了

break;

//這兩步的區(qū)別就只是第一行而已

ComputerMove(board,ROW,COL);

DisplayBoard(board,ROW,COL);

ret=IsWin(board,ROW,COL);

if(ret!='C')

break;

if(ret=='*')

printf("玩家贏\n");

elseif(ret=='#')

printf("電腦贏\n");

else

printf("平局\n");

}

game函數(shù)放在menu函數(shù)后面就好了

game.c

所以我們所需要分裝到game.c里的函數(shù)有:

初始化棋盤,打印棋盤,玩家下棋,電腦下棋,判斷輸贏

那么接下來我們就在game.c里實(shí)現(xiàn)上述函數(shù)的功能

初識(shí)化棋盤

我們利用for循環(huán)把里面的元素都初始化為空格

#include"game.h"

voidIntBoard(charboard[ROW][COL],introw,intcol)

inti=0;

intj=0;

for(i=0;irow;i++)

for(j=0;jcol;j++)

board[i][j]='';

}

打印棋盤

這里要特別注意分割行的問題

voidDisplayBoard(charboard[ROW][COL],introw,intcol)

inti=0;

intj=0;

for(i=0;irow;i++)

for(j=0;jcol;j++)

printf("%c",board[i][j]);

if(jcol-1)

printf("|");//每一列的每一個(gè)元素中間打印|

printf("\n");//每列打印完打印分割行

if(irow-1)

for(j=0;jcol;j++)

printf("---");

if(jcol-1)

printf("|");

printf("\n");//棋盤全都打印好之后打印分割行

}

玩家下棋

這里的實(shí)現(xiàn)思路是:

1、判斷輸入的位置有無越界

2、有則提示,沒有則判斷有無棋子

3、有則提示,沒有則將該位置放入元素*

(因?yàn)橥婕铱赡芤B續(xù)輸入幾次,所以我們要用到while循環(huán))

voidPlayerMove(charboard[ROW][COL],introw,intcol)

intx;

inty;

//玩家要輸入的行和列

while(1)

printf("請(qǐng)輸入坐標(biāo)\n");

scanf("%d%d",x,

if(x=1x=rowy=1y=col)//判斷有無越界

if(board[x-1][y-1]=='')//判斷有無棋子

board[x-1][y-1]='*';

break;//輸入成功之后跳出循環(huán)

else

printf("坐標(biāo)被占用,請(qǐng)重新輸入\n");

else

printf("坐標(biāo)非法,請(qǐng)重新輸入\n");

}

電腦下棋

這里的實(shí)現(xiàn)思路是:

1、生成隨機(jī)數(shù)(這個(gè)數(shù)值不能越界)

2、將該位置放入元素#,這里不需要判斷,因?yàn)楸旧砭筒恍枰斎?/p>

voidComputerMove(charboard[ROW][COL],introw,intcol)

intx=0;

inty=0;

srand((unsignedint)time(NULL));

printf("電腦走\(yùn)n");

while(1)

x=rand()%row;//生成隨機(jī)數(shù),這里就需要用到時(shí)間戳了,我們還要做test.c里面包含一個(gè)time.h

y=rand()%col;

if(board[x][y]=='')

board[x][y]='#';

break;

}

判斷輸贏

這里還要分為棋盤是否滿子和一方贏

是否滿子

實(shí)現(xiàn)思路:

這個(gè)比較簡單,我們只要依次查看棋盤,若有一個(gè)元素為空格,即為滿

然后注意一下返回值就好了

intIsFull(charboard[ROW][COL],introw,intcol)

inti=0;

intj=0;

for(i=0;irow;i++)

for(j=0;jcol;j++)

if(board[i][j]=='')

return0;

return1;

}

哪一方贏

實(shí)現(xiàn)思路:

根據(jù)規(guī)則,我們要判斷是否有三個(gè)相同的棋子連成直線

所以,每一行,每一列判斷一次,然后對(duì)角線再判斷兩次就好了

使用for循環(huán)和if語句來實(shí)現(xiàn)

charIsWin(charboard[ROW][COL],introw,intcol)

inti=0;

intj=0;

for(i=0;irow;i++)//先判斷行

if(board[i][0]==board[i][1]board[i][1]==board[i][2]board[i][0]!='')

returnboard[i][0];

for(j=0;jcol;j++)//再判斷列

if(board[0][i]==board[1][i]board[1][i]==board[2][i]board!='')

returnboard[0][i];

//接著是兩次對(duì)角線

if(board[0][0]==board[1][1]board[1][1]==board[2][2]board[1][1]!='')

returnboard[1][1];

if(board[0][2]==board[1][1]board[1][1]==board[2][0]board[1][1]!='')

returnboard[1][1];

//然后我們?cè)龠@里直接調(diào)用IsFull函數(shù),就不用在game函數(shù)里調(diào)用了,而且返回值都能統(tǒng)一管理

if(IsFull(board,ro

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論