先赞后看,不足指正!
这将对我有很大的帮助!
阿哇旭的主页:Awas-Home page
目录
引言
编译环境
游戏介绍
游戏规则
游戏实现
创建初始化棋盘
打印棋盘
决定先手
玩家下棋
判断胜负
游戏循环
完整代码
结语
相信大家在小时候都玩过井字棋吧,在这里,我们将用到已经学习的知识,来实现一个简单井字棋游戏的编写。
编写游戏所需知识 (随机数的生成、数组) 参考:猜数字游戏。
那么,话不多说,我们一起来看看吧!
集成开发环境(IDE):Visual Studio 2022,若要使用scanf函数,请添加如下注释:
#define _CRT_SECURE_NO_WARNINGS
//忽略scanf函数的安全警告
井字棋是一种经典的二人游戏,玩家轮流在 3x3 的棋盘上下棋,首先在横向、纵向或对角线上连成一条线的玩家获胜。
1.井字棋棋盘是一个 3x3 的网格。
2.两名玩家轮流在空白的格子上下棋,一名玩家使用"X",另一名玩家使用"O"。
3.首先在横向、纵向或对角线上连成一条线的玩家获胜。
4.如果所有格子都下满了,且没有玩家连成一条线, 则游戏结束视为平局。
1.创建初始化棋盘:创建一个3x3的二维数组来表示棋盘,用于存储玩家下棋的情况。
2.打印棋盘:编写函数来打印当前棋盘的状态,以便玩家可以看到棋盘情况。
3.决定先手:利用随机数来决定玩家的下棋先后顺序。
4.玩家下棋:编写函数来接受玩家的输入,并在棋盘上放置相对应的棋子。
5.判断胜负:编写函数来检视棋盘并判断是否有玩家获胜或者游戏结束视为平局。
6.游戏循环:编写游戏主循环,使得玩家可以轮流下棋,直到游戏结束。
代码实现
char board[3][3]; // 井字棋棋盘
// 初始化井字棋棋盘
void initializeBoard() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = ' ';
}
}
}
代码实现
// 打印井字棋棋盘
void printBoard() {
printf("\n");
printf(" | 0 | 1 | 2\n");
printf("---|---|---|---\n");
printf(" 0 | %c | %c | %c \n", board[0][0], board[0][1], board[0][2]);
printf("---|---|---|---\n");
printf(" 1 | %c | %c | %c \n", board[1][0], board[1][1], board[1][2]);
printf("---|---|---|---\n");
printf(" 2 | %c | %c | %c \n", board[2][0], board[2][1], board[2][2]);
printf("\n");
}
效果展示
代码实现
// 通过判断随机数的奇偶性来决定先后顺序
srand((unsigned int)time(0)); // 使用当前时间作为随机数种子 头文件
if (rand() % 2 == 0) {
currentPlayer = 'X';
printf("玩家 X 先手\n");
}
else {
currentPlayer = 'O';
printf("玩家 O 先手\n");
}
代码实现
for (int i = 0; i < 9; i++) {
printf("当前棋盘状态:\n");
printBoard();
printf("玩家 %c,请输入你要下棋的位置(行 列):", currentPlayer);
scanf("%d %d", &row, &col);
// 检查输入是否合法
if (row < 0 || row > 2 || col < 0 || col > 2 || board[row][col] != ' ') {
printf("输入不合法,请重新输入\n");
i--; // 重新让当前玩家下棋
continue;
}
// 在棋盘上放置玩家的棋子
board[row][col] = currentPlayer;
// 检查是否有玩家获胜
if (checkWin(currentPlayer)) {
printf("恭喜玩家 %c 获胜!\n", currentPlayer);
printBoard();
return 0;
}
代码实现
// 检查棋盘是否有玩家获胜
int checkWin(char player) {
// 检查每一行
for (int i = 0; i < 3; i++) {
if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
return 1;
}
}
// 检查每一列
for (int j = 0; j < 3; j++) {
if (board[0][j] == player && board[1][j] == player && board[2][j] == player) {
return 1;
}
}
// 检查对角线
if ((board[0][0] == player && board[1][1] == player && board[2][2] == player) ||
(board[0][2] == player && board[1][1] == player && board[2][0] == player)) {
return 1;
}
return 0;
}
通过检视每一行、每一列以及对角线是否有棋子连成一条线,来判断是否有玩家获胜或者游戏结束为平局。
代码实现
// 切换玩家
if (currentPlayer == 'X') {
currentPlayer = 'O';
}
else {
currentPlayer = 'X';
}
通过判断结构来交换玩家的下棋顺序,来实现游戏的循环。
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
char board[3][3]; // 井字棋棋盘
// 初始化井字棋棋盘
void initializeBoard() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = ' ';
}
}
}
// 打印井字棋棋盘
void printBoard() {
printf("\n");
printf(" | 0 | 1 | 2\n");
printf("---|---|---|---\n");
printf(" 0 | %c | %c | %c \n", board[0][0], board[0][1], board[0][2]);
printf("---|---|---|---\n");
printf(" 1 | %c | %c | %c \n", board[1][0], board[1][1], board[1][2]);
printf("---|---|---|---\n");
printf(" 2 | %c | %c | %c \n", board[2][0], board[2][1], board[2][2]);
printf("\n");
}
// 检查棋盘是否有玩家获胜
int checkWin(char player) {
// 检查每一行
for (int i = 0; i < 3; i++) {
if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
return 1;
}
}
// 检查每一列
for (int j = 0; j < 3; j++) {
if (board[0][j] == player && board[1][j] == player && board[2][j] == player) {
return 1;
}
}
// 检查对角线
if ((board[0][0] == player && board[1][1] == player && board[2][2] == player) ||
(board[0][2] == player && board[1][1] == player && board[2][0] == player)) {
return 1;
}
return 0;
}
int main() {
initializeBoard();
int row, col;// 行 列
char currentPlayer = 'X';
// 通过判断随机数奇偶性来决定先后顺序
srand((unsigned int)time(0)); // 使用当前时间作为随机数种子 头文件
if (rand() % 2 == 0) {
currentPlayer = 'X';
printf("玩家 X 先手\n");
}
else {
currentPlayer = 'O';
printf("玩家 O 先手\n");
}
for (int i = 0; i < 9; i++) {
printf("当前棋盘状态:\n");
printBoard();
printf("玩家 %c,请输入你要下棋的位置(行 列):", currentPlayer);
scanf("%d %d", &row, &col);
// 检查输入是否合法
if (row < 0 || row > 2 || col < 0 || col > 2 || board[row][col] != ' ') {
printf("输入不合法,请重新输入\n");
i--; // 重新让当前玩家下棋
continue;
}
// 在棋盘上放置玩家的棋子
board[row][col] = currentPlayer;
// 检查是否有玩家获胜
if (checkWin(currentPlayer)) {
printf("恭喜玩家 %c 获胜!\n", currentPlayer);
printBoard();
return 0;
}
// 切换玩家
if (currentPlayer == 'X') {
currentPlayer = 'O';
}
else {
currentPlayer = 'X';
}
}
printf("游戏结束,平局!\n");
printBoard();
return 0;
}
通过这个简单的井字棋游戏项目,我们可以学习到如何使用C语言来实现一个基本的游戏逻辑。希望这个教程对你有所帮助!
如果你有任何问题或建议,欢迎在评论区留言,这将对我有很大的帮助。
完结!咻咻~~