用户:
凡尘飞絮查看: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;
}