【C语言】基于 DEV C++的简单扫雷游戏

目录

一、 代码

二、实训报告

三、答辩PPT


一、 代码

 这学期C语言大作业选题:基于 DEV C++的简单扫雷游戏,以下是dev c++适配代码。

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
#include 

#define ROWS 9
#define COLS 9
#define MINE_COUNT 10

void InitBoard(char board[][COLS], int rows, int cols, char set);
void SetMine(char board[][COLS], int row, int col);
void PrintBoard(char board[][COLS], int row, int col);
int GetMineCount(char mine[][COLS], int x, int y);

int main()
{
    char mine[ROWS][COLS]; // 扫雷区域
    char show[ROWS][COLS]; // 显示区域

    int x = 0, y = 0; // 将变量声明移到函数的开头

    srand((unsigned int)time(NULL));
    InitBoard(mine, ROWS, COLS, '0'); // 初始化扫雷区域
    InitBoard(show, ROWS, COLS, '*'); // 初始化显示区域
    SetMine(mine, ROWS, COLS); // 布雷
    PrintBoard(show, ROWS, COLS); // 打印扫雷区域

    while (1)
    {
        printf("请输入要扫描的坐标(x,y):");
        scanf("%d,%d", &x, &y);

        if (mine[x][y] == '1') // 踩雷了,游戏结束
        {
            printf("Game Over!\n");
            show[x][y] = 'X';
            PrintBoard(show, ROWS, COLS);
            break;
        }
        else // 没有踩到雷,继续游戏
        {
            int count = GetMineCount(mine, x, y);
            show[x][y] = count + '0';
            PrintBoard(show, ROWS, COLS);

            if (count == 0) // 周围没有雷,自动扩展
            {
                int i, j; // 将变量声明移到函数的开头
                for (i = x - 1; i <= x + 1; i++)
                {
                    for (j = y - 1; j <= y + 1; j++)
                    {
                        if (i >= 0 && i < ROWS && j >= 0 && j < COLS && show[i][j] == '*')
                        {
                            x = i;
                            y = j;
                            i = x + 1; // 跳出外层循环
                            break; // 跳出内层循环
                        }
                    }
                }
            }
        }
    }

    return 0;
}

// 初始化扫雷区域
void InitBoard(char board[][COLS], int rows, int cols, char set)
{
    int i, j; // 将变量声明移到函数的开头
    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
        {
            board[i][j] = set;
        }
    }
}

// 布雷
void SetMine(char board[][COLS], int row, int col)
{
    int count = MINE_COUNT;
    while (count > 0)
    {
        int x = rand() % row;
        int y = rand() % col;

        if (board[x][y] == '0')
        {
            board[x][y] = '1';
            count--;
        }
    }
}

// 打印扫雷区域
void PrintBoard(char board[][COLS], int row, int col)
{
    printf("  ");
    int i; // 将变量声明移到函数的开头
    for (i = 0; i < col; i++)
    {
        printf("%d ", i);
    }
    printf("\n");

    int j; // 将变量声明移到函数的开头
    for (i = 0; i < row; i++)
    {
        printf("%d ", i);
        for (j = 0; j < col; j++)
        {
            printf("%c ", board[i][j]);
        }
        printf("\n");
    }
}

// 获取指定坐标周围的雷数
int GetMineCount(char mine[][COLS], int x, int y)
{
    int count = 0;
    int i, j; // 将变量声明移到函数的开头
    for (i = x - 1; i <= x + 1; i++)
    {
        for (j = y - 1; j <= y + 1; j++)
        {
            if (i >= 0 && i < ROWS && j >= 0 && j < COLS && mine[i][j] == '1')
            {
                count++;
            }
        }
    }
    return count;
}

 

你可能感兴趣的:(C,语言,游戏,c++,游戏,算法,c语言,编辑器,开发语言)