#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include"conio.h"
#include"graphics.h"
#include <Windows.h>
int map[][10][10] = {
/*第一关*/
{{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,4,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,3,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,2,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
},
/*第二关*/
{{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,4,1,1,1,1,1},
{1,1,1,1,0,1,1,1,1,1},
{1,1,1,1,3,1,1,1,1,1},
{1,1,1,1,0,2,3,0,4,1},
{1,4,0,3,0,0,1,1,1,1},
{1,1,1,1,1,3,1,1,1,1},
{1,1,1,1,1,0,1,1,1,1},
{1,1,1,1,1,4,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
},
/*第三关*/
{
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,3,0,3,0,0,1},
{1,0,0,0,0,0,4,0,0,1},
{1,1,1,1,0,1,1,1,0,1},
{1,0,0,1,0,1,0,0,0,1},
{1,0,0,0,4,0,0,0,0,1},
{1,0,0,1,0,1,2,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
}
};
IMAGE img[5];//保存图片
void drawMap();//打印
void Renwuyidong();//人物移动
void Panduan();//判断是否过关
int Tmap[10][10] = { 0 };//临时数组
int Leve1 = 0;//第一关
void initMap();//加载临时地图
void initmage();//加载图片
void DrawMap();//贴图
int main()
{initgraph(50 * 10, 50 * 10,SHOWCONSOLE);
initmage();
initMap();
while (1)
{
drawMap();
DrawMap();
Panduan();
Renwuyidong();
}
closegraph();
//system("pause");
//return 0;
}
void drawMap()
{
system("cls");
int i, j;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
switch (Tmap[i][j])
{
case 0:printf(" "); break;//空地
case 1:printf("■"); break;//墙壁
case 2:printf("😊"); break;//人物
case 3:printf("▲"); break;//箱子
case 4:printf("★"); break;//目标
case 6:printf("😊"); break;//人物和目标重合
case 7:printf("●"); break;//箱子和目标重合
}
}
printf("\n");
}
};
void Renwuyidong()
{
int x, y;
/*遍历数组*/
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (Tmap[i][j] == 2|| Tmap[i][j] == 6)
{
x = i; //行
y = j;//列
}
}
}
/*按键*/
switch (_getch())
{
case'w':
case'W':
if (Tmap[x - 1][y] == 0 || Tmap[x - 1][y] == 4)
{
Tmap[x - 1][y] += 2;
Tmap[x][y] -=2;
}
if ((Tmap[x - 1][y] ==3||Tmap[x-1][y]==7) && (Tmap[x - 2][y] == 0 || Tmap[x - 2][y] == 4))
{
Tmap[x][y] -= 2;
Tmap[x - 1][y] -= 1;
Tmap[x - 2][y] +=3;
}
break;
case'a':
case'A':
if (Tmap[x][y - 1] == 0 || Tmap[x][y - 1] == 4)
{
Tmap[x][y - 1] += 2;
Tmap[x][y] -= 2;
}
if ((Tmap[x][y - 1] == 3 || Tmap[x][y - 1] == 7) && (Tmap[x][y - 2] == 0 || Tmap[x][y - 2] == 4))
{
Tmap[x][y] -= 2;
Tmap[x][y - 1] -= 1;
Tmap[x][y - 2] += 3;
}
break;
case'd':
case'D':
if (Tmap[x][y + 1] == 0 || Tmap[x][y + 1] == 4)
{
Tmap[x][y + 1] += 2;
Tmap[x][y] -= 2;
}
if ((Tmap[x][y + 1] == 3 || Tmap[x][y + 1] == 7) && (Tmap[x][y + 2] == 0 || Tmap[x][y + 2] == 4))
{
Tmap[x][y] -= 2;
Tmap[x][y + 1] -= 1;
Tmap[x][y + 2] += 3;
}
break;
case's':
case'S':
if (Tmap[x + 1][y] == 0 || Tmap[x + 1][y] == 4)
{
Tmap[x + 1][y] += 2;
Tmap[x][y] -= 2;
}
if ((Tmap[x + 1][y] == 3 || Tmap[x + 1][y] == 7) && (Tmap[x + 2][y] == 0 || Tmap[x + 2][y] == 4))
{
Tmap[x][y] -= 2;
Tmap[x + 1][y] -= 1;
Tmap[x + 2][y] += 3;
}
break;
}
}
void Panduan()
{
for (int i = 0; i < 10; i ++ )
{
for (int j = 0; j < 10; j++)
{
if (Tmap[i][j] == 3)
return;
}
}
/*printf("游戏胜利!\n");
getchar();*/
//弹窗函数,弹出窗口提示信息
if (MessageBox(GetHWnd(), "游戏胜利!是否进入下一关\n", "提示", MB_YESNO) == IDYES)
Leve1++;
else
{
MessageBox(NULL, "游戏结束", "提示", NULL);
exit(0);
}
if (Leve1 >= 3)
{
if (MessageBox(GetHWnd(), "游戏通关!是否进入下一关\n", "提示", MB_YESNO) == IDYES)
{
Leve1 = 0;
}
else
{
MessageBox(NULL, "游戏结束", "提示", NULL);
exit(0);
}
}
initMap();
drawMap();
DrawMap();
}
void initMap()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Tmap[i][j] = map[Leve1][i][j];
}
}
}
void initmage()
{
loadimage(&img[0], "res\\1.jpg", 50, 50);//墙壁
loadimage(&img[1], "res\\2.jpg", 50, 50);//人物
loadimage(&img[2], "res\\3.jpg", 50, 50);//箱子
loadimage(&img[3], "res\\4.jpg", 50, 50);//终点
loadimage(&img[4], "res\\7.jpg", 50, 50);//箱子和终点
}
void DrawMap()
{
//system("cls");
clearcliprgn();//图形库清屏函数
BeginBatchDraw();//批量绘图
int i, j;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
switch (Tmap[i][j])
{
//case 0:printf(" "); break;//空地
case 1://printf("■");
putimage(j * 50, i * 50, &img[0]);
break;//墙壁
case 2://printf("😊");
putimage(j * 50, i * 50, &img[1]);
break;//人物
case 3://printf("▲");
putimage(j * 50, i * 50, &img[2]);
break;//箱子
case 4://printf("★");
putimage(j * 50, i * 50, &img[3]);
break;//目标
case 6://printf("😊");
putimage(j * 50, i * 50, &img[0]);
break;//人物和目标重合
case 7://printf("●");
putimage(j * 50, i * 50, &img[4]);
break;//箱子和目标重合
}
}
printf("\n");
}
EndBatchDraw();//结束绘图
}