0
点赞
收藏
分享

微信扫一扫

推箱子(用图形库)

杰森wang 2022-02-11 阅读 28

#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();//结束绘图
}
举报

相关推荐

0 条评论