codeblocks的C语言围棋双人对战程序
时间: 2023-06-24 12:07:06 浏览: 225
这里提供一个使用CodeBlocks开发的简单的C语言围棋双人对战程序。
代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define ROW 15
#define COL 15
char board[ROW][COL];
void init_board()
{
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
board[i][j] = '+';
}
}
}
void display_board()
{
int i, j;
printf(" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n");
for (i = 0; i < ROW; i++) {
printf("%2d ", i + 1);
for (j = 0; j < COL; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}
int is_valid(int row, int col)
{
if (row < 0 || row >= ROW || col < 0 || col >= COL) {
return 0;
}
if (board[row][col] != '+') {
return 0;
}
return 1;
}
int is_win(int row, int col)
{
int i, j;
char ch = board[row][col];
int count = 1;
for (i = row - 1; i >= 0; i--) {
if (board[i][col] == ch) {
count++;
} else {
break;
}
}
for (i = row + 1; i < ROW; i++) {
if (board[i][col] == ch) {
count++;
} else {
break;
}
}
if (count >= 5) {
return 1;
}
count = 1;
for (j = col - 1; j >= 0; j--) {
if (board[row][j] == ch) {
count++;
} else {
break;
}
}
for (j = col + 1; j < COL; j++) {
if (board[row][j] == ch) {
count++;
} else {
break;
}
}
if (count >= 5) {
return 1;
}
count = 1;
for (i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
if (board[i][j] == ch) {
count++;
} else {
break;
}
}
for (i = row + 1, j = col + 1; i < ROW && j < COL; i++, j++) {
if (board[i][j] == ch) {
count++;
} else {
break;
}
}
if (count >= 5) {
return 1;
}
count = 1;
for (i = row - 1, j = col + 1; i >= 0 && j < COL; i--, j++) {
if (board[i][j] == ch) {
count++;
} else {
break;
}
}
for (i = row + 1, j = col - 1; i < ROW && j >= 0; i++, j--) {
if (board[i][j] == ch) {
count++;
} else {
break;
}
}
if (count >= 5) {
return 1;
}
return 0;
}
void player_move(int player)
{
int row, col;
while (1) {
printf("Player %d's turn:\n", player);
printf("Enter the row and col to place your stone (e.g. 3 5): ");
scanf("%d %d", &row, &col);
if (is_valid(row - 1, col - 1)) {
board[row - 1][col - 1] = player == 1 ? 'X' : 'O';
break;
} else {
printf("Invalid move! Please try again.\n");
}
}
}
int main()
{
init_board();
display_board();
int player = 1;
while (1) {
player_move(player);
display_board();
if (is_win(row - 1, col - 1)) {
printf("Player %d wins!\n", player);
break;
}
if (player == 1) {
player = 2;
} else {
player = 1;
}
}
return 0;
}
```
该程序使用二维数组 `board` 表示棋盘,初始化为所有位置都是空的(用 `+` 表示)。然后进入游戏循环,每次轮到一个玩家行棋时,程序会提示该玩家输入要下的位置,输入行和列即可。程序会判断该位置是否合法,如果合法,则在该位置放置该玩家的棋子(X或O)。然后判断该玩家是否胜利,如果是,则输出胜利信息并退出循环。接下来轮到下一个玩家行棋,直到有一方胜利为止。
注意:该程序只是一个简单的实现,还有很多需要完善的地方,例如:禁手规则,悔棋功能等。
阅读全文