栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 简易迷宫游戏easyx

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 简易迷宫游戏easyx

#define _CRT_SECURE_NO_DEPRECATEd
#define _CRT_SECURE_NO_WARNINGS

#include
#include
#include
#include
#define LEFT			0//方向
#define RIGHT			1
#define UP			0//由于当前素材只有左右二个方向,所以上下共用了左右方向
#define DOWN			1

#define ROAD 0//地图元素类型
#define WALL 1

#define ENTERX 1//入口  x列,y行
#define ENTERY 0

#define OUTX 11 //出口 x列,y行
#define OUTY 8

#define HUMANWIDTH		75
#define HUMANHEIGHT		130

#define WIDTH			12//地图大小
#define HEIGHT			10

IMAGE img_human;
IMAGE img_human_mask;
IMAGE img_wall;
IMAGE img_road;

int moveNum[2] = { 0 };//当前动作序号
int direction;//上下左右四个方向
int human_witdh;
int human_height;
int x, y;//x列数,y行数

int map[HEIGHT][WIDTH] = {//地图
	{ 1,1,1,1,1,1,1,1,1,1,1,1 },
	{ 0,0,0,1,1,1,1,1,1,1,1,1 },
	{ 1,1,0,1,1,1,1,0,1,1,1,1 },
	{ 1,1,0,0,1,1,1,0,1,1,1,1 },
	{ 1,1,1,0,1,1,1,0,1,1,1,1 },
	{ 1,1,1,0,1,1,1,0,1,1,1,1 },
	{ 1,1,1,0,1,1,1,0,1,1,1,1 },
	{ 1,1,1,0,0,0,0,0,0,0,1,1 },
	{ 1,1,1,1,1,1,1,1,1,0,0,0 },
	{ 1,1,1,1,1,1,1,1,1,1,1,1 },
};

void showbk() {//绘制背景
	for (int j = 0; j < WIDTH; j++)
		for (int i = 0; i < HEIGHT; i++)
			if (map[i][j] == WALL)
				putimage(j * img_wall.getwidth(), i * img_wall.getheight(), img_wall.getwidth(), img_wall.getheight(), &img_wall, 0, 0, SRCCOPY);
			else putimage(j * img_wall.getwidth(), i * img_wall.getheight(), img_wall.getwidth(), img_wall.getheight(), &img_road, 0, 0, SRCCOPY);

}
void start()//初始化
{
	loadimage(&img_wall, _T(".\walls.gif"));
	initgraph(img_wall.getwidth() * WIDTH, img_wall.getheight() * HEIGHT);
	loadimage(&img_human, _T(".\行走素材图.jpg"));
	loadimage(&img_human_mask,_T( ".\行走素材图mask.jpg"));

	human_witdh = 75;//img_human.getwidth()/4;
	human_height = 130;//img_human.getheight()/2;
					   //putimage(x,y,HUMANWIDTH,HUMANHEIGHT,&img_human,0,0);
	loadimage(&img_road, _T(".\road.gif"));
	x = 0;
	y = 1;

}


void updateWithoutInput()
{

}
void drawRole(int x0, int y0)//绘制前景
{
	putimage((x - x0 / 4.0) * img_wall.getwidth() - 7,
		(y - y0 / 4.0) * img_wall.getheight() - 70,
		human_witdh, human_height, &img_human_mask, moveNum[direction] * human_witdh, direction * (human_height - 10), NOTSRCERASE);
	putimage((x - x0 / 4.0) * img_wall.getwidth() - 7,
		(y - y0 / 4.0) * img_wall.getheight() - 70,
		human_witdh, human_height, &img_human, moveNum[direction] * human_witdh, direction * (human_height - 10), SRCINVERT);
}
void show(int x0, int y0)
{

	showbk();
	//clearrectangle(x,y,x+human_witdh,y+human_height);	
	//先显示背景
	//准备好遮罩MASK图和源图,三元光栅操作
	drawRole(x0, y0);
	FlushBatchDraw();
	Sleep(50);
}
void readRecordFile()
{//读取存档
	FILE* fp;
	int temp;
	fp = fopen(".\record.dat", "r");
	fscanf(fp, "%d %d", &x, &y);
	fclose(fp);

}
void WriteRecordFile()
{//保存存档
	FILE* fp;
	int temp;
	fp = fopen(".\record.dat", "w");
	fprintf(fp, "%d %d ", x, y);
	fclose(fp);
}
void updateWithInput()
{//增加过度
	char input;
	int olddirection = direction;
	int oldx = x;
	int oldy = y;
	
	if (_kbhit())
	{

		input = _getch();
		switch (input)
		{
		case 'a':direction = LEFT;		if (map[y][x - 1] == ROAD) x--; moveNum[direction] = 0; break;
		case 'd':direction = RIGHT;		if (map[y][x + 1] == ROAD) x++; moveNum[direction] = 0; break;
		case 'w':direction = UP;		if (map[y - 1][x] == ROAD) y--; moveNum[direction] = 0; break;
		case 's':direction = DOWN;		if (map[y + 1][x] == ROAD) y++; moveNum[direction] = 0; break;
		case 'W':WriteRecordFile(); break;
		case 'R':readRecordFile(); break;
		}
		if (x != oldx || y != oldy)
			for (int i = 4; i > 0; i--)
			{//过渡动画
				show((x - oldx) * i, (y - oldy) * i);
				moveNum[direction]++;//动作序号,一个完整动作分解为四个姿势
				moveNum[direction] %= 4;
			}
	}
}


int main()
{
	start();
	BeginBatchDraw();
	while (1) {
		show(0, 0);
		Sleep(50);
		if (x == OUTX && y == OUTY)//到达了出口
		{
			outtextxy(0, 0, _T("reach target!"));
			Sleep(50);
			break;
		}
		updateWithoutInput();
		updateWithInput();
	}
	EndBatchDraw();
	_getch();
	closegraph();
	return 0;
}




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384258.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号