C語言實現簡單的三子棋
阿新 • • 發佈:2020-11-12
本文例項為大家分享了C語言實現簡單三子棋遊戲的具體程式碼,供大家參考,具體內容如下
一、主要思想
1、建立一個3*3的棋盤(使用字元陣列)
2、初始化棋盤(用空格填充)
3、列印棋盤(使其有可見的邊框)
4、玩家落子,用x表示(檢驗是否越界,是否已經落子,是否贏)
5、電腦落子,用o表示(檢驗是否已經落子,是否贏) 注:電腦在有效範圍內隨機落子,使用當前時間戳設定隨機種子即srand(time(0))
6、三種情況:玩家贏,電腦贏,和棋
二、程式碼實現
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <time.h> //定義巨集,棋盤的最大行數和最大列數為3 #define MAX_ROW 3 #define MAX_COL 3 //無論是玩家落子還是電腦落子,都需確定落子的行和列,以此確定在棋盤上的位置 //玩家落子 //玩家輸入之後,需要檢驗是否輸入越界,該位置是否已經落子 //若無這兩種情況,就將該位置賦值為'x',否則重新輸入 char playermove(char chessboard[MAX_ROW][MAX_COL]) { int row = 0; int col = 0; while (1){ printf("請輸入您落子的位置:(row col)"); scanf("%d %d",&row,&col); //校驗 //校驗輸入是否輸入有誤 if (row < 0 || row >= MAX_ROW || col<0 || col>=MAX_COL){ printf("您的輸入越界!!\n"); continue; }else if (chessboard[row][col]!=' '){ printf("該位置已落子!!\n"); continue; }else{ chessboard[row][col] = 'x'; return chessboard[row][col]; } } } //電腦落子 //需要檢驗該位置是否落子(無需檢驗是否越界,因為我們設定的落子範圍為有效範圍) //若無以上情況,就將該位置賦值為'o',否則,重新獲取隨機值 void computermove(char chessboard[MAX_ROW][MAX_COL]) { while (1){ int row = rand() % MAX_ROW; //獲取一個0~2範圍內的隨機行數 int col = rand() % MAX_COL; //獲取一個0~2範圍內的隨機列數 //校驗落子位置是否已經落子 if (chessboard[row][col] != ' '){ continue; } chessboard[row][col] = 'o'; break; } } //判斷是否為和棋,即判斷棋盤是否滿 //找到空格代表未滿,找不到,則滿了(因為我們初始化的時候將棋盤初始化為空格' ') //滿返回1,未滿返回0 char 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 0; } } } //未找到,即滿了 return 1; } //判斷是否贏 //'x'表示玩家獲勝 //'o'表示電腦獲勝 //' '表示勝負未分 //'h'表示和棋 char isWin(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 'h'; } return ' '; } //初始化棋盤,初始化為空格' ' void init(char chessboard[MAX_ROW][MAX_COL]) { for (int row = 0; row < MAX_ROW; row++){ for (int col = 0; col < MAX_COL; col++){ chessboard[row][col] = ' '; } } } //列印棋盤 void printchessboard(char chessboard[MAX_ROW][MAX_COL]) { printf("+---+---+---+\n"); for (int row = 0; row < MAX_ROW; row++){ printf("| %c | %c | %c |\n",chessboard[row][0],chessboard[row][1],chessboard[row][2]); printf("+---+---+---+\n"); } } //遊戲 void game() { char chessboard[MAX_ROW][MAX_COL] = {0}; init(chessboard);//初始化棋盤 char winner = ' '; while (1){ printchessboard(chessboard);//列印棋盤 playermove(chessboard);//玩家落子 //校驗,是否贏是否和棋 winner = isWin(chessboard); if (winner != ' '){ break; } computermove(chessboard);//電腦落子 winner = isWin(chessboard); if (winner != ' '){ break; } } if (winner == 'x'){ printchessboard(chessboard); printf("恭喜您贏了!\n"); }else if (winner == 'o'){ printchessboard(chessboard); printf("很遺憾您輸了!\n"); }else if (winner == 'h'){ printchessboard(chessboard); printf("和棋!您和電腦棋技相當~\n"); } } //選單 int menue(int choice) { printf("************************\n"); printf("1.開始遊戲\n"); printf("0.結束遊戲\n"); printf("************************\n"); printf("請輸入您的選擇:"); scanf("%d",&choice); return choice; } //主函式 int main() { srand(time(0)); int choice = 0; while (1){ choice=menue(choice); if (choice == 1){ game(); }else if (choice == 0){ break; }else{ printf("您的輸入有誤,請重新輸入\n"); continue; } } system("pause"); return 0; }
三、執行結果
大概框架如此,也可以進行優化,比如system("cls")清屏等
更多有趣的經典小遊戲實現專題,分享給大家:
C++經典小遊戲彙總
python經典小遊戲彙總
python俄羅斯方塊遊戲集合
JavaScript經典遊戲 玩不停
java經典小遊戲彙總
javascript經典小遊戲彙總
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。