服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言二维数组应用实现扫雷游戏

C语言二维数组应用实现扫雷游戏

2022-12-20 16:36穿撒板儿的追风少女 C/C++

这篇文章主要为大家详细介绍了C语言二维数组应用实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言二维数组应用实现扫雷游戏的具体代码,供大家参考,具体内容如下

游戏简介:

电脑随机设置10个雷,用户输入坐标,若坐标下是雷则结束游戏,不是则该位置显示周围的雷数。

game.h

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef __GAME_H__ 
#define __GAME_H__ 
#include<stdio.h> 
//设置屏幕显示的雷盘的大小
#define ROW 9 
#define COL 9 
 
//设置实际雷盘的大小(判断雷数是看用户所选的坐标周围八个坐标内是否设雷,但若是用户选择的坐标是位于雷盘四周,则会数组访问越界,所以行和列都要多设两行)
#define ROWS ROW+2 
#define COLS COL+2 
 
//设置雷的数量
#define MINE_NUM 10 
 
#include<stdlib.h> 
#include<time.h> 
//初始化雷盘 
void IntiBoard(char board[][ROWS], int row, int col, char set);
//打印雷盘
void Show(char board[][ROWS], int row, int col);
//设置雷的位置
void SetMine(char board[][ROWS], int row, int col);
//找雷
void FindMine(char Mine[][ROWS], char MineInfo[][ROWS], int row, int col);
#endif

test.c

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#define _CRT_SECURE_NO_WARNINGS 1 
#include"game.h" 
//游戏菜单打印
void menu()
    printf("********0.exit********\n");
    printf("********1.play********\n");
    printf("**********************\n");
}
//进入游戏
void game()
{
    char Mine[ROWS][COLS] = { 0 };//后台设置雷的情况
    IntiBoard(Mine, ROWS, ROWS,'0');//0为未设雷,1为设雷,先置为全0
 
    char MineInfo[ROWS][COLS] = { 0 };//用来展示给用户看的雷盘
    IntiBoard(MineInfo, ROWS, ROWS, '*');//将该雷盘全置为*
    Show(MineInfo, ROWS, ROWS);//打印雷盘
 
    SetMine(Mine, ROW, ROW);//设置雷
 
    FindMine(Mine,MineInfo, ROW, ROW);//用户找雷
}
 
int main()
{
    int input = 0;
    do
    {
        menu();
        printf("请输入您的选择-->");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            printf("游戏开始,玩的开心呦~~~\n");
            game();//进入游戏
            break;
        case 0:
            printf("游戏退出\n");
            break;
        default:
            printf("请输入正确的操作");
            break;
        }
    } while (input);//循环至少执行一次
    return 0;
}

game.c

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
//将雷盘元素重置为char set
void IntiBoard(char board[][ROWS], int row, int col, char set)
{
    int i = 0;
    int j = 0;
    //遍历数组
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            board[i][j] = set;
        }
    }
}
 
void Show(char board[][ROWS], int row, int col)
{
    int i = 0;
    int j = 0;
    printf("-------------------------------\n");
    for (i = 0; i < row - 1; i++)
    {
        printf("%d ", i);
    }
    printf("\n");
    //遍历数组,打印
    for (i = 1; i < row - 1; i++)
    {
        printf("%d ", i);
        for (j = 1; j < col - 1; j++)
        {
            printf("%c ", board[i][j]);
        }
        printf("\n");
    }
    printf("-------------------------------\n");
}
 
void SetMine(char board[][ROWS], int row, int col)
{
    int x;
    int y;
    int count = 0;
    //系统随机设置10个范围在1~9的x,y值,即随机找十个雷的坐标
    srand((unsigned)time(NULL));
    for (int i = 0; i < MINE_NUM; i++)
    {
        x = rand() % row +1;
        y = rand() % row +1;
        board[x][y] = '1';
        count++;
    }
}
//字符'1' - 字符'0' = 数字1,坐标值都为字符,所以要转化为数字要加字符‘0'
int MineCount(char Mine[][ROWS], int x, int y)
{
    return (Mine[x - 1][y - 1] + Mine[x - 1][y] + Mine[x - 1][y + 1] + Mine[x][y - 1] + Mine[x][y + 1] + Mine[x + 1][y - 1] + Mine[x + 1][y] + Mine[x + 1][y + 1])-(8*'0');
}
//找雷
void FindMine(char Mine[][ROWS], char MineInfo[][ROWS], int row, int col)
{
    int x = 0;
    int y = 0;
    int count = MINE_NUM;//用来控制循环
    int countmine = 0;
    //循环当中踩到雷退出循环,游戏结束,未踩到雷count--,直至雷全找完,此时游戏胜利
    while (count != 0)
    {
        printf("请输入坐标:");
        scanf("%d%d", &x, &y);
        //判断用户输入是否合法,不合法重新输入坐标,合法则判断当前坐标下是否有雷,有雷游戏结束,没雷count--,游戏继续
        if (x > 0 && x <= row && y > 0 && y <= col)
        {
            if (Mine[x][y] == '1')
            {
                printf("Boom!你被炸了!\n");
                Show(Mine, ROWS, ROWS);
                break;
            }
            else
            {
                countmine = MineCount(Mine, x, y);
                MineInfo[x][y] = countmine + '0';
                Show(MineInfo, ROWS, ROWS);
                count--;
            }
        }
        else
        {
            printf("坐标不合法,请重新输入");
        }

易错点

  • 该雷盘打印时是%c打印,后期检查雷的个数时应返回整型,所以中间转换需要知道:‘某数字’-字符’0’=该数字的整型
  • 数组越界怎么办 由于要统计当前所选坐标周围的雷数,要考虑当用户将坐标选在数组边缘或四个角的位置该如何统计,此时需要给数组上下左右各扩充一行,设置初值时设为0,打印时只打印中间部分,(如11*11的数组只打印1~9列/行,第0行/列和第10列/行充当安全区域),这样在统计雷时数组便不会越界。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_43360037/article/details/97697689

延伸 · 阅读

精彩推荐
  • C/C++C语言内存管理及初始化细节示例详解

    C语言内存管理及初始化细节示例详解

    这篇文章主要为大家介绍了C语言内存管理及初始化细节示例的详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...

    乔乔家的龙龙10962022-09-22
  • C/C++C++设计模式之组合模式

    C++设计模式之组合模式

    这篇文章主要介绍了C++设计模式之组合模式,本文讲解什么是组合模式、组合模式的优点、组合模式实例等内容,需要的朋友可以参考下...

    果冻想4322021-02-04
  • C/C++一篇文章带你了解c++运算符重载

    一篇文章带你了解c++运算符重载

    下面小编就为大家带来一篇深入理解C++运算符重载。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    三丰杂货铺6112021-12-15
  • C/C++C语言中for循环问题(一个小坑需注意)

    C语言中for循环问题(一个小坑需注意)

    这篇文章主要给大家介绍了关于C语言中for循环问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    sycgogogo12122021-10-27
  • C/C++C和C++中的基本数据类型的大小及表示范围详解

    C和C++中的基本数据类型的大小及表示范围详解

    这篇文章主要介绍了C和C++中的基本数据类型的大小及表示范围详解,基本数据类型有int、long、long long、float、double、char、string,正文有详细介绍,欢迎参...

    jk_x10492021-06-18
  • C/C++深入Windows下的回车是回车换行(\r\n)还是换行回车(\n\r)的详解

    深入Windows下的回车是回车换行(\r\n)还是换行回车(\n\r)的详解

    本篇文章对Windows下的回车是回车换行(\r\n)还是换行回车(\n\r)进行了详细的分析介绍,需要的朋友参考下 ...

    C++教程网3982020-11-28
  • C/C++C++实现飞机订票系统

    C++实现飞机订票系统

    这篇文章主要为大家详细介绍了C++实现飞机订票系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    那时初见11942022-10-19
  • C/C++C++实现LeetCode(77.Combinations 组合项)

    C++实现LeetCode(77.Combinations 组合项)

    这篇文章主要介绍了C++实现LeetCode(Combinations 组合项),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    Grandyang8022021-11-26