该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
程序演示下载:http://gfgame.diy.myrice.com/down/tuixiangzi.htm
/*作者:logicman(逻辑人)
2005年7月27日 编写绘图代码。将图片保存到文件里。推箱子程序只要调用文件就可以了。
2005年7月29日 有于对c不太了解中途遇到太多内存声请上的问题,中断。
2005年8月24日 一个内存申请的问题终于被解决。解决代码标记①
2005年8月25日 游戏完成,但是中间出现了很多漏洞。
2005年8月26日 漏洞被解决。漏洞出现地方的标记②
心得体会:编写程序,程序的顺序也是很重要的。而漏洞也常常出现在顺序的上。
*/
/* 地图可以自己绘制,但要在程序中说明地图的个数 (标记在③),并规定了命名的方式为level数字.dat(数字的取值在0-9999)。地图中的主要含义:
N:表示不可人不可走到的空白地方;
B:表示人可以走的空白地方;
W:表示墙;
A:表示箱子;
L:表示目标;(箱子和目标的个数必须相等)
U:表示人。
*/
#include
#include
#include
#define filemax 5/* ③ */
char *Pup,*Park,*Pwall,*Plocus,*Pblank,loca[20][20],chb[5];
int locusum,mainx,mainy,level,geshu,bushu;
main()
{
int size;
FILE *filebuf;
int playkey=0,keyshu=1,keyl=0;
initgraph(9,2,"");
/* 载入图片到内存中 本来想用一个函数的,可是我还是对c语言的申请内存不太了解 */
/*载入小人*/
filebuf=fopen("up.pic","rb+");
size=getw(filebuf);
Pup=calloc(5,size);/* 申请了,4块长度为size的内存*/
/* ① */
Park=Pup+size;/* 对c语言的内存申请不太了解,只有使用这个方法了。*/
Pwall=Park+size;
Plocus=Pwall+size;
Pblank=Plocus+size;
fread(Pup,size,1,filebuf);
/*载入箱子*/
filebuf=fopen("ark.pic","rb+");
size=getw(filebuf);
fread(Park,size,1,filebuf);
/*载入墙*/
filebuf=fopen("wall.pic","rb+");
size=getw(filebuf);
fread(Pwall,size,1,filebuf);
/*载入目的*/
filebuf=fopen("locus.pic","rb+");
size=getw(filebuf);
fread(Plocus,size,1,filebuf);
filebuf=fopen("blank.pic","rb+");
size=getw(filebuf);
fread(Pblank,size,1,filebuf);
/*载入完毕!!!!!!!!!!!!!*/
/*绘制menu*/
setcolor(4);
settextstyle(0,0,4);
outtextxy(200,100,"Bunt Ark");
settextstyle(0,0,1);
outtextxy(380,140,"V1.0");
do{
switch(keyshu){
case 1: gamemenu(15,7,7);break;
case 2: gamemenu(7,15,7);break;
case 3: gamemenu(7,7,15);break;
}
playkey=getch();
switch(playkey){
case 72: keyshu-=1;if(keyshu<1) keyshu=3;break;
case 80: keyshu+=1;if(keyshu>3) keyshu=1;break;
case 13: keyl=keyshu;break;
}
if (keyl==2){
settextstyle(0,0,2);
setcolor(15);
outtextxy(300,400,"Email:cigol@126.com");
bioskey(0);
setcolor(0);
outtextxy(300,400,"Email:cigol@126.com");
settextstyle(1,0,1);
}
else if (keyl==3) return;
else if (keyl==1) break;
keyl=0;
}while(1);
cleardevice();
setcolor(4);
outtextxy(450,400,"Page Up");
outtextxy(450,410,"Page Down");
outtextxy(450,420,"R");
outtextxy(450,430,"Esc");
setcolor(15);
outtextxy(510,400,":previous level");
outtextxy(520,410,": next level");
outtextxy(460,420,": restart level");
outtextxy(475,430,": quit game");
setcolor(4);
outtextxy(450,470,"logicman V. 0.1");
outtextxy(500,170,"bushu:");