帮我写一个C语言的井字棋代码
时间: 2023-09-10 09:05:00 浏览: 109
### 回答1:
当然可以,以下是一个简单的 C 语言井字棋游戏代码:
```
#include <stdio.h>
#include <stdlib.h>
// 井字棋格子状态
enum State {
EMPTY,
X,
O
};
// 游戏状态
enum GameStatus {
RUNNING,
X_WIN,
O_WIN,
DRAW
};
// 初始化井字棋游戏棋盘
void init_board(enum State board[3][3]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = EMPTY;
}
}
}
// 打印井字棋游戏棋盘
void print_board(enum State board[3][3]) {
printf(" 1 2 3\n");
for (int i = 0; i < 3; i++) {
printf("%d ", i + 1);
for (int j = 0; j < 3; j++) {
switch (board[i][j]) {
case EMPTY:
printf(" . ");
break;
case X:
printf(" X ");
break;
case O:
printf(" O ");
break;
default:
break;
}
}
printf("\n");
}
}
// 判断当前游戏状态
enum GameStatus check_game_status(enum State board[3][3]) {
// 检查行
for (int i = 0; i < 3; i++) {
if (board[i][0] != EMPTY && board[i][0] == board[i][1] && board[i][0] == board[i][2]) {
return board[i][0] == X ? X_WIN : O_WIN;
}
}
// 检查列
for (int i = 0; i < 3; i++) {
if (board[0][i] != EMPTY && board[0][i] == board[1][i] && board[0][i] == board[2][i]) {
return board[0][i] == X ? X_WIN : O_WIN;
}
}
// 检查对角线
if (board[0][0] != EMPTY && board[0][0] == board[1][1] && board[0][0] == board[2][2]) {
return board[0][0] == X ? X_WIN : O_WIN;
}
if (board[0][2] != EMPTY && board[0][2] == board[1][1] && board[0][2] == board[2][0]) {
return board[0][2] == X ? X_WIN : O_WIN;
}
// 检查是否平局
int empty_count = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == EMPTY) {
empty_count++;
}
}
}
if (empty_count == 0) {
return DRAW;
}
// 游戏仍在进行中
return RUNNING;
}
// 玩家下棋
void player_move(enum State board[3][3], enum State player) {
int row, col
### 回答2:
井字棋是一个常见的棋类游戏,下面给出一个简单的C语言井字棋代码示例:
```c
#include <stdio.h>
#include <stdbool.h>
char board[3][3]; // 井字棋棋盘
void init_board() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = ' ';
}
}
}
void print_board() {
printf("-------------\n");
for (int i = 0; i < 3; i++) {
printf("| %c | %c | %c |\n", board[i][0], board[i][1], board[i][2]);
printf("-------------\n");
}
}
bool check_win(char player) {
// 检查行是否相等
for (int i = 0; i < 3; i++) {
if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
return true;
}
}
// 检查列是否相等
for (int j = 0; j < 3; j++) {
if (board[0][j] == player && board[1][j] == player && board[2][j] == player) {
return true;
}
}
// 检查对角线是否相等
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 true;
}
return false;
}
void play_game() {
char player = 'X'; // 玩家默认为X
int row, col;
init_board();
for (int turn = 0; turn < 9; turn++) {
print_board();
printf("请玩家 %c 输入行和列(0-2):", player);
scanf("%d %d", &row, &col);
if (row < 0 || row > 2 || col < 0 || col > 2 || board[row][col] != ' ') {
printf("无效的位置,请重新输入。\n");
turn--; // 重新进行当前回合
continue;
}
board[row][col] = player;
if (check_win(player)) {
print_board();
printf("玩家 %c 赢了!\n", player);
return;
}
player = (player == 'X') ? 'O' : 'X'; // 轮换玩家
}
print_board();
printf("平局!\n");
}
int main() {
play_game();
return 0;
}
```
这段代码实现了一个简单的井字棋游戏,具体的游戏规则如下:
- 双方轮流下棋,玩家1使用字符X表示,玩家2使用字符O表示。
- 棋盘为一个3x3的方格,初始状态为空格。
- 每位玩家轮流输入行和列的位置来下棋。
- 当有任意一方的棋子连成一条横线、竖线或对角线时,该玩家获胜。
- 当棋盘填满且没有任意一方获胜时,游戏平局结束。
这只是一个简单的井字棋代码示例,可以根据需要进行修改和完善。
### 回答3:
下面是一个简单的C语言井字棋游戏代码。该代码实现了一个双人对战的井字棋游戏。
```
#include <stdio.h>
char board[3][3]; // 存储棋盘状态的数组
void initializeBoard() {
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
board[i][j] = ' ';
}
}
}
void printBoard() {
int i;
printf("-------------\n");
for (i = 0; i < 3; i++) {
printf("| %c | %c | %c |\n", board[i][0], board[i][1], board[i][2]);
printf("-------------\n");
}
}
int isBoardFull() {
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
if (board[i][j] == ' ') {
return 0; // 棋盘还未填满
}
}
}
return 1; // 棋盘已填满
}
int isWinner(char player) {
int i;
// 检查行
for (i = 0; i < 3; i++) {
if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
return 1;
}
}
// 检查列
for (i = 0; i < 3; i++) {
if (board[0][i] == player && board[1][i] == player && board[2][i] == player) {
return 1;
}
}
// 检查对角线
if (board[0][0] == player && board[1][1] == player && board[2][2] == player) {
return 1;
}
if (board[0][2] == player && board[1][1] == player && board[2][0] == player) {
return 1;
}
return 0; // 没有获胜者
}
void playGame() {
int row, col, currentPlayer = 1;
initializeBoard();
printf("井字棋游戏开始!\n");
do {
currentPlayer = !currentPlayer;
printBoard();
// 轮流让玩家输入行和列
printf("玩家 %d,请输入行号(0-2): ", currentPlayer + 1);
scanf("%d", &row);
printf("玩家 %d,请输入列号(0-2): ", currentPlayer + 1);
scanf("%d", &col);
// 在所选位置放置棋子
if (currentPlayer == 1 && board[row][col] == ' ') {
board[row][col] = 'X';
} else if (currentPlayer == 0 && board[row][col] == ' ') {
board[row][col] = 'O';
} else {
printf("该位置已被占用,请重新选择。\n");
currentPlayer = !currentPlayer; // 重新选择位置
}
} while (!isBoardFull() && !isWinner('X') && !isWinner('O'));
if (isWinner('X')) {
printf("玩家 1(X)获胜!\n");
} else if (isWinner('O')) {
printf("玩家 2(O)获胜!\n");
} else {
printf("平局!\n");
}
}
int main() {
playGame();
return 0;
}
```
此代码创建了一个3x3的棋盘数组,并实现了以下功能:
- 初始化棋盘
- 打印当前棋盘状态
- 检查是否棋盘已满
- 检查是否有一方获胜
- 开始游戏并轮流让两名玩家输入行和列来落子
- 结束游戏并宣布获胜者或平局
这是一个基本的井字棋游戏代码,你可以根据需要进行修改和扩展。希望对你有帮助!
阅读全文