简单扫雷游戏
基于easyx的简单c语言gui小游戏
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
#include<graphics.h>
#define width 400
#define height 400
struct mm {
int bj;
int sell;
}map[20][20];
MOUSEMSG mosuse;
void init() {
srand((DWORD)time(0));
int p = 0, q = 0;
setfillcolor(RGB(100, 100, 100));
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
map[i][j].bj = 0;
map[i][j].sell = 0;
fillrectangle(20 * i, 20 * j, 20 * i + 20, 20 * j + 20);
}
}
for (int i = 0; i < 10; i++) {
p = rand() % 20, q = rand() % 20;
if (map[p][q].bj != 10)map[p][q].bj = 10;
else { i--; continue; }
}
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
if (map[i][j].bj == 0) {
for (int p = i - 1; p <= i + 1; p++) {
for (int q = j - 1; q <= j + 1; q++) {
if (map[p][q].bj == 10)map[i][j].bj += 1;
}
}
}
}
}
}
bool check() {
int che = 0;
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
if(map[i][j].bj==10&&map[i][j].sell==8)
che += map[i][j].sell;
}
}
if (che == 80)return true;
else return false;
}
int main()
{
initgraph(width, height);
init();
setbkmode(1);
settextcolor(BLUE);
IMAGE im(20, 20);
IMAGE* img = &im;
loadimage(img, L"flag.jpg", 20, 20, 0);
while (1) {
mosuse = GetMouseMsg();
if (mosuse.uMsg == WM_LBUTTONDOWN) {
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
if (mosuse.x >= 20 * i&&mosuse.x <= 20 * (i + 1) && mosuse.y >= 20 * j&&mosuse.y <= 20 * (j + 1)) {
TCHAR c[1];
_stprintf(c, _T("%d"), map[i][j].bj);
if (map[i][j].bj != 10 && map[i][j].sell != 8 && map[i][j].sell != 11)
setfillcolor(WHITE),
solidrectangle(20 * i, 20 * j, 20 * i + 20, 20 * j + 20),
outtextxy(20 * i, 20 * j, c),
map[i][j].sell = 11;
if (map[i][j].bj == 10)initgraph(0, 0, SHOWCONSOLE), closegraph(), printf("game is over");
}
}
}
}
if (mosuse.uMsg == WM_RBUTTONDOWN) {
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
if (mosuse.x >= 20 * i&&mosuse.x <= 20 * (i + 1) && mosuse.y >= 20 * j&&mosuse.y <= 20 * (j + 1)) {
if (map[i][j].sell != 11&&map[i][j].sell!=8) {
map[i][j].sell = 8;
putimage(20 * i, 20 * j, img);
continue;
}
if (map[i][j].sell == 8)setfillcolor(RGB(100, 100, 100)),fillrectangle(20*i, 20*j, 20*(i+1), 20*(j+1)),map[i][j].sell=0;
}
}
}
FlushMouseMsgBuffer();
}
if (check()) { initgraph(0, 0, SHOWCONSOLE), closegraph(), printf("winner"); }
}
}