猫史档案馆


C++easyX推箱子源码

用户:凡尘飞絮凡尘飞絮查看:0 回复:0 评论:0 创建时间:2023-05-09T20:51:10


#include<iostream>
#include<string>
#include<graphics.h>
#include<conio.h>
#include<math.h>
#include<cstdio>
#define B_S 60
#define B_N 8
#define lt 5
int tn,an;
struct pl
{
	int i;
	int j;
};
pl pr;
int cl=0;
char level[B_N][B_N+1];
char ls[lt][B_N][B_N+1]=
{
{"wwwwwwww","wwwtbeew","weeeeeew","weeeeeew",
"weeeeeew","weepaeew","weeewwww","wwwwwwww"},
{"wwwwwwww","wwweewww","wpetbwww","weeebeww",
"wewteeww","weeeeeww","weepwwww","wwwwwwww"},
{"wwwwwwww","wwpeewww","weeweeww","webabeww",
"weeteeww","wwetewww","wwwwwwww","wwwwwwww"},
{"wwwwwwww","wwteeeew","wpebbeew","weeeweew",
"wtwwwwww","wwwwwwww","wwwwwwww","wwwwwwww"},
{"eewwwwee","eeweewee","wwweewwe","webetewe",
"wpeaeewe","weewwwwe","wwwweeee","eeeeeeee"}
};
void startup()
{
	initgraph(B_N*B_S,B_N*B_S);
	setbkcolor(RGB(150,150,150));
	BeginBatchDraw();
	int i,j;
	tn=0;
	an=0;
	for(i=0;i<B_N;i++)
		for(j=0;j<B_N;j++)
			level[i][j]=ls[cl][i][j];
	for(i=0;i<B_N;i++)
	{
		for(j=0;j<B_N;j++)
		{
			if(level[i][j]=='p')
			{
				pr.i=i;
				pr.j=j;
				level[i][j]='e';
			}
		}
	}
		for(i=0;i<B_N;i++)
	{
		for(j=0;j<B_N;j++)
		{
			if(level[i][j]=='t'||level[i][j]=='a')
				tn++;
		}
	}
}
void show()
{
	int i,j;
	cleardevice();
	for(i=0;i<B_N;i++)
	{
		for(j=0;j<B_N;j++)
		{
			if(level[i][j]=='e')
			{
				setfillcolor(RGB(150,150,150));
				setlinecolor(RGB(150,150,150));
				fillrectangle(j*B_S,i*B_S,(j+1)*B_S,(i+1)*B_S);
			}
			else if(level[i][j]=='w')
			{
				setfillcolor(RGB(155,0,0));
				setlinecolor(RGB(150,150,150));
				fillrectangle(j*B_S,i*B_S,(j+1)*B_S,(i+1)*B_S);
			}
			else if(level[i][j]=='b')
			{
				setfillcolor(RGB(255,255,0));
				setlinecolor(RGB(150,150,150));
				fillrectangle(j*B_S,i*B_S,(j+1)*B_S,(i+1)*B_S);
			}
			else if(level[i][j]=='t')
			{
				setfillcolor(RGB(250,250,250));
				fillrectangle((j+0.3)*B_S,(i+0.3)*B_S,(j+0.7)*B_S,(i+0.7)*B_S);
			}
			else if(level[i][j]=='a')
			{
				setlinecolor(RGB(150,150,150));
				setfillcolor(RGB(255,255,0));
				fillrectangle(j*B_S,i*B_S,(j+1)*B_S,(i+1)*B_S);
				setfillcolor(RGB(250,250,250));
				fillrectangle((j+0.3)*B_S,(i+0.3)*B_S,(j+0.7)*B_S,(i+0.7)*B_S);
			}
			/*else if(level[i][j]=='p')
			{
				setfillcolor(RGB(255,0,0));
				fillcircle((j+0.5)*B_S,(i+0.5)*B_S,0.4*B_S);
				setfillcolor(RGB(80,80,80));
				setlinecolor(RGB(80,80,80));
				fillcircle((j+0.3)*B_S,(i+0.45)*B_S,0.08*B_S);
				fillcircle((j+0.7)*B_S,(i+0.45)*B_S,0.08*B_S);
				setlinestyle(PS_SOLID,3);
				line((j+0.35)*B_S,(i+0.7)*B_S,(j+0.65)*B_S,(i+0.7)*B_S);
				setlinestyle(PS_SOLID,1);
			}*/
		}
	}
	i=pr.i;
	j=pr.j;
	setfillcolor(RGB(255,0,0));
	fillcircle((j+0.5)*B_S,(i+0.5)*B_S,0.4*B_S);
	setfillcolor(RGB(80,80,80));
	setlinecolor(RGB(80,80,80));
	fillcircle((j+0.3)*B_S,(i+0.45)*B_S,0.08*B_S);
	fillcircle((j+0.7)*B_S,(i+0.45)*B_S,0.08*B_S);
	setlinestyle(PS_SOLID,3);
	line((j+0.35)*B_S,(i+0.7)*B_S,(j+0.65)*B_S,(i+0.7)*B_S);
	setlinestyle(PS_SOLID,1);
	if(an==tn)
	{
		setbkmode(TRANSPARENT);
		settextcolor(RGB(0,255,255));
		settextstyle(80,0,_T("宋体"));	
		outtextxy(80,200,_T("VICTORY"));
	}
	FlushBatchDraw();
}
void update()
{
	if(kbhit()&&(an<tn))
	{
		char input=getch();
		if(input==' ')
			startup();
		if(input=='a'||input=='s'||input=='d'||input=='w')
		{
			int g_i=pr.i;
			int g_j=pr.j;
			int gn_i=g_i;
			int gn_j=g_j;
			if(input=='a')
			{
				g_j=pr.j-1;
				gn_j=g_j-1;
			}
			else if(input=='d')
			{
				g_j=pr.j+1;
				gn_j=g_j+1;
			}
			else if(input=='s')
			{
				g_i=pr.i+1;
				gn_i=g_i+1;
			}
			else if(input=='w')
			{
				g_i=pr.i-1;
				gn_i=g_i-1;
			}
			if (level[g_i][g_j]=='e' || level[g_i][g_j]=='t' )
	{ // 如果目标位置是empty,或者target
		pr.i = g_i; // 玩家移动到目标位置
		pr.j = g_j;
	}
	else if (level[g_i][g_j]=='b' &&level[gn_i][gn_j]=='e' )
	{ // 如果目标位置是box,再前面一个是empty
		pr.i = g_i; // 玩家移动到目标位置
		pr.j = g_j;
		level[g_i][g_j]='e'; // 目标位置变成empty
		level[gn_i][gn_j]='b'; // 再前面变成	box
	}
	else if (level[g_i][g_j]=='b' &&level[gn_i][gn_j]=='t')
	{ // 如果目标位置是box,再前面一个是target
		pr.i = g_i; // 玩家移动到目标位置
		pr.j = g_j;
		level[g_i][g_j] = 'e'; // 目标位置变成empty
		level[gn_i][gn_j] = 'a'; // 再前面变成achieved
	}
	else if (level[g_i][g_j]=='a' &&level[gn_i][gn_j]== 'e')
	{ // 如果目标位置是achieved,再前面一个是empty
		pr.i = g_i; // 玩家移动到目标位置
		pr.j = g_j;
		level[g_i][g_j] = 't'; // 目标位置变成target
		level[gn_i][gn_j] = 'b'; // 再前面变成box
	}
	else if (level[g_i][g_j]=='a' &&level[gn_i][gn_j]== 't')
	{ // 如果目标位置是achieved,再前面一个是target
		pr.i = g_i; // 玩家移动到目标位置
		pr.j = g_j;
		level[g_i][g_j] = 't'; // 目标位置变成target
		level[gn_i][gn_j] = 'a'; // 再前面变成achieved
	}
	else // 其他情况都推不动
		return; // 不做任何处理,函数直接返回
	}
		}	
	an=0;
	int i,j;
	for(i=0;i<B_N;i++)
	{
		for(j=0;j<B_N;j++)
		{
			if(level[i][j]=='a')
				an++;
		}
	}
	if(an==tn)
	{
		show();
		if(cl<lt-1)
		{
			cl++;
			startup();
		}
	}
}

int main(int argc, char** argv)
{
	startup();
	while(1)
	{
		update();
		show();
	}
	return 0;
}


回复

上一页1 页 / 共 0下一页