问题描述:现在这个程序运行第一次的时候可以正常玩,接着选择游戏时会出现数字1 2 以及空白图片加载不出来,但是3以上的数字图片可以正常加载,这个bug可以解决吗
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<easyx.h>
using namespace std;
#define ROW 10
#define COL 10
#define IMGW 40
void showmap(int map[ROW][COL]);
void initMap(int map[ROW][COL]);
void drawmap(int map[ROW][COL], IMAGE img[]);
void mouseEvent(int map[ROW][COL]);
void openNull(int map[ROW][COL], int row, int col);
void judge(int map[ROW][COL], int row, int col);
bool isOver = false;//点到雷的标记
int main()
{
//创建图形窗口
initgraph(COL*IMGW, ROW*IMGW, EX_SHOWCONSOLE);
//设置随机数种子
srand((unsigned)time(NULL));
//定义游戏的地图
int map[ROW][COL] = { 0 };
//初始化数据
initMap(map);
//把数据转化为对应的图形
IMAGE img[12];//定义图片数组
//加载图片
for (int i = 0; i < 12; i++)
{
char fileName[50] = { 0 };
sprintf_s(fileName,"./images/%d.jpg", i);
loadimage(img + i, fileName, IMGW, IMGW);
}
while (true)
{
mouseEvent(map);
drawmap(map, img);
if (isOver)
{
int ret = MessageBox(GetHWnd(), "你踩到雷了,是否再来一把?", "Hint", MB_OKCANCEL);
if (ret == IDOK)
{
initMap(map);
showmap(map);
isOver = false;
}
else if(ret==IDCANCEL)
{
exit(666);
}
}
}
system("pause");
return 0;
}
void showmap(int map[ROW][COL])
{
for (int i = 0; i < ROW; i++)
{
for (int k = 0; k < COL; k++)
{
printf("%2d ", map[i][k]);
}
printf("\n");
}
printf("\n");
}
void initMap(int map[ROW][COL])
{
memset(map, 0, ROW * COL * sizeof(map));
//给地图随机10个埋雷,-1表示
for (int i = 0; i < 10;)
{
int r = rand() % ROW;//[0,10)
int c = rand() % COL;
if (map[r][c] == 0)
{
map[r][c] = -1;
i++; //只有设置了雷,i才会自增
}
}
//让雷所在的九宫格所有的格子的数值都加一,雷除外
for (int i = 0; i < ROW; i++)
{
for (int k = 0; k < COL; k++)
{
if (map[i][k] == -1)
{
//遍历雷所在的九宫格
for (int r = i - 1; r <= i + 1; r++)
{
for (int c = k - 1; c <= k + 1; c++)
{
//防止数组越界
if ((r >= 0 && r < ROW && c >= 0 && c < COL) && map[r][c] != -1)
{
map[r][c]++;
}
}
}
}
}
}
//把所有的格子用遮罩图盖起来,给每个格子加密,比如加上20
for (int i = 0; i < ROW; i++)
{
for (int k = 0; k < COL; k++)
{
map[i][k] += 20;
}
}
}
void drawmap(int map[ROW][COL],IMAGE img[])
{
//把数组里面的数据,转换成对应图片,贴图贴到图形窗口上
for (int i = 0; i < ROW; i++)
{
for (int k = 0; k < COL; k++)
{
//空白格子和数字
if (map[i][k] >= 0 && map[i][k] <= 8)
{
putimage(k * IMGW, i * IMGW, img + map[i][k]);
}
else if (map[i][k] == -1)
{
putimage(k * IMGW, i * IMGW, img + 9);
}
else if (map[i][k] >= 19 && map[i][k] <= 28)
{
putimage(k * IMGW, i * IMGW, img + 10);
}
}
}
}
void mouseEvent(int map[ROW][COL])
{
//定义消息的结构体(鼠标消息,按键消息,字符消息)
ExMessage msg;
//如果有消息就返回真,并且给msg设置值
if (peekmessage(&msg, EX_MOUSE))
{
//把鼠标的坐标转成数组的下标
int r = msg.y / IMGW;
int c = msg.x/IMGW;
if (msg.message == WM_LBUTTONDOWN)//左键按下
{
if (map[r][c] >= 19 && map[r][c] <= 28)
{
map[r][c] -= 20;
openNull(map, r, c);
judge(map, r, c);
showmap(map);
}
}
}
}
void openNull(int map[ROW][COL],int row,int col)
{
//判断当前点击的是不是空白
if (map[row][col] == 0)
{
for (int i = row-1; i <=row+1; i++)
{
for (int k = col - 1; k <= col + 1; k++)
{
if (map[i][k] >= 19 && map[i][k] <= 28)
{
if (i >= 0 && i < ROW && k >= 0 && k < COL)
{
map[i][k] -= 20;
openNull(map, i, k);//递归
}
}
}
}
}
}
void judge(int map[ROW][COL],int row,int col)
{
//如果点到了雷,就gameover,点到雷所有的雷的显示出来
if (map[row][col] == -1)
{
for (int i = 0; i < ROW; i++)
{
for (int k = 0; k < COL; k++)
{
if (map[i][k] == 19)
{
map[i][k] -= 20;
}
}
}
isOver = true;
}
}
问题2:生成的exe文件怎么一个图片都加载不出来
图片文件
链接:https://pan.baidu.com/s/1gQSLctqskTV4ui_aSYr8SA?pwd=cqx8
提取码:cqx8
找到问题的根源了,sizeof后面写map就不行,写int就可以。
可以解答下吗