一、三子棋的规则
三子棋是一个很古老的民间传统游戏,玩起来也非常便捷。三子棋也叫做OOXX棋,井字棋等,用“井”字分出3×3的格子,双方轮流下棋子(可以用O或者X来区别),只要将自己的棋子连成直线就赢了。
二、三子棋的具体实现思路(基本流程)
- 建立一个游戏菜单
- 创建一个棋盘并将其初始化
- 将初始化后的棋盘进行打印
- 玩家落子并打印棋盘(玩家输入行列坐标的方式来落子)
- 判定胜负关系(玩家是否获胜?有则直接游戏结束无则继续进行)
- 电脑落子并打印棋盘(随机位置落子)
- 判定胜负关系(电脑是否获胜?有则直接游戏结束无则继续进行)
- 若无胜负关系则回到 2 继续交替下棋直至出现胜负或和棋。
三、游戏的具体实现过程(源代码)
1.代码总览
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<time.h>
//三子棋游戏
#define MAX_ROW 3//宏定义行数,列数,方便后续进行修改
#define MAX_COL 3
//一·创建一个游戏菜单
//菜单函数
int menu(){
printf("========================\n");
printf(" 1. 开始游戏\n");
printf(" 0. 结束游戏\n");
printf("========================\n");
printf(" 请输入您的选择: ");
int num = -1;
scanf("%d", &num);;//利用键盘输入选项
return num;//将选项值返回到主函数中进行判断
}
//二·游戏内容
//棋盘初始化
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");
}
}
//玩家落子“x”
void playerMove(char chessBoard[MAX_ROW][MAX_COL]) {
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("您的坐标不在合法范围内 [0, 2]\n");
continue;
}
// 校验玩家落子位置是否已经有子了.
if (chessBoard[row][col] != ' ') {
printf("您的坐标位置已经有子了!\n");
continue;
}
//最终落子
chessBoard[row][col] = 'x';
break;
}
}
//电脑落子“o”
void computerMove(char chessBoard[MAX_ROW][MAX_COL]) {
while (1){
int row = rand() % MAX_ROW;//设置随机数让棋子落在棋盘内
int col = rand() % MAX_COL