C语言扫雷小游戏

扫雷是一种经典的单人益智游戏,玩家需要在一个方块区域中排雷,避免踩到地雷并揭开所有非地雷区域。以下是扫雷游戏的基本设计思路以及可能的实现:

  1. 初始化雷区:首先,需要在一个方块区域中随机放置一定数量的地雷。可以根据玩家选择的难度级别来确定地雷的数量,并在地图上随机生成地雷的位置。

  2. 显示地雷数量:在每个非地雷方块周围显示该方块周围的地雷数量。可以使用数字来表示周围地雷的数量,如果该方块周围没有地雷,则显示空白。

  3. 点击方块:玩家可以通过点击方块来揭开该方块的内容。如果揭开的是地雷,则游戏结束;如果揭开的是空白方块,可以递归地揭开周围的空白方块;如果揭开的是数字方块,显示该数字。

  4. 游戏结束判断:当玩家揭开地雷或者揭开所有非地雷区域时,游戏结束。根据游戏结果显示相应的提示信息。

  5. 实现图形界面:可以使用图形界面库如Qt、SFML等实现扫雷游戏的图形化显示,包括雷区的绘制、方块的点击交互等。

以下为源程序:

1.头文件
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2

#define EASY_COUNT 10


//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);

//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col);

//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col);

//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);


#pragma once

2.代码

第一部分

#define _CRT_SECURE_NO_WARNINGS 1

#include "head.h"

void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
    int i = 0;
    for (i = 0; i < rows; i++)
    {
        int j = 0;
        for (j = 0; j < cols; j++)
        {
            board[i][j] = set;
        }
    }
}

void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
    printf("--------扫雷------\n");
    int i = 0;
    for (i = 0; i <= col; i++)
    {
        printf("%d ", i);
    }
    printf("\n");

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

//布置雷是在棋盘上随机的找10个坐标布置的
//x: 1~9
//y: 1~9

void SetMine(char mine[ROWS][COLS], int row, int col)
{
    int count = EASY_COUNT;
    int x = 0;
    int y = 0;
    while (count)
    {
        x = rand() % row + 1;
        y = rand() % col + 1;

        if (mine[x][y] != '1')
        {
            mine[x][y] = '1';//布置一个雷
            count--;
        }
    }
}

//int GetMineCount(char mine[ROWS][COLS], int x, int y)
//{
//    return mine[x - 1][y] + 
//        mine[x - 1][y - 1] + 
//        mine[x][y - 1] + 
//        mine[x + 1][y - 1] +
//        mine[x + 1][y] + 
//        mine[x + 1][y + 1] + 
//        mine[x][y + 1] + 
//        mine[x - 1][y + 1] - 8*'0';
//}

int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
    int i = 0;
    int count = 0;
    for (i = -1; i <= 1; i++)
    {
        int j = 0;
        for (j = -1; j <= 1; j++)
        {
            count += (mine[x + i][y + j] - '0');
        }
    }
    return count;
}


void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
    int x = 0;
    int y = 0;
    int win = 0;
 

第二部分

#define _CRT_SECURE_NO_WARNINGS 1

#include "head.h"

void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
    int i = 0;
    for (i = 0; i < rows; i++)
    {
        int j = 0;
        for (j = 0; j < cols; j++)
        {
            board[i][j] = set;
        }
    }
}

void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
    printf("--------扫雷------\n");
    int i = 0;
    for (i = 0; i <= col; i++)
    {
        printf("%d ", i);
    }
    printf("\n");

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

//布置雷是在棋盘上随机的找10个坐标布置的
//x: 1~9
//y: 1~9

void SetMine(char mine[ROWS][COLS], int row, int col)
{
    int count = EASY_COUNT;
    int x = 0;
    int y = 0;
    while (count)
    {
        x = rand() % row + 1;
        y = rand() % col + 1;

        if (mine[x][y] != '1')
        {
            mine[x][y] = '1';//布置一个雷
            count--;
        }
    }
}

//int GetMineCount(char mine[ROWS][COLS], int x, int y)
//{
//    return mine[x - 1][y] + 
//        mine[x - 1][y - 1] + 
//        mine[x][y - 1] + 
//        mine[x + 1][y - 1] +
//        mine[x + 1][y] + 
//        mine[x + 1][y + 1] + 
//        mine[x][y + 1] + 
//        mine[x - 1][y + 1] - 8*'0';
//}

int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
    int i = 0;
    int count = 0;
    for (i = -1; i <= 1; i++)
    {
        int j = 0;
        for (j = -1; j <= 1; j++)
        {
            count += (mine[x + i][y + j] - '0');
        }
    }
    return count;
}


void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
    int x = 0;
    int y = 0;
    int win = 0;
 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值