/* WIN-TC BGI 图形编程模板..简单的推箱子游戏适合初学者学习 */
#include "Conio.h"
#include "graphics.h"
#define closegr closegraph
void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd, &gm, "");
}
int main(void)
{
int c;
int fx,fy;
int x=9;
int y=9;
int path[20][20]={
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,0,0,0,0,0,0,0,0,0,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,
1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,
1,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1,
1,0,0,0,0,0,1,1,1,8,0,0,0,0,1,0,0,0,0,1,
1,0,0,0,0,0,1,0,0,0,1,8,1,0,1,0,0,0,0,1,
1,0,0,0,0,0,1,0,8,0,1,0,0,0,1,0,0,0,0,1,
1,0,0,0,0,0,1,0,0,0,1,1,1,1,1,0,0,0,0,1,
1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,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,
};
initgr(); /* BGI初始化 */
/*****此部分添加你自己的代码,例如
line(25, 25, 220, 220);
circle(100, 100, 50);
等等*****/
/* for (fx=0;fx<20;fx++) //双循环画地图
{
for (fy=0;fy<20;fy++)
{
if (path[fx][fy]==1) {circle(fy*10+100, fx*10+100,5);} //数组的地址[x][y]与地图circle(y,x,5) 中的x,y相反?
if (path[fx][fy]==8) {circle(fy*10+100, fx*10+100,1);}
if (path[fx][fy]==9) {circle(fy*10+100, fx*10+100,2);}
}
}
*/
sw:
c=getch();
switch(c)
{
case 'w':{
if (path[x-1][y]==0)
{path[x][y]=0;
x=x-1;
path[x][y]=5;
}
if (path[x-1][y]==8&&path[x-2][y]!=1&&path[x-2][y]!=8)
{path[x][y]=0;
x=x-1;
path[x][y]=5;
path[x-1][y]=8;
}
}
break;
case 's':{
if (path[x+1][y]==0)
{path[x][y]=0;
x=x+1;
path[x][y]=5;
}
if (path[x+1][y]==8&&path[x+2][y]!=1&&path[x+2][y]!=8)
{path[x][y]=0;
x=x+1;
path[x][y]=5;
path[x+1][y]=8;
}
}
break;
case 'a':{
if (path[x][y-1]==0)
{path[x][y]=0;
y=y-1;
path[x][y]=5;
}
if (path[x][y-1]==8&&path[x][y-2]!=1&&path[x][y-2]!=8)
{path[x][y]=0;
y=y-1;
path[x][y]=5;
path[x][y-1]=8;
}
}
break;
case 'd':
{
if (path[x][y+1]==0)
{path[x][y]=0;
y=y+1;
path[x][y]=5;
}
if (path[x][y+1]==8&&path[x][y+2]!=1&&path[x][y+2]!=8)
{path[x][y]=0;
y=y+1;
path[x][y]=5;
path[x][y+1]=8;
}
}
break;
case 'q': exit();
}
//if (path[x][y+1]==8)exit();
//if (path[x][y-1]==8)exit();
//if (path[x+1][y]==8)exit();
//if (path[x-1][y]==8)exit();
//if(path[18][18]==0&&path[4][1]==1) goto dn;
cleardevice();
for (fx=0;fx<20;fx++) //双循环画地图
{
for (fy=0;fy<20;fy++)
{
if (path[fx][fy]==1) {circle(fy*10+100, fx*10+100,5);} //数组的地址[x][y]与地图circle(y,x,5) 中的x,y相反?
if (path[fx][fy]==8) {circle(fy*10+100, fx*10+100,1);}
if (path[fx][fy]==5) {circle(fy*10+100, fx*10+100,3);}
}
}
if (path[8][10]!=8&&path[8][10]!=5) {circle(10*10+100, 8*10+100,2);} //判断是否推抵?
if (path[8][11]!=8&&path[8][11]!=5) {circle(11*10+100, 8*10+100,2);}
if (path[8][12]!=8&&path[8][12]!=5) {circle(12*10+100, 8*10+100,2);}
if (path[8][10]==8&&path[8][11]==8&&path[8][12]==8) goto dn;
goto sw;
dn: /* 暂停一下,看看前面绘图代码的运行结果 */
closegr(); /* 恢复TEXT屏幕模式 */
//outtextxy(200,200,"sadfasfasfsafsaf");
printf("ok ,,you win the game!!");
getch();
return 0;
}
我编的推箱子游戏原创拉..。。。。