c语言 推箱子(C language Sokoban)
c语言 推箱子(C language Sokoban)
推箱子游戏/ * * /
#包括<< DOS。”
#包括< stdio. h >
#包括<
#包括。H
#包括<< BIOS。”
#包括
/ *定义二维数组ghouse来记录屏幕上各点的状态,
其中:0表示什么都没有,B表示箱子,大片的表示墙壁,很表示目的地,我的表示箱子在目的地。* /
焦ghouse [ 20 ] [ 20 ];
/ *以下函数为直接写屏函数,很酷的函数哦!是我朋友告诉我的。* /
焦远*屏幕=(char远*)0xb8000000;
无效putchxy(y,x,ch,焦焦FC,BC)
{
屏幕[(x * 160)+(y < 1)+ 0 ] = CH;
屏幕[(X×160)+(Y << 1)+ 1 ] =(公元前16)+ FC;
}
定义判断是否胜利的数据结构/ * * /
typedef struct Winer {
int,y;
struct Winer * P;
} Winer;
箱子位置的数据结构/ * * /
typedef struct盒{
int,y;
结构箱下;
}盒;
在特定的坐标上画墙壁并用数组记录状态的函数/ * * /
无效printwall(x,y)
{
putchxy(Y-1,x-1219、马真塔、黑);
ghouse [X] [Y] =’w';
}
在特定的坐标上画箱子并用数组记录状态的函数/ * * /
无效printbox(x,y)
{
putchxy(Y-1,x-1,10,白色,黑色);
ghouse [X] [Y] = B;
}
在特定的坐标上画目的地并用数组记录状态的函数/ * * /
无效printwhither1(x,y,Winer **赢,Winer××PW)
{
Winer *量子阱;
putchxy(Y-1,1,*,黄,黑);
ghouse [X] [Y] =是的;
如果(* = NULL)
{
*赢=×PW = QW =(Winer *)malloc(sizeof(Winer));
(×PW)-> x = x;(×PW)-> Y = y;(×PW)-> p = null;
}
其他的
{
QW =(Winer *)malloc(sizeof(Winer));
QW -> x = x;QW -> Y = y;(×PW)-> P =量子阱;(×PW)=量子阱;量子阱-> p = null;
}
}
在特定的坐标上画目的地并用数组记录状态的函数/ * * /
无效printwhither(x,y)
{
putchxy(Y-1,1,*,黄,黑);
ghouse [X] [Y] =是的;
}
在特定的坐标上画人的函数/ * * /
无效printman(x,y)
{
gotoxy(Y,X);
_al = 02;_cx = 01;_ah = 0xa;
geninterrupt(0x10);
}
在特定的坐标上画箱子在目的地上并用数组记录状态的函数/ * * /
无效printboxin(x,y)
{
putchxy(Y-1,x-1,10,黄,黑);
ghouse [X] [Y] =“我”;
}
/ * * /初始化函数,初始化数组和屏幕
无效()
{
int,j;
clrscr();
对于(i = 0;i < 20;i +)
对于(j=0;j<20;j + +)
ghouse [我] [ J ] = 0;
_al = 3;
_ah = 0;
geninterrupt(0x10);
gotoxy(40,6);
printf(“按上、下、左、右打。”);
gotoxy(40,8);
printf(“按ESC退出。”);
gotoxy(40,10);
printf(“新闻空间重置游戏。”);
}
第一关的图象初始化/ * * /
* inithouse1() Winer
{
int,y;
Winer *赢= null,×PW;
gotoxy(8,2);
printf(“一级”);
对于(x=1,y=5;y=9;y + +)
printwall(x + 4,
And + 10);
For (y = 5, X = 1; x < = 5, X + +)
Printwall (X + 4 and + 10);
For (y = 9, X = 1; x < = 5, X + +)
Printwall (X + 4 and + 10);
For (y = 1, X 3 = X; x < = 8; + +)
Printwall (X + 4 and + 10);
For (x = 3, y = 3; x < = 5, X + +)
Printwall (X + 4 and + 10);
For (x = 5