文章目錄🚀write in front🚀
創(chuàng)新互聯(lián)公司是專業(yè)的濱海新區(qū)網(wǎng)站建設(shè)公司,濱海新區(qū)接單;提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行濱海新區(qū)網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
📝個人主頁:認真寫博客的夏目淺石.
🎁歡迎各位→點贊👍 + 收藏?? + 留言📝?
📣系列專欄:鵬哥帶我學c帶我飛
💬總結(jié):希望你看完之后,能對你有所幫助,不足請指正!共同學習交流 🖊
??不如沉默去做,看結(jié)局怎么去說 ?
用c語言實現(xiàn)三子棋游戲
1.菜單界面選擇開始或者退出游戲。
2.創(chuàng)建棋盤并初始化。
3.打印棋盤。
4.玩家落子(玩家輸入行列坐標的方式來落子),'*’表示玩家落子。
5.判定勝負關(guān)系(輸,贏,和棋),‘Q’表示和棋。
6.電腦落子(隨機位置落子) ,’#’表示電腦落子。
7.判定勝負關(guān)系
這樣做的目的是為了讓我的實現(xiàn)更加簡單和簡介,思路更加清晰,方便初學者學習。
2.🎐寫出主函數(shù)和創(chuàng)建菜單void menu()
{printf("***********************\n");
printf("******* 1. play *******\n");
printf("******* 0. eixt *******\n");
printf("***********************\n");
}
void test()
{menu();
}
int main()
{test();
return 0;
}
3.🎐搭建游戲邏輯這里顯然就是打印完菜單要開始游戲,所以我應(yīng)該搭建出來我的游戲邏輯。
void test()
{int input;
do
{menu();
printf("請選擇:>");
scanf("%d",&input);
switch(input)
{ case 1: game();
break;
case 0: printf("退出游戲");
break;
default: printf("選擇錯誤:>");
break;
}
}while(input);
}
輸入1我要繼續(xù)游戲,輸入0我就退出我的游戲,其他的就是不符合所以從新輸入。
下一步那就是要實現(xiàn)game函數(shù)內(nèi)容來豐富我的游戲。
game函數(shù)需要先實現(xiàn)什么呢?
當然是我們的棋盤需要被初始化啦,然后就是打印我的棋盤對吧?
void game()
{char board[ROW][COL];
//初始化我的棋盤
init_board(board,ROW,COL);
//打印我的棋盤
print_board(board,ROW,COL);
}
1.初始化我的棋盤:
void init_board(char borad[ROW][COL],int row,int col)
{for(int i=0;iint j=0;
for(j=0;j borad[i][j] = ' ';
}
}
}
2.打印我的棋盤:
簡陋版本:
void print_board(char board[ROW][COL], int row, int col)
{int i = 0;
for (i = 0; i< row; i++)
{printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
if(i
美化版本:
美化版本好處就是更加便于我對于代碼的操作和改動。
void print_board(char board[ROW][COL],int row,int col)
{int i=0;
for(i=0;iint j=0;
for(j=0;j printf(" %c ",board[i][j]);
if(j!=col-1)
printf("|");
}
printf("\n");
if(i for(j=0;j printf("---");
if(j!=col-1)
printf("|");
}
printf("\n");
}
}
}
5.🎐game函數(shù)的進一步實現(xiàn)玩家下棋void game()
{char board[ROW][COL];
//初始化我的棋盤
init_board(board,ROW,COL);
//打印我的棋盤
print_board(board,ROW,COL);
while(1)
{player_move(board,ROW,COL);//我下完棋之后就要再次打印我的棋盤然后反復(fù)操作
print_board(board,ROW,COL);
}
}
player_move的實現(xiàn):
void player_move(char board[ROW][COL],int row,int col)
{printf("玩家下棋\n");
while(1)
{printf("請輸入要下棋得坐標:>");
int x,y;
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");
}
}
}
所以就是對于我的x,y,坐標,看輸入是否合法,不合法就需要我去重新輸入,然后還需要思考是否我選擇的坐標被占用了,如果沒有就下去這個子然后跳出,否則繼續(xù)?。。?/p>6.🎐game函數(shù)的再進一步實現(xiàn)電腦下棋
void game()
{//存放玩家或者電腦的落子情況
char board[ROW][COL];
char ret = 0;
//初始化一下棋盤為全空格
init_board(board, ROW, COL);
print_board(board, ROW, COL);
while (1)
{player_move(board, ROW, COL);
print_board(board, ROW, COL);
computer_move(board, ROW, COL);
print_board(board, ROW, COL);
}
}
computer_move函數(shù)的實現(xiàn)代碼:
這里用到了一個rand函數(shù)是生成隨機數(shù)的一個函數(shù),大家可以去msdn查找學習。
void computer_move(char board[ROW][COL], int row, int col)
{printf("電腦下棋:\n");
while (1)
{int x = rand() % row;
int y = rand() % col;
if (board[x][y] == ' ')
{ board[x][y] = '#';
break;
}
}
}
7.🎐對于三子棋游戲規(guī)則的思考其實思考內(nèi)容就是我出現(xiàn)結(jié)局的情況,這里有幾種方案:
判斷輸贏
判斷輸贏的代碼要告訴我:電腦贏了?玩家贏了?玩家贏?游戲繼續(xù)?
電腦贏:#
玩家贏:*
平局:Q
游戲繼續(xù):C
思考了這些其實就可以繼續(xù)去完善我們的代碼了。
8.🎐對于三子棋游戲的最終實現(xiàn)void game()
{//存放玩家或者電腦的落子情況
char board[ROW][COL];
char ret = 0;
//初始化一下棋盤為全空格
init_board(board, ROW, COL);
print_board(board, ROW, COL);
while (1)
{player_move(board, ROW, COL);
print_board(board, ROW, COL);
//判斷輸贏
ret = is_win(board,ROW, COL);
if (ret != 'C')
{ break;
}
computer_move(board, ROW, COL);
print_board(board, ROW, COL);
//判斷輸贏
ret = is_win(board, ROW, COL);
if (ret != 'C')
{ break;
}
}
if (ret == '#')
printf("電腦贏了\n");
else if (ret == '*')
printf("玩家贏了\n");
else if (ret == 'Q')
printf("平局\n");
}
is_full以及我的is_win函數(shù)的實現(xiàn)
//我希望is_full這個函數(shù)只是為了支持is_win函數(shù)的,只是在is_win函數(shù)內(nèi)部使用
//那我們就沒必要在頭文件中聲明
//
//判斷棋盤是否滿了
static int is_full(char board[ROW][COL], int row, int col)
{int i = 0;
int j = 0;
for (i = 0; i< row; i++)
{for (j = 0; j< col; j++)
{ if (board[i][j] == ' ')
return 0;
}
}
return 1;
}
char is_win(char board[ROW][COL], int row, int col)
{int i = 0;
//判斷三行
for (i = 0; i< row; i++)
{if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0]!=' ')
{ return board[i][0];
}
}
//判斷三列
for (i = 0; i< col; i++)
{if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
{ return board[0][i];
}
}
//對角線
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
{return board[1][1];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
{return board[1][1];
}
//平局?
if (is_full(board, row, col) == 1)
{return 'Q';
}
//繼續(xù)
//沒有玩家或者電腦贏,也沒有平局,游戲繼續(xù)
return 'C';
}
四、🌻玩法演示玩家贏:
電腦贏:
#include#include#include#define ROW 3
#define COL 3
void menu()
{printf("***********************\n");
printf("******* 1. play *******\n");
printf("******* 0. eixt *******\n");
printf("***********************\n");
}
void init_board(char borad[ROW][COL],int row,int col)
{for(int i=0;iint j=0;
for(j=0;j borad[i][j] = ' ';
}
}
}
void print_board(char board[ROW][COL],int row,int col)
{int i=0;
for(i=0;iint j=0;
for(j=0;j printf(" %c ",board[i][j]);
if(j!=col-1)
printf("|");
}
printf("\n");
if(i for(j=0;j printf("---");
if(j!=col-1)
printf("|");
}
printf("\n");
}
}
}
void player_move(char board[ROW][COL],int row,int col)
{printf("玩家下棋\n");
while(1)
{printf("請輸入要下棋得坐標:>");
int x,y;
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");
}
}
}
void computer_move(char board[ROW][COL], int row, int col)
{printf("電腦下棋:\n");
while (1)
{int x = rand() % row;
int y = rand() % col;
if (board[x][y] == ' ')
{ board[x][y] = '#';
break;
}
}
}
int is_full(char board[ROW][COL], int row, int col)
{int i = 0;
int j = 0;
for (i = 0; i< row; i++)
{for (j = 0; j< col; j++)
{ if (board[i][j] == ' ')
return 0;
}
}
return 1;
}
char is_win(char board[ROW][COL],int row,int col)
{int i=0;
//判斷三行
for(i=0;iif(board[i][0]==board[i][1]&&board[i][1]==board[i][2]&&board[i][0]!=' ')
return board[i][0];
}
//判斷三列
for(i=0;i if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
return board[0][i];
}
//對角線
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
{return board[1][1];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
{return board[1][1];
}
//平局?
if (is_full(board, row, col) == 1)
{return 'Q';
}
//繼續(xù)
//沒有玩家或者電腦贏,也沒有平局,游戲繼續(xù)
return 'C';
}
void game()
{char board[ROW][COL];
char ret=0;
//初始化我的棋盤
init_board(board,ROW,COL);
//打印我的棋盤
print_board(board,ROW,COL);
while(1)
{player_move(board,ROW,COL);
print_board(board,ROW,COL);
ret=is_win(board,ROW,COL);
if(ret!='C')
{ break;
}
computer_move(board,ROW,COL);
print_board(board,ROW,COL);
ret=is_win(board,ROW,COL);
if(ret!='C')
{ break;
}
}
if(ret=='#')
printf("電腦贏了\n");
else if(ret=='*')
printf("玩家贏了\n");
else if(ret=='Q')
printf("平局\n");
}
//判斷輸贏
//判斷輸贏的代碼要告訴我:電腦贏了?玩家贏了?玩家贏?游戲繼續(xù)?
//電腦贏:#
//玩家贏:*
//平局:Q
//游戲繼續(xù):C
void test()
{int input;
do
{menu();
printf("請選擇:>");
scanf("%d",&input);
switch(input)
{ case 1: game();
break;
case 0: printf("退出游戲");
break;
default: printf("選擇錯誤:>");
break;
}
}while(input);
}
int main()
{test();
return 0;
}
🦋總結(jié)三子棋游戲:
1.三子棋實現(xiàn),先去想邏輯和游戲規(guī)則,然后搭建這些邏輯框架,最后寫出代碼去實現(xiàn)它,逐步思考和代碼推進。
2.多去想怎么可以優(yōu)化我的代碼,這樣才會使得自己進步。
個人對于近期學習感想:
1.學習一定要穩(wěn)重,不能圖快而使得自己學的不夠精,最后基礎(chǔ)不牢,又從頭開始學習。
2.認準一個老師,就踏踏實實跟著學就行,多去做老師反復(fù)強調(diào)你需要做的,少說便會得到答案
3.堅持不斷地學習和規(guī)律的作息其實這樣的學習效果真的非常好,希望你我都不是三分熱度,堅持自己的學習計劃,慢慢去做吧,加油!
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
分享文章:C語言實現(xiàn)三子棋(超詳解版本)-創(chuàng)新互聯(lián)
本文地址:http://muchs.cn/article4/dodoie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、微信公眾號、定制開發(fā)、品牌網(wǎng)站制作、網(wǎng)站維護、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)