




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第C語言實現(xiàn)簡易的三子棋小游戲本文實例為大家分享了C語言實現(xiàn)三子棋小游戲的具體代碼,供大家參考,具體內(nèi)容如下
1.基本流程
1.菜單界面選擇開始或者退出游戲。
2.創(chuàng)建棋盤并初始化。
3.打印棋盤。
4.玩家落子并打印棋盤
5.電腦落子并打印棋盤
6.判定勝負(fù)關(guān)系(輸,贏,平局)
2.配置運(yùn)行環(huán)境
本次游戲用到三個文件,兩個源文件test.c,game.c,一個頭game.h。其中,game.c,game.h可以稱作一個游戲模塊,為什么要這樣做呢?因為多個文件可以分別處理各自模塊的功能,能更好處理各個模塊之間的邏輯并且便于后期調(diào)試,也使得代碼的可讀性提高。
3.代碼過程
3.1菜單界面選擇開始或者退出游戲
intmain()
test();
return0;
}
打印菜單
voidmenu()
printf("******************\n");
printf("*****1.play*****\n");
printf("*****0.exit*****\n");
printf("******************\n");
}
選擇數(shù)字,1代表玩游戲,0代表退出游戲
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);
}
3.2.創(chuàng)建棋盤并初始化。
用一個二維數(shù)組創(chuàng)建一個3*3的棋盤。
使用宏定義的原因:
1.推高代碼可讀性,后續(xù)代碼中遇到3,方便理解含義。
2.提高擴(kuò)展性,如果將來要修改棋盤尺寸,代碼修改會很方便。
charboard[ROW][COL]={0};
#defineROW3
#defineCOL3
在game.c中初始化棋盤
voidInitBoard(charboard[ROW][COL],introw,intcol)
inti=0;
for(i=0;irow;i++)
{
intj=0;
for(j=0;jcol;j++)
{
board[i][j]='';
}
}
}
3.3打印棋盤。
在game.c中實現(xiàn)打印棋盤
voidDisplayboard(charboard[ROW][COL],introw,intcol)
inti=0;
for(i=0;irow;i++)
{
//打印數(shù)據(jù)
intj=0;
for(j=0;jcol;j++)
{
printf("%c",board[i][j]);
if(jcol-1)
printf("|");
}
printf("\n");
//打印分割的行
if(irow-1)
{
for(j=0;jcol;j++)
{
printf("---");
if(jcol-1)
{
printf("|");
}
}
printf("\n");
}
}
}
棋盤的搭建的本質(zhì)是留出一片空間,玩家或者電腦在棋盤上進(jìn)行操作。每一行和每一列都要設(shè)置分割線進(jìn)行區(qū)分,才能完成打印。
4.玩家落子并打印棋盤
在game.c中實現(xiàn)對棋盤上空位的判斷,防止一個位置多次下棋,并且顯示出空位給玩家下棋,之后打印出新的棋盤。
voidplayer_move(charboard[ROW][COL],introw,intcol)
intx=0;
inty=0;
printf("玩家下棋\n");
while(1)
{
printf("請輸入坐標(biāo):
scanf("%d%d",x,
//下棋
if(x=1x=rowy=1y=col)
{
if(board[x-1][y-1]=='')
{
board[x-1][y-1]='*';
break;
}
else
printf("該坐標(biāo)已被占用,請重新輸入\n");
}
else
{
printf("數(shù)字輸入非法,請重新輸入\n");
}
}
}
5.電腦落子并打印棋盤
玩家選擇一個位置打印后,電腦通過rand()函數(shù)產(chǎn)生一個在限定范圍內(nèi)的的隨機(jī)值,并產(chǎn)生一個隨機(jī)坐標(biāo)并在相應(yīng)坐標(biāo)打印一個字符(電腦下棋過程),滯后打印新的棋盤。注意:rand函數(shù)使用之前要調(diào)用一個srand函數(shù)。
同樣也是在game.c文件中實現(xiàn)。
voidcomputer_move(charboard[ROW][COL],introw,intcol)
intx=0;
inty=0;
printf("電腦下棋\n");
while(1)
{
x=rand()%row;
//0~2
y=rand()%col;
//0~2
if(board[x][y]=='')
{
board[x][y]='#';
break;
}
}
}
6.判定勝負(fù)關(guān)系(輸,贏,平局)
在玩家與電腦多次落子之后,產(chǎn)生最終的結(jié)果,這時候?qū)Y(jié)果進(jìn)行分析,相同的3個字符相連(行列對角線)即為勝利,如果棋盤已滿但雙方都沒有完成三個字符相連即為平局。
創(chuàng)建一個is_win函數(shù)用它的返回值來表示游戲結(jié)果
玩家贏:*
電腦贏:#
平局:E
繼續(xù):C
charis_win(charboard[ROW][COL],introw,intcol)
//判斷行
inti=0;
for(i=0;irow;i++)
{
if(board[i][0]==board[i][1]board[i][1]==board[i][2]board[i][1]!='')
returnboard[i][1];
}
//判斷列
for(i=0;icol;i++)
{
if(board[0][i]==board[1][i]board[1][i]==board[2][i]board[1][i]!='')
returnboard[1][i];
}
//判斷對角線
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];
//判斷平局
if(is_full(board,row,col)==1)
return'E';
//繼續(xù)
return'C';
}
每一次玩家與電腦落子后都要進(jìn)行判斷
//判斷輸贏的代碼
char
ret=0;
ret=is_win(board,ROW,COL);
if(ret!='C')
break;
}
在下棋的過程中,還要時時刻刻判斷棋盤有沒有滿。
intis_full(charboard[ROW][COL],introw,intcol)
inti=0;
for(i=0;irow;i++)
{
intj=0;
for(j=0;jcol;j++)
{
if(board[i][j]=='')
return0;//沒滿
}
}
return1;//(滿了)
}
7.整體代碼展示
7.1test.c
#includestdio.h
#include"game.h"
voidmenu()
printf("******************\n");
printf("*****1.play*****\n");
printf("*****0.exit*****\n");
printf("******************\n");
voidgame()
char
ret=0;
charboard[ROW][COL]={0};
//初始化棋盤為全空格
InitBoard(board,ROW,COL);
//打印棋盤
Displayboard(board,ROW,COL);
while(1)
{
//玩家下棋
player_move(board,ROW,COL);
Displayboard(board,ROW,COL);
//判斷輸贏
ret=is_win(board,ROW,COL);
if(ret!='C')
{
break;
}
//電腦下棋
隨機(jī)下棋
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=='#')
{
printf("電腦贏了\n");
}
else
printf("平局\n");
//什么情況,游戲就結(jié)束了
//玩家贏-'*'
//電腦贏-'#'
//平局
-'E'
//繼續(xù)
-'C'
voidtest()
srand((unsignedint)time(NULL));
intinput=0;
do
{
menu();
printf("請選擇:
scanf("%d",input);
switch(input)
{
case1:
game();//游戲
break;
case0:
printf("退出游戲\n");
break;
default:
printf("選擇錯誤\n");
break;
}
}while(input);
intmain()
test();
return0;
}
7.2game.c
//初始化棋盤
voidInitBoard(charboard[ROW][COL],introw,intcol)
inti=0;
for(i=0;irow;i++)
{
intj=0;
for(j=0;jcol;j++)
{
board[i][j]='';
}
}
//打印棋盤
voidDisplayboard(charboard[ROW][COL],introw,intcol)
inti=0;
for(i=0;irow;i++)
{
//打印數(shù)據(jù)
intj=0;
for(j=0;jcol;j++)
{
printf("%c",board[i][j]);
if(jcol-1)
printf("|");
}
printf("\n");
//打印分割的行
if(irow-1)
{
for(j=0;jcol;j++)
{
printf("---");
if(jcol-1)
{
printf("|");
}
}
printf("\n");
}
}
//玩家下棋
voidplayer_move(charboard[ROW][COL],introw,intcol)
intx=0;
inty=0;
printf("玩家下棋\n");
while(1)
{
printf("請輸入坐標(biāo):
scanf("%d%d",x,
//下棋
if(x=1x=rowy=1y=col)
{
if(board[x-1][y-1]=='')
{
board[x-1][y-1]='*';
break;
}
else
printf("該坐標(biāo)已被占用,請重新輸入\n");
}
else
{
printf("數(shù)字輸入非法,請重新輸入\n");
}
}
//電腦下棋
voidcomputer_move(charboard[ROW][COL],introw,intcol)
intx=0;
inty=0;
printf("電腦下棋\n");
while(1)
{
x=rand()%row;
//0~2
y=rand()%col;
//0~2
if(board[x][y]=='')
{
board[x][y]='#';
break;
}
}
//判斷棋盤有沒有滿
intis_full(charboard[ROW][COL],introw,intcol)
inti=0;
for(i=0;irow;i++)
{
intj=0;
for(j=0;jcol;j++)
{
if(board[i][j]=='')
return0;//沒滿
}
}
return1;//(滿了)
//判斷輸贏
charis_win(charboard[ROW][COL],introw,intcol)
//判斷行
inti=0;
for(i=0;irow;i++)
{
if(board[i][0]==board[i][1]board[i][1]==board[i][2]board[i][1]!='')
returnboard[i][1];
}
//判斷列
for(i=0;icol;i++)
{
if(board[0][i]==board[1][i]board[
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第14課 光榮的少先隊 課件-2024-2025學(xué)年道德與法治一年級下冊統(tǒng)編版
- 酒店培訓(xùn)感想心得體會模版
- 醫(yī)院庭院綠化的生態(tài)效益與社會價值
- 周圍型肺癌的臨床護(hù)理
- 黃綠卡通動物交通安全模板
- 醫(yī)療大數(shù)據(jù)與健康保險的聯(lián)動發(fā)展
- 嬰兒臍疝的臨床護(hù)理
- 區(qū)塊鏈技術(shù)助力文字作品版權(quán)保護(hù)
- 健身房加設(shè)施合同范例
- 安全管理知識培訓(xùn)
- 2023-2024學(xué)年人教版八年級下冊數(shù)學(xué)期中復(fù)習(xí)試卷
- 高考數(shù)學(xué)專題:導(dǎo)數(shù)大題專練(含答案)
- 部編版八年級語文下冊第11課《核舟記》教學(xué)課件
- 角膜潰瘍護(hù)理常規(guī)
- GB/T 43706-2024資產(chǎn)管理戰(zhàn)略資產(chǎn)管理計劃(SAMP)實施指南
- 護(hù)理交接班不全課件
- 腹痛的護(hù)理措施
- 2023年-2024年職業(yè)衛(wèi)生檢測考試題庫及答案
- 《我家漂亮的尺子》課件-定稿
- 區(qū)塊鏈投資計劃書
- 護(hù)患關(guān)系和溝通課件
評論
0/150
提交評論