该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码如下所示:
#pragma once
#include
#include
#include
#include
#include
#include
#pragma comment(lib,"winmm.lib")
#define N 10
IMAGE Box1, Box2;
IMAGE Per1, Per2;
IMAGE Wall;
IMAGE BackGround;
IMAGE Tag1, Tag2;
IMAGE Boom1, Boom2;
IMAGE End;
//int Map[N][N] = {0};
int Game_InitMap(int);
void Game_Paint();
void Game_Play();
int Game_Judgement();
struct Map
{
int x;
int y;
int num;
}map;
struct Map pos[10][10];
#include"std.h"
int main()
{
initgraph(700, 620);
//PlaySound("./res/music.wav", NULL, SND_FILENAME | SND_LOOP | SND_ASYNC);
Game_Play();
return 0;
}
int Game_InitMap(int level)
{
loadimage(&BackGround, "./res/背景.jpg", 700, 650);
loadimage(&Wall, "./res/wall.jpg", 69, 69);
loadimage(&Box1, "./res/mb.jpg", 69, 69);
loadimage(&Box2, "./res/mb - 副本.jpg", 69, 69);
loadimage(&Per1, "./res/ren.jpg", 69, 69);
loadimage(&Per2, "./res/ren - 副本.jpg", 69, 69);
loadimage(&Tag1, "./res/zd.jpg", 69, 69);
loadimage(&Tag2, "./res/zd - 副本.jpg", 69, 69);
loadimage(&Boom1, "./res/boom.jpg", 69, 69);
loadimage(&Boom2, "./res/boom - 副本.jpg", 69, 69);
loadimage(&End, "./res/meizi.jpg", 700, 650);
FILE*fp = fopen("Map1.txt", "r");
if (fp == NULL)
{
MessageBox(NULL, "地图加载失败", NULL, NULL);
exit(0);
}
int FileOffset;
FileOffset = 102 * (level - 1);
fseek(fp, FileOffset, SEEK_SET);
int i, j;
char c;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
c = fgetc(fp);
pos[i][j].num = c - '0';
}
}
fclose(fp);
return 0;
}
void Game_Paint()
{
int i, j;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
switch (pos[i][j].num)
{
case 0:
break;
case 1:
putimage(j * 69, i * 69, &Wall);
break;
case 3:
putimage(j * 69, i * 69, &Tag2, SRCPAINT);
putimage(j * 69, i * 69, &Tag1, SRCAND);
break;
case 4:
putimage(j * 69, i * 69, &Box2, SRCPAINT);
putimage(j * 69, i * 69, &Box1, SRCAND);
break;
case 5:
putimage(j * 69, i * 69, &Per2, SRCPAINT);
putimage(j * 69, i * 69, &Per1, SRCAND);
break;
case 7:
putimage(j * 69, i * 69, &Boom2, SRCPAINT);
putimage(j * 69, i * 69, &Boom1, SRCAND);
break;
case 8:
putimage(j * 69, i * 69, &Per2, SRCPAINT);
putimage(j * 69, i * 69, &Per1, SRCAND);
break;
}
}
}
}
void Game_Play()
{
srand((unsigned)time(NULL));
int n = rand() % 5 + 1;
int m = 1;
int flag = 0;
int currentpos1, currentpos2, currentpos3;
int temp1, temp2, temp3, temp4, temp5, temp6;
Game_InitMap(n);
int x, y;
char ch;
while (true)
{
BeginBatchDraw();
cleardevice();
putimage(0, 0, &BackGround);
if (!Game_Judgement())
{
if (m == 5)
{
Game_Paint();
FlushBatchDraw();
MessageBox(GetHWnd(), "Game Over", "提示", MB_OK);
putimage(0, 0, &End);
FlushBatchDraw();
Sleep(4000);
closegraph();
exit(0);
}
m++;
n = rand() % 5 + 1;
Game_InitMap(n);
}
EndBatchDraw();
Game_Paint();
for (x = 0; x < 10; x++)
{
for (y = 0; y < 10; y++)
{
if (pos[x][y].num == 5 || pos[x][y].num == 8)
break;
}
if (pos[x][y].num == 5 || pos[x][y].num == 8)
break;
}
ch = getch();
switch (ch)
{
case 72://向上
pos[x][y].x = x;
pos[x][y].y = y;
temp1 = pos[x][y].x;
temp2 = pos[x][y].y;
temp3 = pos[x][y].x - 1;
temp4 = pos[x][y].y;
temp5 = pos[x][y].x - 2;
temp6 = pos[x][y].y;
currentpos1 = pos[x][y].num;
currentpos2 = pos[x - 1][y].num;
currentpos3 = pos[x - 2][y].num;
if (pos[x - 1][y].num == 0 || pos[x - 1][y].num == 3)
{
pos[x][y].num -= 5;
pos[x - 1][y].num += 5;
flag++;
}
else if (pos[x - 1][y].num == 4 || pos[x - 1][y].num == 7)
{
if (pos[x - 2][y].num == 0 || pos[x - 2][y].num == 3)
{
pos[x - 2][y].num += 4;
pos[x - 1][y].num += 1;
pos[x][y].num -= 5;
flag++;
}
}
break;
case 75://向左
pos[x][y].x = x;
pos[x][y].y = y;
temp1 = pos[x][y].x;
temp2 = pos[x][y].y;
temp3 = pos[x][y].x;
temp4 = pos[x][y].y - 1;
temp5 = pos[x][y].x;
temp6 = pos[x][y].y - 2;
currentpos1 = pos[x][y].num;
currentpos2 = pos[x][y - 1].num;
currentpos3 = pos[x][y - 2].num;
if (pos[x][y - 1].num == 0 || pos[x][y - 1].num == 3)
{
pos[x][y].num -= 5;
pos[x][y - 1].num += 5;
flag++;
}
else if (pos[x][y - 1].num == 4 || pos[x][y - 1].num == 7)
{
if (pos[x][y - 2].num == 0 || pos[x][y - 2].num == 3)
{
pos[x][y - 2].num += 4;
pos[x][y - 1].num += 1;
pos[x][y].num -= 5;
flag++;
}
}
break;
case 80://向下
pos[x][y].x = x;
pos[x][y].y = y;
temp1 = pos[x][y].x;
temp2 = pos[x][y].y;
temp3 = pos[x][y].x + 1;
temp4 = pos[x][y].y;
temp5 = pos[x][y].x + 2;
temp6 = pos[x][y].y;
currentpos1 = pos[x][y].num;
currentpos2 = pos[x + 1][y].num;
currentpos3 = pos[x + 2][y].num;
if (pos[x + 1][y].num == 0 || pos[x + 1][y].num == 3)
{
pos[x][y].num -= 5;
pos[x + 1][y].num += 5;
flag++;
}
else if (pos[x + 1][y].num == 4 || pos[x + 1][y].num == 7)
{
if (pos[x + 2][y].num == 0 || pos[x + 2][y].num == 3)
{
pos[x + 2][y].num += 4;
pos[x + 1][y].num += 1;
pos[x][y].num -= 5;
flag++;
}
}
break;
case 77://向右
pos[x][y].x = x;
pos[x][y].y = y;
temp1 = pos[x][y].x;
temp2 = pos[x][y].y;
temp3 = pos[x][y].x;
temp4 = pos[x][y].y + 1;
temp5 = pos[x][y].x;
temp6 = pos[x][y].y + 2;
currentpos1 = pos[x][y].num;
currentpos2 = pos[x][y + 1].num;
currentpos3 = pos[x][y + 2].num;
if (pos[x][y + 1].num == 0 || pos[x][y + 1].num == 3)
{
pos[x][y].num -= 5;
pos[x][y + 1].num += 5;
flag++;
}
else if (pos[x][y + 1].num == 4 || pos[x][y + 1].num == 7)
{
if (pos[x][y + 2].num == 0 || pos[x][y + 2].num == 3)
{
pos[x][y + 2].num += 4;
pos[x][y + 1].num += 1;
pos[x][y].num -= 5;
flag++;
}
}
break;
case 27:
Game_InitMap(n);
flag = 0;
break;
case 8:
if (flag != 0)
{
pos[temp1][temp2].num = currentpos1;
pos[temp3][temp4].num = currentpos2;
pos[temp5][temp6].num = currentpos3;
}
break;
}
}
}
int Game_Judgement()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (pos[i][j].num == 4)
{
return 1;
}
}
}
return 0;
}
效果图如下所示: