三子棋(井字棋)
一、问题前述
二、基本流程
三、详细步骤
1.创建菜单界面
2.创建棋盘
3.棋盘初始化
4.打印棋盘
5.玩家落子
6.电脑落子
7.判断胜负
四、结果演示
1.玩家胜利
2.电脑胜利
3.和棋
五、完整代码
一 、问题前述
用C语言实现三子棋
二、基本流程
用二维数组创建一个棋盘。
‘x’表示玩家
‘o’表示电脑玩家
游戏流程:
1.创建棋盘,并且初始化(把所有位置设置为空)。
2.打印棋盘。
3.玩家进行落子(玩家通过输入坐标来进行落子)。
4.判定胜负。
5.电脑落子(电脑随机落子)。
6.判定胜负。
三、详细步骤
1.创建菜单界面
1.开始游戏。
0.退出游戏。
int menu() {
printf("--------------------------\n");
printf("--------1.开始游戏--------\n");
printf("--------0.退出游戏--------\n");
printf("--------------------------\n");
int choice = 0;
printf("请输入你的选择:");
scanf("%d", &choice);
return choice;
}
2.创建棋盘
棋盘:创建一个3*3的二维数组,每个元素都是一个char类型。
这里我们使用宏定义
目的是为了之后更易于理解,并且方便扩展棋盘大小。
#define MAX_ROW 3
#define MAX_COL 3
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] = ' ';
}
}
}
4.打印棋盘
void print_chessBoard(char chessBoard[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
printf("%c", chessBoard[row][col]);
}
printf("\n");
}
}
这里我们打印了一个看不到的简易棋盘,
好像不太容易理解。
接下来我们通过一些符号和线条来使棋盘稍微美观可见一些
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");
}
}
这下可以看到棋盘的样子了
5.玩家落子
告诉玩家输入坐标实现落子
玩家落子后在棋盘上用 ‘x’ 表示。
注意:
1.玩家输入的落子坐标必须在棋盘内。
2.不能在有子的地方落子。
3.落子坐标如果在棋盘外或者有子的地方需重新落子。
void plearMove(char chessBoard[MAX_ROW][MAX_COL]) {
printf("玩家落子...\n");
while (1) {
printf("请输入坐标(row col): ");
int row = 0;
int col = 0;
scanf("%d %d", &row, &col);
if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) {
printf("您的输入有误,请重新输入\