下面是一个简单的C语言五子棋实现示例:
- #include <stdio.h>
- #include <stdlib.h>
- #define BOARD_SIZE 15
- char board[BOARD_SIZE][BOARD_SIZE];
- void init_board() {
- int i, j;
- for (i = 0; i < BOARD_SIZE; i++) {
- for (j = 0; j < BOARD_SIZE; j++) {
- board[i][j] = '-';
- }
- }
- }
- void print_board() {
- int i, j;
- printf("\n");
- for (i = 0; i < BOARD_SIZE; i++) {
- for (j = 0; j < BOARD_SIZE; j++) {
- printf("%c ", board[i][j]);
- }
- printf("\n");
- }
- }
- int check_win() {
- int i, j, count;
- // check horizontal
- for (i = 0; i < BOARD_SIZE; i++) {
- for (j = 0; j < BOARD_SIZE - 4; j++) {
- if (board[i][j] == board[i][j + 1] && board[i][j] == board[i][j + 2] && board[i][j] == board[i][j + 3] && board[i][j] == board[i][j + 4]) {
- return 1;
- }
- }
- }
- // check vertical
- for (i = 0; i < BOARD_SIZE - 4; i++) {
- for (j = 0; j < BOARD_SIZE; j++) {
- if (board[i][j] == board[i + 1][j] && board[i][j] == board[i + 2][j] && board[i][j] == board[i + 3][j] && board[i][j] == board[i + 4][j]) {
- return 1;
- }
- }
- }
- // check diagonals
- for (i = 0; i < BOARD_SIZE - 4; i++) {
- for (j = 0; j < BOARD_SIZE - 4; j++) {
- if (board[i][j] == board[i + 1][j + 1] && board[i][j] == board[i + 2][j + 2] && board[i][j] == board[i + 3][j + 3] && board[i][j] == board[i + 4][j + 4]) {
- return 1;
- }
- if (board[i][j] == board[i + 1][j - 1] && board[i][j] == board[i + 2][j - 2] && board[i][j] == board[i + 3][j - 3] && board[i][j] == board[i + 4][j - 4]) {
- return 1;
- }
- }
- }
- return 0;
- }
- int main() {
- int i, j, turn, count;
- init_board();
- turn = 0; // white's turn first
- while (!check_win()) {
- printf("It's %s's turn. Input the position (row column) you want to drop the stone. Enter q to quit.\n", (turn == 0) ? "white" : "black");
- scanf("%d %d", &i, &j);
- if (board[i][j] != '-') {
- printf("Error: the position is already occupied.\n");
}
// check anti-diagonals
for (i = 0; i < BOARD_SIZE - 4; i++) {
for (j = 4; j < BOARD_SIZE; j++) {
if (board[i][j] == board[i + 1][j - 1] && board[i][j] == board[i + 2][j - 2] && board[i][j] == board[i + 3][j - 3] && board[i][j] == board[i + 4][j - 4]) {
return 1;
}
}
}
return 0;
}
void game_over() {
printf("Game over!\n");
print_board();
exit(0);
}
int main() {
int i, j, turn = 0;
init_board();
while (1) {
print_board();
if (check_win()) {
game_over();
}
if (turn % 2 == 0) {
printf("Player 1, make your move (row col): ");
} else {
printf("Player 2, make your move (row col): ");
}
scanf("%d %d", &i, &j);
if (i < 0 || i >= BOARD_SIZE || j < 0 || j >= BOARD_SIZE) {
printf("Invalid move!\n");
continue;
}
if (board[i][j] != '-') {
printf("Invalid move! The position is already occupied.\n");
continue;
}
board[i][j] = (turn % 2 == 0) ? 'X' : 'O';
turn++;
}
return 0;
}
上面的代码实现了一个简单的五子棋游戏,但是还有一些可以改进的地方。以下是一些建议:
- 添加游戏规则的说明:在游戏开始前,可以打印出游戏规则,让玩家知道如何进行游戏。
- 改进输入验证:在读入玩家输入的时候,可以使用更严谨的验证方法,以确保玩家输入的是合法的位置。
- 添加提示信息:当玩家落子后,可以输出一些提示信息,例如告诉玩家他们的棋子已经胜利了或者游戏已经结束了。
- 添加AI对手:可以使用简单的AI算法来让计算机自动进行游戏,这样玩家就可以和计算机进行对战了。
- 优化界面:可以使用图形界面来增强游戏的体验,例如使用GUI库来显示游戏板面和菜单等。
- 增加难度等级:可以添加多个难度等级,让玩家可以选择不同难度的对手进行对战。
- 保存游戏进度:可以让玩家随时保存和恢复游戏进度,以便他们在需要离开时能够继续游戏。
- 添加多人对战:可以添加多人对战模式,让多个玩家可以在同一台计算机上进行对战。
- 优化算法:可以使用更高效的算法来检查游戏是否结束,以提高游戏的性能。
- 添加声音效果:可以使用声音效果来增强游戏的体验,例如在玩家获胜时播放欢快的音乐。