#include <iostream>
#include <random>
#include <graphics.h>
#include <mmsystem.h>
#include <cstdlib>
#include <conio.h>
#include <time.h>
#pragma comment (lib,"winmm.lib")
using namespace std;
//define static size
const int ROW = 10;
const int COL = 10;
const int IMGW = 40;
int isOver = 0;
class InitMap {
private:
int map[ROW][COL];
IMAGE img[12];
public:
InitMap(){}
void setMap() {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
map[i][j] = 0;
}
}
}
void showMap();
void setMine(int n);
void monifyMap();
void LoadPicture();
void transDataIntoImage();
void hideMap();
void mouseEvent();
void openNUll(int i, int j);
void judge(int i, int j);
};
int main()
{
mciSendString("open ./images/search.wav", 0, 0, 0);
mciSendString("play ./images/search.wav", 0, 0, 0);
//create graph window
initgraph(COL * IMGW,ROW * IMGW,EW_SHOWCONSOLE);
InitMap Init;
//define game map
Init.setMap();
//set some mines
Init.setMine(10);
//monify the map after set mines
Init.monifyMap();
//transform data into graph windows
Init.LoadPicture();
//hide the map which we create
Init.hideMap();
while (1) {
//mouse event
Init.mouseEvent();
//把数组里的数字转化成对应的图片信息,贴图
Init.transDataIntoImage();
if (isOver == 1) {
int ret = MessageBox(GetHWnd(), "你踩到雷了,是否重新开始?", "hit", MB_OKCANCEL);
if (ret == IDOK) {
Init.setMap();
Init.setMine(10);
Init.monifyMap();
Init.hideMap();
isOver = false;
}
else if (ret == IDCANCEL) {
exit(666);
}
}
else if (isOver == 2) {
int ret = MessageBox(GetHWnd(), "恭喜你通关啦!是否重新开始?", "hit", MB_OKCANCEL);
if (ret == IDOK) {
Init.setMap();
Init.setMine(10);
Init.monifyMap();
Init.hideMap();
isOver = false;
}
else if (ret == IDCANCEL) {
exit(666);
}
}
}
//show map
//Init.showMap();
_getch();
return 0;
}
void InitMap:: showMap() {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
cout << map[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
void InitMap::setMine(int n){
srand((unsigned int)time(0));
for (int i = 0; i < n;) {
int row = rand() % 10;
int col = rand() % 10;
if (map[row][col] == 0) {
map[row][col] = -1;
i++;
}
}
}
void InitMap::monifyMap() {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (map[i][j] == -1) {
for (int a = i - 1; a <= i + 1; a++) {
for (int b = j - 1; b <= j + 1; b++) {
if (a >= 0 && a < ROW && b >= 0 && b < COL) {
if (map[a][b] != -1) map[a][b]++;
}
}
}
}
}
}
}
void InitMap::LoadPicture() {
for (int i = 0; i < 12; i++) {
char filename[50] = { 0 };
sprintf_s(filename, "./images/%d.jpg",i);
loadimage(img + i, filename, IMGW, IMGW);
//putimage(i * 40, 0, img + i);
}
}
void InitMap::transDataIntoImage() {
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
if (map[i][j] >= 0 && map[i][j] <= 8) {
//blank and number
putimage(j * IMGW, i * IMGW, img + map[i][j]);
}
else if (map[i][j] == -1) {
//mine
putimage(j * IMGW, i * IMGW, img + 9);
}
else if (map[i][j] >= 19 && map[i][j] <= 28) {
putimage(j * IMGW, i * IMGW, img + 10);
}
else if (map[i][j] > 28) {
putimage(j * IMGW, i * IMGW, img + 11);
}
}
}
}
void InitMap::hideMap() {
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++) {
map[i][j] += 20;
}
}
}
void InitMap::mouseEvent() {
//define message struct :(mouse msg/key msg/string msg)
ExMessage msg;
//if have message, return true and set value to msg
if (peekmessage(&msg, EM_MOUSE)) {
int x = msg.x;
int y = msg.y;
int i = y / IMGW;
int j = x / IMGW;
if (msg.message == WM_LBUTTONDOWN) {
//鼠标左键按下
mciSendString("open ./images/click.wav", 0, 0, 0);
mciSendString("play ./images/click.wav", 0, 0, 0);
if (map[i][j] >= 19 && map[i][j] <= 28) {
map[i][j] -= 20;
openNUll(i, j);
judge(i, j);
}
else if (map[i][j] > 28) {
map[i][j] -= 30;
openNUll(i, j);
judge(i, j);
}
}
else if (msg.message == WM_RBUTTONDOWN) {
mciSendString("open ./images/rightClick.wav", 0, 0, 0);
mciSendString("play ./images/rightClick.wav", 0, 0, 0);
if (map[i][j] >= 19 && map[i][j] <= 28) {
map[i][j] += 10;
}
}
}
}
void InitMap::openNUll(int i, int j) {
if (map[i][j] == 0) {
for (int m = i - 1; m <= i + 1; m++) {
for (int n = j - 1; n <= j + 1; n++) {
if (map[m][n] >= 19 && map[m][n] <= 28&& (m >= 0 && m<ROW && n >= 0 && n < COL)) {
map[m][n] -= 20;
openNUll(m, n);
}
}
}
}
}
void InitMap::judge(int i, int j) {
if (map[i][j] == -1) {
for (int m = 0; m < ROW; m++)
{
for (int n = 0; n < COL; n++) {
if (map[m][n] == 19) map[m][n] = -1;
}
}
isOver = 1;
}
int count = 0;
for (int a = 0; a < ROW; a++) {
for (int b = 0; b < COL; b++) {
if (map[a][b] >= 19) count++;
}
}
if (count == 10) {
isOver = 2;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
简易扫雷.zip (46个子文件)
saolei
.vs
saolei
FileContentIndex
merges
c685ee5f-b7c1-418f-b665-193b2e78417f.vsidx 17KB
read.lock 0B
v17
Browse.VC.db 36.82MB
Solution.VC.db 700KB
.suo 26KB
ipch
AutoPCH
1e0a8fbbad69829f
SAOLEI.ipch 87.63MB
saolei.sln 2KB
SwapMines
SwapMines.vdproj 31KB
Release
Debug
setup.exe 558KB
SwapMines.msi 1.12MB
saolei
saolei.vcxproj.filters 968B
saolei.vcxproj 6KB
images
8.jpg 12KB
search.wav 83KB
2.jpg 11KB
1.jpg 10KB
6.jpg 11KB
3.jpg 11KB
5.jpg 17KB
9_copy.jpg 11KB
11.jpg 11KB
4.jpg 17KB
10.jpg 1KB
rightClick.wav 20KB
start.mp3 53KB
click.wav 14KB
9.jpg 11KB
7.jpg 17KB
0.jpg 15KB
saolei.cpp 6KB
x64
Debug
saolei.ilk 1.65MB
vc143.pdb 492KB
saolei.obj 138KB
vc143.idb 355KB
saolei.log 100B
saolei.exe.recipe 304B
saolei.tlog
CL.write.1.tlog 540B
CL.read.1.tlog 30KB
CL.command.1.tlog 730B
link.write.1.tlog 536B
link.command.1.tlog 1KB
link.read.1.tlog 3KB
saolei.lastbuildstate 170B
saolei.vcxproj.user 168B
x64
Debug
saolei.exe 165KB
saolei.pdb 3.34MB
共 46 条
- 1
光会照进巷陌
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0