设计思路
先用二维数组定义一个棋盘,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("现在轮到玩家一,棋子:%cn请输入格子的行数:", PLAYER1);
52 else
53 printf("现在轮到玩家二,棋子:%cn请输入格子的行数:", 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 }
效果截图
原文链接: https://www.cnblogs.com/hbsblog/p/13028531.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/198208
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!