




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第C語言實(shí)現(xiàn)簡易的三子棋小游戲本文實(shí)例為大家分享了C語言實(shí)現(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可以稱作一個游戲模塊,為什么要這樣做呢?因?yàn)槎鄠€文件可以分別處理各自模塊的功能,能更好處理各個模塊之間的邏輯并且便于后期調(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中實(shí)現(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中實(shí)現(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文件中實(shí)現(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年城市軌道交通起重裝卸機(jī)械操作工職業(yè)技能鑒定試卷
- 2025年國家安全生產(chǎn)監(jiān)督管理總局公務(wù)員錄用考試面試真題試卷(結(jié)構(gòu)化小組)
- 2025年高壓成套電器項(xiàng)目申請報告
- 2025年保育員(三級)考試試卷深度分析與備考指南
- 與離婚協(xié)議書補(bǔ)充協(xié)議
- 2025年P(guān)ETS二級英語聽力理解能力提升試卷(含2025年真題解析)
- 和珅的做人之道
- 2025年保育員實(shí)操技能試卷:幼兒教育心理輔導(dǎo)實(shí)踐創(chuàng)新案例分析
- 2025年電子商務(wù)師(高級)職業(yè)技能鑒定試卷:熱點(diǎn)問題解答與案例分析
- 2025年服裝設(shè)計(jì)師(服裝設(shè)計(jì)實(shí)踐應(yīng)用)考試試題
- 消防水鶴安裝工程施工方案及主要技術(shù)措施
- 《高校教師師德修養(yǎng)》課件
- 2024年深圳市房屋租賃合同(3篇)
- 學(xué)校食品安全投訴舉報制度及流程
- 人教部編版七年級語文上冊《秋天的懷念》示范課教學(xué)課件
- 2024年保育員(初級)考試題及答案
- 廣西壯族賀州市2024年小升初考試數(shù)學(xué)試卷含解析
- “非遺”之首-昆曲經(jīng)典藝術(shù)欣賞智慧樹知到期末考試答案章節(jié)答案2024年北京大學(xué)
- SMP-04-013-00 藥品受托企業(yè)審計(jì)評估管理規(guī)程
- 店鋪代運(yùn)營合同范本
- 兒童樂園安全管理制度
評論
0/150
提交評論