—自己做完后测试了一遍,基本玩法没有大问题(在菜单栏选择的时候如果输入超出预期会有bug 和上一个项目一样doge),源码在最后的链接。
因为我把电脑编码格式改回默认之后运行也乱码了提示:源码放在最后,因为写这项代码的时候我的电脑编码格式进行了设置,所有直接复制代码的话程序运行结果可能会乱码。
- 三子棋实现思路
- 实现思路
- 部分代码
- 1、判断落子区域
- 2.判断游戏是否结束
实现思路
1、玩家可以选择先手还是后手,玩家的棋子是‘@’,机器的棋子是’*’,目前没有棋子用‘_’表示。
2、游戏开始后初始化并展示棋盘。
3、注意每一步落子之后都要判断游戏是否结束并展示最新的棋盘。
4、注意落子时要判断位置是否在棋盘外以及是否该区域已有棋子。
判断落子区域是否正确,if(who !=1)这个是判断是否为机器落子,如果是机器落子则不需要把提示输出到终端。
代码如下(示例):
int drop(char arr[][3], int row, int col, int who)
{
char q = '@';
if (who == 1)//机器下棋时,who为1,用*表示棋子。
q = '*';
if (arr[row][col] == '_')
{
arr[row][col] = q;
}else if (row >= 3 || col >= 3)
{
printf("落子区域超出棋盘范围,请重新输入\n");
return 0;
}
else{
if(who !=1)
printf("%d行%d列已经有棋子,请换个位置落子\n", row, col);
return 0;
}
return 1;
}
2.判断游戏是否结束
每次落子之后都先判断对角线、行或列是否有3个同样的棋子,若有则胜利。
若没有再判断棋盘上有没有空位置,若没有则和棋,有则继续下棋。
int if_win_game(char arr[][3],int row,int col)//根据最后一步落子的位置判断
// ,机器获胜返回1,人获胜返回0 ,和棋子返回2,游戏继续返回3
{
if ((arr[row][0] == '*' && arr[row][1] == '*' && arr[row][2] == '*') || \
(arr[0][col] == '*' && arr[1][col] == '*' && arr[2][col] == '*'))
return 1;
if ((arr[row][0] == '@' && arr[row][1] == '@' && arr[row][2] == '@') || \
(arr[0][col] == '@' && arr[1][col] == '@' && arr[2][col] == '@'))
return 0;
if (row == col || (row == 0 && col == 2) || (row == 2 && col == 0))
{
if ((arr[0][0] == '*' && arr[1][1] == '*' && arr[2][2] == '*')||\
(arr[0][2] == '*' && arr[1][1] == '*' && arr[2][0] == '*'))
return 1;
if ((arr[0][0] == '@' && arr[1][1] == '@' && arr[2][2] == '@') || \
(arr[0][2] == '@' && arr[1][1] == '@' && arr[2][0] == '@'))
return 0;
}
int i, j, flag = 2;
for (i = 0; i < 3; ++i)
{
for (j = 0; j < 3; ++j)
{
if (arr[i][j] == '_')
flag = 3;
}
}
return flag;
}
源码放在我的码云:https://gitee.com/wszlight/code/tree/master/%E6%89%AB%E9%9B%B7
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)