C语言五子棋游戏代码示例 - 附源码解析
C语言实现简单五子棋游戏
这篇博客将介绍如何使用C语言编写一个简单的五子棋游戏。代码中包含详细的注释,方便大家理解。
代码示例
#include <stdio.h>
#include <stdbool.h>
#define BOARD_SIZE 15
#define EMPTY 0
#define PLAYER1 1
#define PLAYER2 2
int board[BOARD_SIZE][BOARD_SIZE];
// 初始化棋盘
void initializeBoard() {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
board[i][j] = EMPTY;
}
}
}
// 打印棋盘
void printBoard() {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (board[i][j] == EMPTY) {
printf(' -');
} else if (board[i][j] == PLAYER1) {
printf(' X');
} else if (board[i][j] == PLAYER2) {
printf(' O');
}
}
printf('
');
}
}
// 判断落子是否合法
bool isMoveValid(int row, int col) {
if (row < 0 || row >= BOARD_SIZE || col < 0 || col >= BOARD_SIZE || board[row][col] != EMPTY) {
return false;
}
return true;
}
// 判断游戏是否结束
bool isGameOver(int player) {
// 检查横向是否有五子连珠
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE - 4; j++) {
if (board[i][j] == player &&
board[i][j + 1] == player &&
board[i][j + 2] == player &&
board[i][j + 3] == player &&
board[i][j + 4] == player) {
return true;
}
}
}
// 检查纵向是否有五子连珠
for (int i = 0; i < BOARD_SIZE - 4; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (board[i][j] == player &&
board[i + 1][j] == player &&
board[i + 2][j] == player &&
board[i + 3][j] == player &&
board[i + 4][j] == player) {
return true;
}
}
}
// 检查对角线是否有五子连珠(正斜线)
for (int i = 0; i < BOARD_SIZE - 4; i++) {
for (int j = 0; j < BOARD_SIZE - 4; j++) {
if (board[i][j] == player &&
board[i + 1][j + 1] == player &&
board[i + 2][j + 2] == player &&
board[i + 3][j + 3] == player &&
board[i + 4][j + 4] == player) {
return true;
}
}
}
// 检查对角线是否有五子连珠(反斜线)
for (int i = 0; i < BOARD_SIZE - 4; i++) {
for (int j = 4; j < BOARD_SIZE; j++) {
if (board[i][j] == player &&
board[i + 1][j - 1] == player &&
board[i + 2][j - 2] == player &&
board[i + 3][j - 3] == player &&
board[i + 4][j - 4] == player) {
return true;
}
}
}
return false;
}
// 游戏主循环
void playGame() {
int player = PLAYER1;
int row, col;
bool validMove;
bool gameOver = false;
initializeBoard();
while (!gameOver) {
printf('Player %d's turn. Enter row and column: ', player);
scanf('%d %d', &row, &col);
validMove = isMoveValid(row, col);
if (validMove) {
board[row][col] = player;
printBoard();
gameOver = isGameOver(player);
if (gameOver) {
printf('Player %d wins!
', player);
} else {
player = (player == PLAYER1) ? PLAYER2 : PLAYER1;
}
} else {
printf('Invalid move. Try again.
');
}
}
}
int main() {
printf('Welcome to Five in a Row!
');
playGame();
return 0;
}
代码解析
该代码实现了一个简单的命令行版本的五子棋游戏,支持两个玩家进行对战。
- 首先,我们定义了一些常量和全局变量,包括棋盘大小、玩家标识符和棋盘数组。
initializeBoard()函数用于初始化棋盘,将所有位置设置为EMPTY。printBoard()函数用于打印当前棋盘状态。isMoveValid()函数用于判断玩家的落子是否合法,即是否在棋盘范围内且该位置为空。isGameOver()函数用于判断游戏是否结束,检查当前玩家是否已经连成五子。playGame()函数是游戏的主循环,控制玩家轮流落子,并判断游戏是否结束。
总结
这只是一个简单的五子棋游戏实现,你可以在此基础上进行扩展,例如:
- 添加人机对战功能
- 实现更美观的图形界面
- 记录游戏历史和统计数据
希望这篇博客能够帮助你理解如何使用C语言编写一个简单的五子棋游戏!
原文地址: https://www.cveoy.top/t/topic/bnDE 著作权归作者所有。请勿转载和采集!