C語言實現(xiàn)簡易三子棋游戲
更新時間:2021年04月29日 08:26:20 作者:研冰堅
這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
利用數(shù)組來創(chuàng)建一個三子棋小游戲的步驟如下:
1、建立一個可以容納九個元素的3*3棋盤。并初始化,使所有位置都為三。
2、打印棋盤,使其盡可能美觀。
3、玩家通過輸入坐標(row,col)來落子。
4、判斷輸贏(是否有三個棋子相連)。
5、電腦隨機落子(利用時間戳,實現(xiàn)真隨機)。
6、判斷輸贏。
實現(xiàn)代碼如下:
#define MAX_ROW 3 #define MAX_COL 3 void init(char chess[MAX_ROW][MAX_COL]){ for (int row = 0; row < MAX_ROW; row++){ for (int col = 0; col < MAX_COL; col++){ chess[row][col] = ' '; } } } //打印棋盤 void print(char chess[MAX_ROW][MAX_COL]){ printf("+--+--+--+\n"); for (int row = 0; row < MAX_ROW; row++){ printf("|"); for (int col = 0; col < MAX_COL; col++){ printf("%c |", chess[row][col]); } printf("\n+--+--+--+\n"); } } //玩家落子 void playerMove(char chessBoard[MAX_ROW][MAX_COL]){ while (1){ printf("請落子(row col)\n"); int row = 0; int col = 0; scanf("%d %d", &row &col);//錄入玩家落子信息 if (row >= MAX_ROW || row < 0 || col < 0 || col >= MAX_COL){ printf("落子錯誤,請重新落子:\n"); continue; }//判斷玩家落子的合法性。 else if (chessBoard[row][col] != ' '){ printf("您輸入的位置已經(jīng)有棋子,請重新輸入:\n"); continue; }//判斷該位置是否已有棋子。 else{ chessBoard[row][col] = 'x'; break; }//最終落子位置。 } } //電腦落子 void computerMove(char chessBoard[MAX_ROW][MAX_COL]){ while (1){ int row = rand() % MAX_ROW; int col = rand() % MAX_COL; if (chessBoard[row][col] != ' '){ continue; }//已落子,更換位置。 chessBoard[row][col] = '0'; break; } } //判斷棋盤是否已滿,如果滿輸出0,沒滿輸出1. int isFull(char chessBoard[MAX_ROW][MAX_COL]){ for (int row = 0; row < MAX_ROW; row++){ for (int col = 0; col < MAX_COL; col++){ if (chessBoard[row][col] == ' '){ return 1; } } } return 0; } //判斷誰獲勝,可以約定如果返回‘x'玩家獲勝 //如果返回‘0'電腦獲勝 //返回‘ '則表示還未結(jié)束 //返回 's'表示和棋 char isGameover(char chessBoard[MAX_ROW][MAX_COL]){ for (int row = 0; row < MAX_ROW; row++){ if (chessBoard[row][0] != ' '&& chessBoard[row][0] == chessBoard[row][1] && chessBoard[row][0] == chessBoard[row][2]){ return chessBoard[row][0]; } }//掃描所有行 for (int col = 0; col < MAX_COL; col++){ if (chessBoard[0][col] != ' '&& chessBoard[0][col] == chessBoard[1][col] && chessBoard[0][col] == chessBoard[2][col]){ return chessBoard[0][col]; } }//掃描所有列 if (chessBoard[0][0] != ' '&& chessBoard[0][0] == chessBoard[1][1] && chessBoard[0][0] == chessBoard[2][2]){ return chessBoard[0][0]; } if (chessBoard[0][2] != ' '&& chessBoard[0][2] == chessBoard[1][1] && chessBoard[0][2] == chessBoard[2][0]){ return chessBoard[0][2]; }//掃描斜行 if (isFull(chessBoard)){ return 's'; }//判斷是否和棋 return ' '; } //前面函數(shù)的調(diào)用 int main(){ char chessBoard[MAX_ROW][MAX_COL]; init(chessBoard); char winner = ' '; while (1){ print(chessBoard);//打印棋盤 playerMove(chessBoard);//玩家落子 winner = isGameover(chessBoard); if (winner != ' '){ //游戲結(jié)束" break; } computerMove(chessBoard);//電腦落子 winner = isGameover(chessBoard); if (winner != ' '){ //游戲結(jié)束 break; } } //輸出最終結(jié)果。 if (winner = 'x'){ printf("恭喜你,你贏了!\n"); } else if(winner = '0'){ printf("蠢,你輸了!\n"); } else{ printf("和棋!\n"); } return 0; }
實現(xiàn)結(jié)果如下圖:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。