扫雷游戏简单模式简化低配版(9*9)

本文详细描述了一款C语言编写的扫雷游戏,包括游戏界面设计、主函数控制流程、二维数组的使用(存雷和排雷)、随机数生成以及关键函数如初始化、布局雷、计算雷的数量和排查雷的操作。
摘要由CSDN通过智能技术生成

0.我这里创建了三个文件(test.c和game.h和game.c) {test.c里是主要内容,game.h里面有各种定义,包含头文件,函数声明,game.c中是写的game.h中声明的函数的内容} (所以在test.c和game.c中顶部只写了#include"game.h")     我在game.h中定义一些数,方便修改如果全部要改。

1.游戏界面:

          我用了一个小函数(menu)来打印游戏界面:(使用1和0是为了使用while循环时方便)

2.设置主函数(输入选择,输入1开始游戏,0推出游戏,输入其他的数提示错误并重新输入):(system("cls"的作用是清空当前屏幕)

 

3.开始设置游戏函数(game1())

        一. 这里我们设置两个字符型二维数组a和b,a数组用于我们的存雷,b数组用于展示。

       二.使用初始化数组a和b,a数组用字符0覆盖,(方便存雷,用1表示有雷,且后续要判断一个坐标周围有多少个雷方便计算)a数组用*覆盖;

   三.用函数展示数组a和b(用棋盘形式)

      

我们使用9*9大小;但是我使用了11*11的二维数组,是为后续的方便,例如坐标不包含0,扫雷完一个坐标后对该坐标周围一圈有多少个雷的判断;

四.开始存雷:(也是使用函数)

          在a数组中用1表示有雷,0表示没有雷(开始初始化的是全部为0,没有雷);存雷时需要随机数,就需要rand和srand函数,头文件中要包含time.h和stdlib.h;要存10个雷(在game.h中定义了MINES1为10);

  

五.用一个函数计算要排查的坐标周围存在几个雷;(我们用的是字符数组)

六.开始写排查雷函数;

        如果输入的坐标在a数组中为1,表示有雷,游戏结束,反之不为1,表示没有雷,那么,这时就要更新b数组并展示b数组棋盘,且在那个坐标的内容改为字符数字,表示周围一圈有多少个雷;直到没有雷的坐标都被我们排查出,这时,宣布游戏胜利;

七.运行片段截图:(要赢得话要输入70次左右坐标且不被炸死)

八.我的代码:

                                       1.test.c中的代码:

#include"game.h"

void menu(void) {
    printf("*******************************************************");
    printf("\n*********************1.开始游戏************************\n");
    printf("***********************0.退出游戏************************\n");
    printf("*********************************************************\n");
}
void game1(void) {
    char a[ROW1S][COL1S] = {0}; char b[ROW1S][COL1S] = { 0 };              //a存雷信息;b排雷信息;
    InitializePanel(a,ROW1S,COL1S,'0');
    InitializePanel(b, ROW1S, COL1S, '*');                     //棋盘初始化函数
    show1(b);//展示排雷信息
    ArrangeMines(a,ROW1, COL1);//布置雷函数

     FindMines(a,b);//排查雷;
}

int main() {
    int imput=0;
    srand((unsigned int)time(NULL));
    do {
        menu();
        printf("请选择(1或0):-》->\n");
        scanf("%d", &imput);
        switch (imput) {
        case 1:      
            system("cls"); printf("游戏开始:\n");
            game1();
            break;
        case 0:printf("退出游戏:\n"); break;

        default:printf("输入错误,请重新选择:\n"); break;
        }
    } while (imput);


    return 0;
}

                                           2.   game.h中的代码:

#pragma once

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

#define ROW1 9
#define COL1 9


#define ROW1S ROW1+2
#define COL1S COL1+2

#define MINES1   10

void InitializePanel(char a[ROW1S][COL1S], int x1, int x2, char c);
//扫雷棋盘面板初始化

void ArrangeMines(char a[ROW1S][COL1S],int x1,int x2);//布置雷

void show1(char a[ROW1][COL1S]);//展示存雷排雷信息


int MinesNumber(char a[ROW1S][COL1S], int x, int y);//查看排雷的地点周围有几个雷;

void FindMines(char a[ROW1S][COL1S], char b[ROW1S][COL1S]);//排查雷;

                                             3.game.c中的代码

#include"game.h"


void InitializePanel(char a[ROW1S][COL1S], int x1, int x2, char c) {
    int i, j;
    for (i = 0; i < x1; i++) {
        for (j = 0; j < x2; j++) {
            a[i][j] = c;
        }
    }
}//棋盘初始化

void show1(char a[ROW1S][COL1S]) {
    int i, j;
    printf("-----------------排雷-----------------\n");
    for (i = 0; i <= COL1; i++) { printf("%d ", i); } //打印列号
    printf("\n");
    for (i = 1; i <= ROW1; i++) {
        printf("%d ", i);                              //打印行号
        for (j = 1; j <= COL1; j++) {
            printf("%c ", a[i][j]);
        }printf("\n");
    }
}//展示存雷排雷信息

                                             

void ArrangeMines(char a[ROW1S][COL1S],int x1,int x2) {
    
    int c = MINES1;
    while (c) {
        int x = rand() % x1 + 1;
        int y = rand() % x2 + 1;  //随机数设置雷
        if (a[x][y] == '0') {
            a[x][y] = '1'; c--;
        }
    }
}
//设置布置雷;

int MinesNumber(char a[ROW1S][COL1S],int x,int y) {
    return a[x - 1][y - 1] + a[x - 1][y] + a[x - 1][y + 1] + a[x][y - 1] + a[x][y + 1] + a[x + 1][y - 1] + a[x + 1][y] + a[x + 1][y + 1]-8*'0';
}//查看排雷的地点周围有几个雷;

void FindMines(char a[ROW1S][COL1S], char b[ROW1S][COL1S]) {
    int x = 0, y = 0; int win = 0;
    while (win < ROW1 * COL1 - MINES1) {
        printf("请输入要排查的坐标:\n");
        scanf("%d%d", &x, &y);
        if (x >= 1 && x <= ROW1 && y >= 1 && y <= COL1) {
            if (a[x][y] == '1') {
                printf("很遗憾,被炸死了,下图中数字1是存有炸弹的地方\n");
                show1(a); break;
            }
            else {
                if (b[x][y] != '*') {
                    printf("该坐标你已经排查过啦,无需重复排查\n");
                }
                else {
                    system("cls");
                    int c = MinesNumber(a, x, y);
                    b[x][y] = c+'0';
                    show1(b);
                }
            }
        }else {
            printf("你输入的坐标好像有误呢,请重新输入\n");
        }
        if (win == ROW1 * COL1 - MINES1)printf("恭喜你,游戏胜利!\n");
    }
}//排查雷;

九.

       最后,希望提意见。谢谢你们。

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值