以下是“C语言实现简易井字棋游戏”的完整攻略:
1. 游戏规则
井字棋是一种双人对弈的游戏,棋盘为3*3格的矩阵。其中一方使用“O”标记,而另一方使用“X”标记。棋子分别放在棋盘的空白处,直到一方成功地在水平、垂直或者对角线上连成三个棋子为止,就获得胜利。
2. 程序架构
本程序的程序架构可以分为如下几个部分:
- 定义变量:包括棋盘和游戏状态等变量。
- 初始化棋盘:将每个格子都赋值为空。
- 游戏主体:在每个回合中,询问当前玩家落子的位置,判断是否胜利,最终返回胜利者的标记。
- 输出结果:根据胜利者的标记输出对应的信息。
3. 代码实现
下面以代码实现的方式来详细讲解。
定义变量
首先需要定义需要使用的变量:
char board[3][3]; // 棋盘
char player1 = 'X'; // 玩家1的标记
char player2 = 'O'; // 玩家2的标记
int currentPlayer = 1; // 当前玩家,1表示玩家1,2表示玩家2
int gameState = 0; // 游戏状态,0表示游戏未结束,1表示玩家1胜利,2表示玩家2胜利,3表示平局
初始化棋盘
定义一个函数init_board()
来初始化棋盘:
void init_board() {
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
board[i][j] = ' ';
}
}
}
游戏主体
定义一个函数play_game()
来进行游戏:
int play_game() {
while(1) {
// 输出当前棋盘状态
printf("Current board:\n");
printf(" %c | %c | %c \n", board[0][0], board[0][1], board[0][2]);
printf("---|---|---\n");
printf(" %c | %c | %c \n", board[1][0], board[1][1], board[1][2]);
printf("---|---|---\n");
printf(" %c | %c | %c \n", board[2][0], board[2][1], board[2][2]);
// 询问当前玩家落子的位置
int row, col;
printf("Player %d, enter row (1-3): ", currentPlayer);
scanf("%d", &row);
printf("Player %d, enter column (1-3): ", currentPlayer);
scanf("%d", &col);
// 判断当前位置是否为空
if(board[row-1][col-1] == ' ') {
// 棋盘更新为当前玩家的标记
if(currentPlayer == 1) {
board[row-1][col-1] = player1;
}
else {
board[row-1][col-1] = player2;
}
// 判断是否胜利
// 检查行
for(int i=0; i<3; i++) {
if(board[i][0] != ' ' && board[i][0] == board[i][1] && board[i][1] == board[i][2]) {
if(currentPlayer == 1) {
gameState = 1;
}
else {
gameState = 2;
}
return gameState;
}
}
// 检查列
for(int i=0; i<3; i++) {
if(board[0][i] != ' ' && board[0][i] == board[1][i] && board[1][i] == board[2][i]) {
if(currentPlayer == 1) {
gameState = 1;
}
else {
gameState = 2;
}
return gameState;
}
}
// 检查对角线
if(board[0][0] != ' ' && board[0][0] == board[1][1] && board[1][1] == board[2][2]) {
if(currentPlayer == 1) {
gameState = 1;
}
else {
gameState = 2;
}
return gameState;
}
if(board[0][2] != ' ' && board[0][2] == board[1][1] && board[1][1] == board[2][0]) {
if(currentPlayer == 1) {
gameState = 1;
}
else {
gameState = 2;
}
return gameState;
}
// 判断是否平局
int count = 0;
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(board[i][j] != ' ') {
count++;
}
}
}
if(count == 9) {
gameState = 3;
return gameState;
}
// 切换到下一个玩家
if(currentPlayer == 1) {
currentPlayer = 2;
}
else {
currentPlayer = 1;
}
}
else {
printf("This position is not empty. Try another one.\n");
}
}
}
输出结果
定义一个函数print_result()
来根据游戏状态输出对应的信息:
void print_result(int gameState) {
if(gameState == 1) {
printf("Player 1 wins!\n");
}
else if(gameState == 2) {
printf("Player 2 wins!\n");
}
else {
printf("It's a tie!\n");
}
}
示例说明
将上述代码整合到一个完整的程序中,下面给出两个示例:
示例1
Current board:
| |
---|---|---
| |
---|---|---
| |
Player 1, enter row (1-3): 2
Player 1, enter column (1-3): 2
Current board:
| |
---|---|---
| X |
---|---|---
| |
Player 2, enter row (1-3): 1
Player 2, enter column (1-3): 1
Current board:
O | |
---|---|---
| X |
---|---|---
| |
Player 1, enter row (1-3): 2
Player 1, enter column (1-3): 3
Current board:
O | |
---|---|---
| X | X
---|---|---
| |
Player 2, enter row (1-3): 1
Player 2, enter column (1-3): 2
Current board:
O | |
---|---|---
O | X | X
---|---|---
| |
Player 1, enter row (1-3): 3
Player 1, enter column (1-3): 1
Current board:
O | |
---|---|---
O | X | X
---|---|---
X | |
Player 1 wins!
示例2
Current board:
| |
---|---|---
| |
---|---|---
| |
Player 1, enter row (1-3): 1
Player 1, enter column (1-3): 1
Current board:
X | |
---|---|---
| |
---|---|---
| |
Player 2, enter row (1-3): 1
Player 2, enter column (1-3): 2
Current board:
X | O |
---|---|---
| |
---|---|---
| |
Player 1, enter row (1-3): 2
Player 1, enter column (1-3): 2
Current board:
X | O |
---|---|---
| X |
---|---|---
| |
Player 2, enter row (1-3): 1
Player 2, enter column (1-3): 3
Current board:
X | O | O
---|---|---
| X |
---|---|---
| |
Player 1, enter row (1-3): 3
Player 1, enter column (1-3): 1
Current board:
X | O | O
---|---|---
| X |
---|---|---
X | |
Player 2, enter row (1-3): 2
Player 2, enter column (1-3): 1
Current board:
X | O | O
---|---|---
O | X |
---|---|---
X | |
Player 2 wins!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现简易井字棋游戏 - Python技术站