C语言代码实现三子棋小游戏
更新时间:2023-08-09前言
三子棋是一种经典的策略棋类游戏,又称井字棋。本文将使用C语言来实现三子棋小游戏的代码。三子棋游戏由两名玩家轮流在3×3的棋盘上放置自己的棋子,目标是先在横、竖或斜方向上成功连成三个自己的棋子。
代码实现
#include <stdio.h> #include <stdlib.h> #define ROWS 3 #define COLS 3 char board[ROWS][COLS]; char player = 'X'; // 当前玩家 void initializeBoard() { for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { board[i][j] = ' '; } } } void printBoard() { printf("-------------\n"); for (int i = 0; i < ROWS; i++) { printf("| %c | %c | %c |\n", board[i][0], board[i][1], board[i][2]); printf("-------------\n"); } } int isBoardFull() { for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { if (board[i][j] == ' ') { return 0; // 棋盘还没有满 } } } return 1; // 棋盘已满 } int isGameOver() { // 检查行和列 for (int i = 0; i < ROWS; i++) { if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ') { return 1; // 有玩家获胜 } if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') { return 1; // 有玩家获胜 } } // 检查对角线 if ((board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ') || (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')) { return 1; // 有玩家获胜 } if (isBoardFull()) { return 2; // 平局 } return 0; // 游戏未结束 } void makeMove(int row, int col) { board[row][col] = player; if (player == 'X') { player = 'O'; } else { player = 'X'; } } int main() { int row, col; int gameOver = 0; initializeBoard(); while (!gameOver) { printBoard(); printf("玩家 %c,请输入要下棋子的行和列(例如输入1 1表示第一行第一列):", player); scanf("%d %d", &row, &col); if (row < 0 || row >= ROWS || col < 0 || col >= COLS || board[row][col] != ' ') { printf("无效的位置!请重新输入。\n"); continue; } makeMove(row, col); gameOver = isGameOver(); } printBoard(); if (gameOver == 1) { printf("玩家 %c 获胜!\n", player == 'X' ? 'O' : 'X'); } else { printf("平局!\n"); } return 0; }
代码解析
这段代码实现了一个三子棋小游戏。首先,我们定义了一个3×3的棋盘,使用字符数组board
表示。空格表示空位,'X'表示玩家1放置的棋子,'O'表示玩家2放置的棋子。
函数initializeBoard
用于初始化棋盘,将所有位置都设为' '(空格)。
函数printBoard
用于打印当前棋盘的状态。
函数isBoardFull
用于检查棋盘是否已满。
函数isGameOver
用于检查当前游戏是否已经结束。它首先检查每行和每列是否有连成一线的棋子,然后检查对角线是否连成一线。如果有玩家获胜,则返回1;如果棋盘已满,则返回2;游戏未结束则返回0。
函数makeMove
用于玩家下棋。它接受两个参数:行和列。根据当前玩家('X'或'O'),它将相应的棋子放置在指定的位置,并交换玩家。
在main
函数中,我们使用一个循环来获取玩家的输入,并不断更新棋盘状态,直到游戏结束。最后,根据游戏结束的结果打印相应的信息。
总结
通过上述代码的实现,我们成功地创建了一个简单的三子棋小游戏,并实现了棋盘的初始化、打印、判断游戏是否结束以及玩家下棋的功能。通过这个例子可以看出,C语言可以实现简单的游戏逻辑。希望这个示例有助于理解C语言程序设计和游戏开发的基础知识。