大数跨境
0
0

用C语言实现五子棋:从零开始,带你轻松写出完整代码!

用C语言实现五子棋:从零开始,带你轻松写出完整代码! 趣聊科技圈
2024-09-11
1
导读:整个程序的核心就是二维数组的操作和循环判断,非常适合大家练习C语言的基本技能哦!

hello,大家好,我是程序员黎明 ,许多人学完C语言后只知道概念却不知道怎么去写一个项目出来,本期我将教大家怎么去用c语言写一个五子棋程序出来,其中包括棋盘初始化、玩家下棋、判断胜负等核心步骤

写五子棋这个程序,用C语言实现的话,其实不复杂,只要掌握了基本的编程技巧,就能实现。下面来跟我一起学习吧!

第一步:定义棋盘

五子棋的棋盘通常是一个15x15的格子,咱们可以用一个二维数组来表示。二维数组就像是一个表格,棋盘的每个格子对应数组中的一个元素。我们用0表示空格,用1表示黑子,用2表示白子。

#include <stdio.h>

#define BOARD_SIZE 15  // 棋盘的大小

int board[BOARD_SIZE][BOARD_SIZE];  // 定义一个15x15的棋盘

上面定义了一个15x15的二维数组board,初始情况下,数组里的每个格子都应该是0,表示还没有棋子。

第二步:初始化棋盘

要让程序正常运行,我们得先把棋盘初始化一下,也就是把所有的格子都设置为0,表示空位。

void initBoard() {
    for (int i = 0; i < BOARD_SIZE; i++) {
        for (int j = 0; j < BOARD_SIZE; j++) {
            board[i][j] = 0;  // 初始化棋盘,所有格子都为空
        }
    }
}

这个initBoard函数就是用来初始化棋盘的,遍历了整个二维数组,把每个格子都设为0

第三步:显示棋盘

有了棋盘,我们还得能看到棋盘上的情况,所以我们需要一个函数来把棋盘打印出来。可以用不同的符号表示棋子,比如空格用.表示,黑子用X表示,白子用O表示。

void printBoard() {
    printf("  ");
    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++) {
            if (board[i][j] == 0) {
                printf(". ");
            } else if (board[i][j] == 1) {
                printf("X ");
            } else if (board[i][j] == 2) {
                printf("O ");
            }
        }
        printf("\n");
    }
}

这个函数会把整个棋盘打印到屏幕上,X表示黑子,O表示白子,空格用.表示。打印出来后,看起来就像是一个真正的五子棋棋盘。

第四步:下棋

五子棋的核心就是下棋。我们可以用两个玩家轮流在棋盘上选择位置来放棋子。棋子放到哪个位置,我们可以让用户输入行号和列号,然后检查这个位置是否为空。如果为空,就放上对应的棋子。

void placePiece(int player) {
    int row, col;
    while (1) {
        printf("玩家 %d 请输入你要下棋的位置 (行 列): ", player);
        scanf("%d %d", &row, &col);

        if (row >= 0 && row < BOARD_SIZE && col >= 0 && col < BOARD_SIZE && board[row][col] == 0) {
            board[row][col] = player;  // 1表示黑子,2表示白子
            break;
        } else {
            printf("无效的位置,请重新输入!\n");
        }
    }
}

这里我用的是placePiece函数让玩家输入想要下棋的位置,程序会检查输入的坐标是否合理(是否在棋盘范围内,且该位置是否为空),如果有效,就把棋子放在对应的格子里。

第五步:判断胜负

五子棋的胜负规则很简单,谁先在横、竖、斜方向连成五颗棋子就赢了。我们需要写一个函数来判断某个玩家下完棋后有没有赢。

int checkWin(int player, int row, int col) {
    int directions[4][2] = {{1, 0}, {0, 1}, {1, 1}, {1, -1}};  // 四个方向:横,竖,正斜,反斜

    for (int d = 0; d < 4; d++) {
        int count = 1;

        // 向一个方向数
        for (int i = 1; i < 5; i++) {
            int newRow = row + i * directions[d][0];
            int newCol = col + i * directions[d][1];

            if (newRow >= 0 && newRow < BOARD_SIZE && newCol >= 0 && newCol < BOARD_SIZE && board[newRow][newCol] == player) {
                count++;
            } else {
                break;
            }
        }

        // 向反方向数
        for (int i = 1; i < 5; i++) {
            int newRow = row - i * directions[d][0];
            int newCol = col - i * directions[d][1];

            if (newRow >= 0 && newRow < BOARD_SIZE && newCol >= 0 && newCol < BOARD_SIZE && board[newRow][newCol] == player) {
                count++;
            } else {
                break;
            }
        }

        if (count >= 5) {
            return 1;  // 赢了
        }
    }

    return 0;  // 没赢
}

这个checkWin函数会检查当前玩家下的棋子有没有形成五连珠。如果某个方向上有五个连续的棋子,返回1表示赢了,否则返回0

第六步:主程序逻辑

最后,我们把所有的功能都组合在一起,写一个主函数控制游戏的流程。两个玩家轮流下棋,每下完一次棋后都检查有没有人赢。如果有人赢了,游戏结束。

int main() {
    initBoard();  // 初始化棋盘
    int currentPlayer = 1;  // 1表示黑子,2表示白子

    while (1) {
        printBoard();  // 显示当前棋盘
        placePiece(currentPlayer);  // 当前玩家下棋

        // 检查是否胜利
        if (checkWin(currentPlayer, row, col)) {
            printBoard();
            printf("玩家 %d 获胜!\n", currentPlayer);
            break;
        }

        // 切换玩家
        currentPlayer = (currentPlayer == 1) ? 2 : 1;
    }

    return 0;
}

主函数里,程序会不停地打印棋盘、让玩家下棋、检查是否有人赢了。玩家1下完棋后换2,如果有人连成五颗棋子就宣布获胜。

总结

写五子棋的C语言程序主要分为这几步:

  1. 定义并初始化棋盘。
  2. 打印棋盘。
  3. 让玩家输入下棋的位置。
  4. 检查有没有人赢。
  5. 两个玩家轮流下棋,直到有人获胜。

整个程序的核心就是二维数组的操作和循环判断,非常适合大家练习C语言的基本技能哦!好了,本期我们就学到这里啦,我们下期不见不散!



【声明】内容源于网络
0
0
趣聊科技圈
🧐探索科技,发现乐趣。🤩带你玩遍科技好物!
内容 511
粉丝 0
趣聊科技圈 🧐探索科技,发现乐趣。🤩带你玩遍科技好物!
总阅读63
粉丝0
内容511