c++實現五子棋游戲


設計思路


 

  先用二維數組定義一個棋盤,0代表沒有玩家下過,1代表玩家一的棋子,2代表玩家二的棋子,將棋盤輸出,然后讓玩家依次輸入所要下的位置的行數和列數,並賦值給數組,之后進行判斷:判斷棋盤上所有棋子是否有連續5個,如果是,則返回獲勝玩家,如果否,則繼續輸入下一步要下的棋子坐標

 

代碼實現


 

 

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 #define HEIGHT 15    //定義棋盤行數
  5 #define WIDTH 15    //定義棋盤列數
  6 #define PLAYER1 'X'    //定義玩家一棋子
  7 #define PLAYER2 'O'    //定義玩家二棋子
  8 
  9 int map[HEIGHT][WIDTH];    //定義游戲棋盤
 10 
 11 //輸出棋盤
 12 void sc()
 13 {
 14     printf("    ");
 15     for (int i = 0;i < WIDTH;i++)
 16         if (i < 9)
 17             printf("0%d ", i+1);
 18         else
 19             printf("%d ",i+1);
 20     printf("\n    ");
 21     for (int i = 0;i <=WIDTH;i++)
 22         printf("-  ");
 23     printf("\n");
 24     for (int i = 0;i < HEIGHT;i++)
 25     {
 26         if (i < 9)
 27             printf("0%d ", i + 1);
 28         else
 29             printf("%d ", i + 1);
 30         printf("|");
 31         for (int j = 0;j < WIDTH;j++)
 32             if (map[i][j] == 0)
 33                 printf("+  ");
 34             else if (map[i][j] == 1)
 35                 printf("%c  ", PLAYER1);
 36             else
 37                 printf("%c  ",PLAYER2);
 38         printf("|\n");
 39     }
 40         printf("    ");
 41     for (int i = 0;i <= WIDTH;i++)
 42         printf("-  ");
 43     printf("\n");
 44 }
 45 //落子
 46 void play(int player)
 47 {
 48     int targetH = 0, targetW = 0;    //targetH:選定的格子行數    targetW:選定的格子列數
 49 
 50     if(player==1)
 51         printf("現在輪到玩家一,棋子:%c\n請輸入格子的行數:", PLAYER1);
 52     else
 53         printf("現在輪到玩家二,棋子:%c\n請輸入格子的行數:", PLAYER2);
 54     scanf_s("%d", &targetH);
 55     while (targetH <= 0 || targetH > HEIGHT)
 56     {
 57         printf("請輸入正確的行數:");
 58         scanf_s("%d", &targetH);
 59     }
 60     printf("請輸入格子的列數:");
 61     scanf_s("%d", &targetW);
 62     while (targetW <= 0 || targetW > WIDTH)
 63     {
 64         printf("請輸入正確的行數:");
 65         scanf_s("%d",&targetW);
 66     }
 67     if(map[targetH - 1][targetW - 1] ==0)
 68         map[targetH-1][targetW-1]=player;
 69     else
 70     {
 71         printf("輸入的坐標重復,請重新輸入\n");
 72         play(player);
 73     }
 74 }
 75 
 76 //判斷游戲是否結束,並返回勝利玩家
 77 int pd(int player)
 78 {
 79     int k = 0;    //判斷當前有多少連續的棋子
 80 
 81     for (int i = 0;i < HEIGHT;i++)
 82         for (int j = 0;j <= WIDTH;j++)
 83         {
 84             if (map[i][j] == player)    
 85             {
 86                 for (k = 1;k < 5;k++)    //判斷是否一行連續5個棋子
 87                 {
 88                     if (map[i][j + k] != player)
 89                         break;
 90                 }
 91                 if (k == 5)    
 92                     return player;
 93                 for (k = 1;k < 5;k++)    //判斷是否一列連續5個棋子
 94                 {
 95                     if (map[i + k][j] != player)
 96                         break;
 97                 }
 98                 if (k == 5)
 99                     return player;
100                 for (k = 1;k < 5;k++)    //判斷是否一斜線連續5個棋子
101                 {
102                     if (map[i + k][j + k] != player)
103                         break;
104                 }
105                 if (k == 5)
106                     return player;
107             }
108         }
109     return 0;    //如果都沒有連續5個棋子,游戲繼續
110 }
111 //初始化棋盤
112 void csh()
113 {
114     for (int i = 0;i < HEIGHT;i++)    //地圖初始化
115         for (int j = 0;j < WIDTH;j++)
116             map[i][j] = 0;
117 }
118 
119 
120 void main()
121 {
122     int winPlayer=0,player=0,isAgain=0; //winPlayer:勝利的玩家    player:現在游戲中的玩家 isAgain:是否重開游戲
123 
124     csh();
125     sc();
126     while (winPlayer == 0)    
127     {    
128         play((player%2)+1);    //判斷現在是哪一位玩家
129         winPlayer=pd((player % 2) + 1);
130         system("cls");    
131         player++;
132         sc();
133     }
134     winPlayer == 1 ? printf("恭喜玩家一獲得勝利!!!\n") : printf("恭喜玩家二獲得勝利!!!\n");
135         printf("輸入1重新開始,輸入其他任意數字退出游戲");
136         scanf_s("%d",&isAgain);
137         if (isAgain == 1)
138         {
139             system("cls");
140             main();
141         }
142             
143 }

 

 

 

效果截圖

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM