目录

c语言简单效果展示

c语言简单效果展示

到这里为止,还差数组,字符串等操作,就基本可以实现一些简单的程序了,本文就给大家展示下,写一个最简单的五子棋。目标就只是给大家展示C语言的魅力,实现的思路就不赘述了。

五子棋的基本规则是玩家轮流在一个15×15或19×19的棋盘上放置棋子,目标是第一个形成连续五个相同颜色棋子的玩家获胜。我们将实现一个简单的文本版五子棋,包括一个15x15的棋盘,玩家一次输入坐标来下棋,由程序判定胜负。

代码:

#include <stdio.h>

#define BOARD_SIZE 15  // 棋盘大小
#define EMPTY ' '      // 空位置
#define PLAYER_X 'X'   // 玩家X
#define PLAYER_O 'O'   // 玩家O

// 棋盘
char board[BOARD_SIZE][BOARD_SIZE];

// 初始化棋盘
void init_board() {
    for (int i = 0; i < BOARD_SIZE; i++) {
        for (int j = 0; j < BOARD_SIZE; j++) {
            board[i][j] = EMPTY;
        }
    }
}

// 打印棋盘
void print_board() {
    printf("\n  ");
    for (int i = 0; i < BOARD_SIZE; i++) {
        printf("%2d", i);
    }
    printf("\n");

    for (int i = 0; i < BOARD_SIZE; i++) {
        printf("%2d", i);
        for (int j = 0; j < BOARD_SIZE; j++) {
            printf("%2c", board[i][j]);
        }
        printf("\n");
    }
}

// 检查当前位置是否有效
int is_valid_move(int x, int y) {
    if (x >= 0 && x < BOARD_SIZE && y >= 0 && y < BOARD_SIZE && board[x][y] == EMPTY) {
        return 1;
    }
    return 0;
}

// 检查是否有五子连线(水平、垂直、对角线)
int check_win(int x, int y, char player) {
    // 水平
    int count = 1;
    for (int i = 1; i < 5; i++) {
        if (x + i < BOARD_SIZE && board[x + i][y] == player) {
            count++;
        } else {
            break;
        }
    }
    for (int i = 1; i < 5; i++) {
        if (x - i >= 0 && board[x - i][y] == player) {
            count++;
        } else {
            break;
        }
    }
    if (count >= 5) return 1;

    // 垂直
    count = 1;
    for (int i = 1; i < 5; i++) {
        if (y + i < BOARD_SIZE && board[x][y + i] == player) {
            count++;
        } else {
            break;
        }
    }
    for (int i = 1; i < 5; i++) {
        if (y - i >= 0 && board[x][y - i] == player) {
            count++;
        } else {
            break;
        }
    }
    if (count >= 5) return 1;

    // 主对角线
    count = 1;
    for (int i = 1; i < 5; i++) {
        if (x + i < BOARD_SIZE && y + i < BOARD_SIZE && board[x + i][y + i] == player) {
            count++;
        } else {
            break;
        }
    }
    for (int i = 1; i < 5; i++) {
        if (x - i >= 0 && y - i >= 0 && board[x - i][y - i] == player) {
            count++;
        } else {
            break;
        }
    }
    if (count >= 5) return 1;

    // 副对角线
    count = 1;
    for (int i = 1; i < 5; i++) {
        if (x + i < BOARD_SIZE && y - i >= 0 && board[x + i][y - i] == player) {
            count++;
        } else {
            break;
        }
    }
    for (int i = 1; i < 5; i++) {
        if (x - i >= 0 && y + i < BOARD_SIZE && board[x - i][y + i] == player) {
            count++;
        } else {
            break;
        }
    }
    if (count >= 5) return 1;

    return 0;
}

// 玩家下棋
void player_move(char player) {
    int x, y;
    while (1) {
        printf("Player %c, enter your move (row col): ", player);
        scanf("%d %d", &x, &y);
        if (is_valid_move(x, y)) {
            board[x][y] = player;
            break;
        } else {
            printf("Invalid move. Try again.\n");
        }
    }
}

// 主函数
int main() {
    int game_over = 0;
    char current_player = PLAYER_X;

    init_board();

    while (!game_over) {
        print_board();
        player_move(current_player);

        // 检查是否有玩家获胜
        for (int i = 0; i < BOARD_SIZE; i++) {
            for (int j = 0; j < BOARD_SIZE; j++) {
                if (board[i][j] == current_player && check_win(i, j, current_player)) {
                    print_board();
                    printf("Player %c wins!\n", current_player);
                    game_over = 1;
                    break;
                }
            }
            if (game_over) break;
        }

        // 切换玩家
        if (current_player == PLAYER_X) {
            current_player = PLAYER_O;
        } else {
            current_player = PLAYER_X;
        }
    }

    return 0;
}

代码解析:

1、棋盘初始化与打印:

init_board() 初始化棋盘,每个位置设为空格 ’ ‘。

print_board() 打印棋盘状态。

2、玩家下棋:

玩家输入棋盘的行和列,程序检查输入是否合法(是否为空位置),然后将棋子放在指定位置。

3、胜利检测:

check_win() 检查某个位置的玩家是否形成了五子连线,包括水平、垂直、主对角线和副对角线的检测。

4、游戏主循环:

游戏按回合进行,玩家轮流下棋。每次下棋后都会检查是否有玩家获胜,如果有则游戏结束。

5、扩展与改进:

当前实现仅支持两名玩家对战,没有 AI 或者随机棋手。

可以进一步添加 AI 对手,通过简单的算法(例如随机选择一个空位置)来进行计算机的下棋。

添加游戏结束后的重新开始或退出选项。

效果如下:

  0  1  2  3  4  5  6  7  8  9  10 11 12 13 14
  0                              
  1                              
  2                              
  3                              
  4                              
  5                              
  6                              
  7                              
  8                              
  9                              
  10                              
  11                              
  12                              
  13                              
  14                              

Player X, enter your move (row col): 7 7

每次你输入一个合法的位置,棋盘会更新并打印出来。如果有玩家形成了五子连线,程序会宣布获胜并结束游戏。

怎么样,C语言是不是很得劲!我反正是玩不腻