C/C++二维数组练习---扫雷,图像实现基于easy-X库

准备工具:VS +EasyX

目的:通过扫雷游戏项目,复习和掌握二维数组的使用;

1.基本框架

建立一个10*10的数组供游戏展示(绿框游戏区),后续步骤中为了防止访问数组越界情况添加边框数组(黄框)

目标

 数组表示

代码展示

int map[12][12];//定义二维数组

//全部初始化为0
    for (int j = 0; j < 12; j++)
    {
        for (int i = 0; i < 12; i++)
        {
            map[i][j] = 0;
        }
    }

2.埋雷

假定-1为雷,用随机函数埋雷,注意添加头文件

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

代码展示:

srand((unsigned int)time(NULL));//随机数的种子

//有雷,-1为雷;随机放置10个;
    for (int j = 1; j < 11; j++)
    {
        int r = rand() % 10+1;//从1-10下标选取
        int c = rand() % 10+1;
        if (map[r][c] == 0)
        {
            map[r][c] = -1;
        }
        else j--;  //解决重复放置问题
    }

3.扫雷提示,表示出非雷区周边雷的个数(0-9)

目标

 代码展示:

 //根据当前雷的发布,反推其他不是雷的数据
    for (int i = 1; i < 11; i++)//绿框内
    {
        for (int j=1; j < 11; j++)
        {
            if (map[i][j] != -1)
            {
                for (int m = i - 1; m <= i + 1; m++)//之前黄框,为此服务防止越界
                {
                    for (int n = j - 1; n <= j + 1; n++)
                    {
                        if (map[m][n] == -1)
                        {
                            map[i][j]++;
                        }
                    }
                }
            }
        }
    }

4.实现对区域操作前后,数组会发生变化

 //数据加密+10
    for (int i = 1; i < 11; i++)
    {
        for (int j = 1; j < 11; j++)
        {
            map[i][j] += 10;
        }
    }//后续通过减去10恢复

5.图形文件导入

VS中选择文件右键,在文件资源管理器中打开文件夹,将文件放置于此

 6.Easy-X使用

EasyX 是针对 C++ 的图形库,可以帮助 C 语言初学者快速上手图形和游戏编程。

基本代码:

IMAGE img[12];//定义图片

initgraph(500, 500,SHOWCONSOLE);//开辟一个图像界面,注意左上角为起始,向右为X,向下Y
    setbkcolor(RED);//设置默认背景为红色

//加载图片到img数组里面
    loadimage(&img[0], L"./res/0.jpg", 50, 50);
    loadimage(&img[1], L"./res/1.jpg", 50, 50);
    loadimage(&img[2], L"./res/2.jpg", 50, 50);
    loadimage(&img[3], L"./res/3.jpg", 50, 50);
    loadimage(&img[4], L"./res/4.jpg", 50, 50);
    loadimage(&img[5], L"./res/5.jpg", 50, 50);
    loadimage(&img[6], L"./res/6.jpg", 50, 50);
    loadimage(&img[7], L"./res/7.jpg", 50, 50);
    loadimage(&img[8], L"./res/8.jpg", 50, 50);
    loadimage(&img[9], L"./res/9.jpg", 50, 50);
    loadimage(&img[10], L"./res/10.jpg", 50, 50);
    loadimage(&img[11], L"./res/11.jpg", 50, 50);

7.输入

获取鼠标键入

  MOUSEMSG msg;//定义鼠标
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN :
            row = msg.x / 50 + 1;//50个像素点为1格,从1开始要加1
            col = msg.y / 50 + 1;
            if (map[row][col] >= 9 && map[row][col] <= 18) map[row][col] -= 10;
                break;
        }

8.输出

    

          if (map[j][i] == -1)
                {
                    putimage((i-1)*50,(j-1)*50,&img[9]);//输出图片雷
                }//雷
                else if (map[i][j] >= 0 && map[i][j] <= 8)
                {
                    putimage((i - 1) * 50, (j - 1) * 50, &img[map[i][j]]);
                }//点后显示0-8的类型
                else putimage((i - 1) * 50, (j - 1) * 50, &img[10]);/*看不出 */

   

通过将输入、输出放置在while(1)函数里面实现输入刷新;

至此简易的扫雷就完成了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值