Windows 10系统下C语言五子棋游戏的源代码和编译指南

59分钟前阅读2回复0
小小的人啊
小小的人啊
  • 管理员
  • 注册排名4
  • 经验值503115
  • 级别管理员
  • 主题100623
  • 回复0
楼主

概述

本程序实现了一款经典的五子棋游戏,支持在Windows系统上运行,玩家可以通过键盘输入来落子,程序会实时更新棋盘并判断是否有玩家获胜。

主要功能

1、显示棋盘:程序会输出当前的五子棋棋盘状态。

2、初始化棋盘:程序会在开始游戏时初始化棋盘,所有位置都填充为空白。

3、游戏循环:程序会不断执行落子操作,直到有玩家获胜或者棋盘被填满。

4、胜负判断:程序会检查棋盘上是否存在连续5个相同颜色的棋子,如果存在,则判定相应的玩家获胜。

代码实现

#include <stdio.h>
#define N 16
// 显示五子棋棋盘
void wzq_show(char (*GAME)[N]) {
    int i, j;
    printf("五子棋棋盘如下:\n");
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            printf("%c ", GAME[i][j]);
        }
        printf("\n");
    }
}
// 初始化五子棋棋盘
void wzq_init(char (*GAME)[N]) {
    int i, j;
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            GAME[i][j] = '+';
        }
    }
}
// 游戏是否胜利的运算,一旦有人胜利则返回1
int wzq_play(int a, int b, char (*GAME)[N]) {
    int i, j, k;
    // 方向-上的
    for (j = b - 4; j < b + 4; j++) {
        if (j < 0 || j >= N) continue;
        for (i = 0; i < 5; i++) {
            if ('@' == GAME[a][j + i] || '+' == GAME[a][j + i]) break;
            if ('O' == GAME[a][j + i] && 4 == i) {
                printf("\n恭喜你,白家——方向上获胜!\n");
                return 1;
            }
        }
    }
    // 方向|上的
    for (i = a - 4; i < a + 4; i++) {
        if (i < 0 || i >= N) continue;
        for (j = 0; j < 5; j++) {
            if ('@' == GAME[i + j][b] || '+' == GAME[i + j][b]) break;
            if ('O' == GAME[i + j][b] && 4 == j) {
                printf("\n恭喜你,白家——方向上获胜!\n");
                return 1;
            }
        }
    }
    // 方向\上的
    for (i = a - 4, j = b - 4; i < a + 4 && j < b + 4; i++, j++) {
        if (i < 0 || i >= N || j < 0 || j >= N) continue;
        for (k = 0; k < 5; k++) {
            if ('@' == GAME[i + k][j + k] || '+' == GAME[i + k][j + k]) break;
            if ('O' == GAME[i + k][j + k] && 4 == k) {
                printf("\n恭喜你,白家——方向上获胜!\n");
                return 1;
            }
        }
    }
    // 方向/上的
    for (i = a + 4, j = b - 4; i > a - 4 && j < b + 4; i--, j++) {
        if (i < 0 || i >= N || j < 0 || j >= N) continue;
        for (k = 0; k < 5; k++) {
            if ('@' == GAME[i - k][j + k] || '+' == GAME[i - k][j + k]) break;
            if ('O' == GAME[i - k][j + k] && 4 == k) {
                printf("\n恭喜你,白家——方向上获胜!\n");
                return 1;
            }
        }
    }
    return 0;
}
int main() {
    char GAME[N][N] = {0};
    int count = 0;  // 轮换落子计算
    int m, n;      // 白家
    int x, y;      // 黑家
    int res = 0;
    int k = 0;
    wzq_init(GAME);
    wzq_show(GAME);
    while (1) {
        // 当棋盘格子被下满了时
        if (N * N == count) {
            printf("棋盘已经下满了,平局!\n");
            return 0;
        }
        if (0 == count % 2) {
            printf("请白家落子(例如0 3或1 3):");
            scanf("%d%d", &m, &n);
            while (m < 0 || m >= N || n < 0 || n >= N) {
                printf("输入的坐标超出范围,请重新输入:");
                scanf("%d%d", &m, &n);
            }
            while ('+' != GAME[m][n]) {
                printf("此处已经落过子,请重新落子:");
                scanf("%d%d", &m, &n);
            }
            GAME[m][n] = 'O';
            res = wzq_play(m, n, GAME);
            if (1 == res) {
                wzq_show(GAME);
                printf("程序结束\n");
                return 0;
            }
        } else {
            printf("请黑家落子(例如0 3或1 3):");
            scanf("%d%d", &x, &y);
            while (x < 0 || x >= N || y < 0 || y >= N) {
                printf("输入的坐标超出范围,请重新输入:");
                scanf("%d%d", &x, &y);
            }
            while ('+' != GAME[x][y]) {
                printf("此处已经落过子,请重新落子:");
                scanf("%d%d", &x, &y);
            }
            GAME[x][y] = '@';
            res = wzq_play(x, y, GAME);
            if (1 == res) {
                wzq_show(GAME);
                printf("程序结束\n");
                return 0;
            }
        }
        count++;
        wzq_show(GAME);
    }
    return 0;
}

详细说明

1、显示棋盘:通过wzq_show 函数打印出当前的五子棋棋盘状态。

2、初始化棋盘:通过wzq_init 函数初始化棋盘,所有位置都填充为空白。

3、游戏循环:程序会不断执行落子操作,直到有玩家获胜或者棋盘被填满。

4、胜负判断:通过wzq_play 函数检查棋盘上是否存在连续5个相同颜色的棋子,如果存在,则判定相应的玩家获胜。

代码注释

#define N 16:定义了棋盘的大小为16x16。

#define MAX_COUNT 5:定义了获胜所需棋子数量为5个。

int board[BOARD_SIZE][BOARD_SIZE];:定义了战盘,形成二维数组。

GAME[m][n] = 'O';:将第m行第n列上的位置标记为白棋。

GAME[x][y] = '@';:将第x行第y列上的位置标记为黑棋。

希望这个代码能满足您的需求!如果有任何问题,请随时提问。

0
回帖

Windows 10系统下C语言五子棋游戏的源代码和编译指南 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息