帮忙看下原因,十分感谢
==================mineS.h==================
#ifndef __MINES_H__
#define __MINES_H__
#define NUM 10
#define SIZE 30
void initGame();
void imgLoad(IMAGE img[]);
void bombSet(int map[][NUM + 2]);
void numSet(int map[][NUM + 2]);
void drawMap(int map[][NUM + 2], IMAGE img[]);
void allZero(int map[][NUM + 2], int x, int y);
int mouseDown(int map[][NUM + 2]);
#endif
==================mineS.cpp==================
#include<stdlib.h>
#include<time.h>
#include<graphics.h>
#include"mineS.h"
/*
函数名 游戏初始化
参数表 无
返回值 无
修改者 xSapientia 2021/9/19
*/
void initGame()
{
srand((unsigned)time(NULL));
initgraph(SIZE * NUM, SIZE * NUM);
int map[NUM + 2][NUM + 2] = { 0 };
IMAGE img[14];
imgLoad(img);
bombSet(map);
numSet(map);
while (1)
{
drawMap(map, img);
if (mouseDown(map) == 9)
{
drawMap(map, img);
MessageBox(NULL, "菜!", "游戏结束", MB_OK);
}
else
{
drawMap(map, img);
}
}
}
/*
函数名 贴图载入
参数表 IMAGE 贴图组
返回值 无
修改者 xSapientia 2021/9/19
*/
void imgLoad(IMAGE img[])
{
loadimage(&img[0], "./resource/0.jpg", SIZE, SIZE);
loadimage(&img[1], "./resource/1.jpg", SIZE, SIZE);
loadimage(&img[2], "./resource/2.jpg", SIZE, SIZE);
loadimage(&img[3], "./resource/3.jpg", SIZE, SIZE);
loadimage(&img[4], "./resource/4.jpg", SIZE, SIZE);
loadimage(&img[5], "./resource/5.jpg", SIZE, SIZE);
loadimage(&img[6], "./resource/6.jpg", SIZE, SIZE);
loadimage(&img[7], "./resource/7.jpg", SIZE, SIZE);
loadimage(&img[8], "./resource/8.jpg", SIZE, SIZE);
loadimage(&img[9], "./resource/flag.jpg", SIZE, SIZE);
loadimage(&img[10], "./resource/flag2.jpg", SIZE, SIZE);
loadimage(&img[11], "./resource/bomb.jpg", SIZE, SIZE);
loadimage(&img[12], "./resource/bomg0.jpg", SIZE, SIZE);
loadimage(&img[13], "./resource/space.jpg", SIZE, SIZE);
}
/*
函数名 随机设置雷
参数表 int map[][NUM+2] 表示地图的数组
返回值 无
修改者 xSapientia 2021/9/19
*/
void bombSet(int map[][NUM + 2])
{
for (int bomb = 0; bomb < NUM;)
{
int i = rand() % NUM + 1;
int j = rand() % NUM + 1;
if (map[i][j] == 0)
{
map[i][j] = -1;
bomb++;
}
}
}
/*
函数名 雷周围数值计算
参数表 int map[][NUM + 2] 地图数组
返回值 无
修改者 xSapientia 2021/9/19
*/
void numSet(int map[][NUM + 2])
{
for (int row = 1; row <= NUM; row++)
{
for (int col = 1; col <= NUM; col++)
{
if (map[row][col] != -1)
{
//判断非雷格周围雷数
for (int srow = row - 1; srow <= row + 1; srow++)
{
for (int scol = col - 1; scol <= col + 1; scol++)
{
//有一个雷则数字+1
if (map[srow][scol] == -1)
{
map[row][col]++;
}
}
}
}
}
}
}
/*
函数名 绘制贴图
参数表 int map[][NUM + 2] 地图数组
IMAGE 贴图组
返回值 无
修改者 xSapientia 2021/9/19
*/
void drawMap(int map[][NUM + 2], IMAGE img[])
{
for (int row = 1; row <= NUM; row++)
{
for (int col = 1; col <= NUM; col++)
{
if (map[col][row] > 20)
{
putimage(SIZE * (row - 1), SIZE * (col - 1), &img[9]);
}
switch (map[col][row])
{
case 10:
putimage(SIZE * (row - 1), SIZE * (col - 1), &img[0]);
break;
case 11:
putimage(SIZE * (row - 1), SIZE * (col- 1), &img[1]);
break;
case 12:
putimage(SIZE * (row - 1), SIZE * (col - 1), &img[2]);
break;
case 13:
putimage(SIZE * (row - 1), SIZE * (col - 1), &img[3]);
break;
case 14:
putimage(SIZE * (row - 1), SIZE * (col - 1), &img[4]);
break;
case 15:
putimage(SIZE * (row - 1), SIZE * (col - 1), &img[5]);
break;
case 16:
putimage(SIZE * (row - 1), SIZE * (col - 1), &img[6]);
break;
case 17:
putimage(SIZE * (row - 1), SIZE * (col - 1), &img[7]);
break;
case 18:
putimage(SIZE * (row - 1), SIZE * (col - 1), &img[8]);
break;
case 9:
putimage(SIZE * (row - 1), SIZE * (col - 1), &img[11]);
break;
default:
putimage(SIZE * (row - 1), SIZE * (col - 1), &img[13]);
break;
}
}
}
}
/*
函数名 翻开所有附近的无效空格
参数表 int map[][NUM + 2] 地图数组
int x 所在数组列
int y 所在数组行
返回值 无
修改者 xSapientia 2021/9/19
*/
void allZero(int map[][NUM + 2], int x, int y)
{
map[y][x] = 10;
int row = 0;
int col = 0;
for (row = y - 1; row <= y+1; row++)
{
for (col = x-1; col < x+1; col++)
{
if (row >= 1 && row <= NUM && col >= 1 && col <= NUM)
{
if (map[row][col] < 9)
{
if (map[row][col] == 0)
{
allZero(map, col, row);
}
else
{
map[row][col] += 10;
}
}
}
}
}
return;
}
/*
函数名 鼠标事件
参数表 int map[][NUM + 2] 地图数组
返回值 无
修改者 xSapientia 2021/9/19
*/
int mouseDown(int map[][NUM + 2])
{
MOUSEMSG mouseAct;
mouseAct = GetMouseMsg();
while (1)
{
switch (mouseAct.uMsg)
{
case WM_LBUTTONDOWN:
//翻开的为0
if (map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1]==0)
{
allZero(map, mouseAct.x, mouseAct.y);
}
//可以翻开
else if (map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1]<9)
{
map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1] += 10;
}
//不能翻开
else
{
continue;
}
return map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1];
break;
case WM_RBUTTONDOWN:
//已经标记
if (map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1]>20)
{
map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1] -= 30;
}
//已经翻开
else if (map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1]<9)
{
map[mouseAct.y / SIZE + 1][mouseAct.x / SIZE + 1] += 30;
}
//可以标记
else
{
continue;
}
return 0;
break;
}
}
}
==================main.cpp==================
#include<stdio.h>
#include<graphics.h>
#include"mineS.h"
int main()
{
while (1)
{
initGame();
if (MessageBox(NULL, "再试试?","游戏结束", MB_YESNO)== IDNO)
{
break;
}
}
closegraph();
return 0;
}