當前位置:首頁 » 編程語言 » 推箱子c語言功能描述
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

推箱子c語言功能描述

發布時間: 2023-07-30 17:05:46

c語言,想要在一個推箱子的游戲中加上一個「選關」的功能

/*
可以設置F2為選關鍵
F2的按鍵掃描碼為:0x3c00

在判斷按鍵的程序中加入這個F2鍵的判斷就可以了
*/

#define F2 0x3c00

case F2:
關數加1;
if(關數>最大關數)
關數=1;
初始化當前關數的所有數據;
goto Begin;
/*break;*/

② c語言推箱子

//空:0牆:1箱子:3巢:4箱子與巢重合:5
[MAPCOUNT]
map_count=8
[MAP1]
w=8
h=8
nest_count=4
l1=00011100
l2=00013100
l3=11110100
l4=13202111
l5=11142031
l6=00121111
l7=00131000
l8=00111000
[MAP2]
w=9
h=9
nest_count=3
l1=111110000
l2=140010000
l3=102210111
l4=102010131
l5=111011131
l6=011000031
l7=010001001
l8=010001111
l9=011111000
[MAP3]
w=10
h=7
nest_count=4
l1=0111111100
l2=0100000111
l3=1121110001
l4=1040200201
l5=1033102011
l6=1133100010
l7=0111111110
[MAP4]
w=6
h=8
nest_count=5
l1=011110
l2=110010
l3=142010
l4=112011
l5=110201
l6=132001
l7=133531
l8=111111
//以上為地圖數據文件,保存為boxdata.dat文件
//空:0牆:1箱子:3巢:4箱子與巢重合:5
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<windows.h>
#include<string.h>

typedefstruct
{
intx;
inty;
}PT;

int**s;
PTman;
PT*nest=NULL;
PTprev;

intnest_count=0;
intmap_count=0;
intgate=1;
intw,h;
charwork_dir[100]={''};
chardata_file[100]={''};

voidGetDataFromFile();
voidGetIntFromLineString(char*ch,intlen,inti);
voidDraw();
boolis_Success();

intmain()
{
printf("Loading...");
CONSOLE_CURSOR_INFOcci;
cci.bVisible=FALSE;
cci.dwSize=sizeof(cci);
HANDLEhandle=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(handle,&cci);

_getcwd(work_dir,100);
strcpy(data_file,work_dir);
strcat(data_file,"\boxdata.dat");
if(access(data_file,0))
{
printf("Don'tfindmapdatafile!");
getch();
exit(0);
}

while(1)
{
GetDataFromFile();
intsel=0;
Draw();
while(1)
{
fflush(stdin);
sel=getch();
if(sel==224)
{
sel=getch();
prev=man;
if(sel==77)//right
{
if(s[man.y][man.x+1]==2)
{
if(s[man.y][man.x+2]==0||s[man.y][man.x+2]==3)
{
s[man.y][man.x+2]=2;
s[man.y][man.x+1]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(s[man.y][man.x+1]==0||s[man.y][man.x+1]==3)
{
s[man.y][man.x+1]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(sel==80)//down
{
if(s[man.y+1][man.x]==2)
{
if(s[man.y+2][man.x]==0||s[man.y+2][man.x]==3)
{
s[man.y+2][man.x]=2;
s[man.y+1][man.x]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(s[man.y+1][man.x]==0||s[man.y+1][man.x]==3)
{
s[man.y+1][man.x]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(sel==72)//up
{
if(s[man.y-1][man.x]==2)
{
if(s[man.y-2][man.x]==0||s[man.y-2][man.x]==3)
{
s[man.y-2][man.x]=2;
s[man.y-1][man.x]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(s[man.y-1][man.x]==0||s[man.y-1][man.x]==3)
{
s[man.y-1][man.x]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(sel==75)//left
{
if(s[man.y][man.x-1]==2)
{
if(s[man.y][man.x-2]==0||s[man.y][man.x-2]==3)
{
s[man.y][man.x-2]=2;
s[man.y][man.x-1]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
elseif(s[man.y][man.x-1]==0||s[man.y][man.x-1]==3)
{
s[man.y][man.x-1]=4;
s[man.y][man.x]=0;
}
else
{
continue;
}
}
inti;
for(i=0;i<nest_count;i++)
{
if(nest[i].x==prev.x&&nest[i].y==prev.y)
{
s[prev.y][prev.x]=3;
break;
}
}
Draw();
if(is_Success()==true)
{
gate++;
if(gate>map_count)
{
printf(" mapisend!");
fflush(stdin);
getch();
exit(0);
}
break;
}
}
elseif(sel=='q'||sel=='Q')
{
exit(0);
}
elseif(sel=='r'||sel=='R')
{
break;
}
}
}
return0;
}

voidGetDataFromFile()
{
inti;
if(s!=NULL)
{
if(h!=0)
{
for(i=0;i<h;i++)
{
free(s+i);
}
free(s);
}
else
{
printf("fail");
getch();
exit(0);
}
}

if(nest!=NULL)
{
free(nest);
}
map_count=GetPrivateProfileInt("MAPCOUNT","map_count",0,data_file);

if(map_count<gate)
{
printf("gatefinish!");
getch();
exit(0);
}
charsection[20]={''};
sprintf(section,"MAP%d",gate);
nest_count=GetPrivateProfileInt(section,"nest_count",0,data_file);
nest=(PT*)malloc(sizeof(PT)*nest_count);

w=GetPrivateProfileInt(section,"w",0,data_file);
h=GetPrivateProfileInt(section,"h",0,data_file);
if(w<5||h<5||nest_count<1)
{
printf("worhorbox_nestdataerror!");
getch();
exit(0);
}
s=(int**)malloc(sizeof(int*)*h);
for(i=0;i<h;i++)
{
*(s+i)=(int*)malloc(sizeof(int)*w);
}

charkey[20]={''};
charline[50]={''};
intlen;
intj;
for(i=0;i<h;i++)
{
memset(line,'',50);
sprintf(key,"l%d",i+1);
GetPrivateProfileString(section,key,"",line,50,data_file);
len=strlen(line);
if(len>0)
{
line[len++]='';
line[len]='';
}
GetIntFromLineString(line,strlen(line),i);
}
len=0;
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
if(s[i][j]==3)
{
nest[len].y=i;
nest[len].x=j;
len++;
}
elseif(s[i][j]==5)
{
nest[len].y=i;
nest[len].x=j;
len++;
s[i][j]=2;
}
}
}
}

voidstrmyncpy(char*source,char*target,intbegin,intend)
{
inti=0;
while(1)
{
if(source[begin]!='')
{
target[i]=source[begin];
}
i++;
begin++;
if(begin>end)
{
target[i]='';
break;
}
}
}

voidGetIntFromLineString(char*ch,intlen,inti)
{
intj=0;
charc[5]={''};
intb=0,e=0;
while(e<len)
{
if(ch[e]=='')
{
memset(c,'',5);
strmyncpy(ch,c,b,e);
b=e+1;
e++;
s[i][j++]=atoi(c);
}
e++;
}
}

voidDraw()
{
inti,j,k;
boolflag=false;
system("cls");
printf(" ");
for(i=0;i<h;i++)
{
printf(" ");
for(j=0;j<w;j++)
{
if(s[i][j]==0)
{
printf("");
}
elseif(s[i][j]==1)
{
printf("■");
}
elseif(s[i][j]==2)
{
printf("★");
}
elseif(s[i][j]==3)
{
printf("☆");
}
elseif(s[i][j]==4)
{
printf("◎");
man.x=j;
man.y=i;
}
}
}
}

boolis_Success()
{
inti,j;
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
if(s[i][j]==3)
{
returnfalse;
}
}
}
for(i=0;i<nest_count;i++)
{
if(man.x==nest[i].x&&man.y==nest[i].y)
{
returnfalse;
}
}
returntrue;
}

③ C語言推箱子:如何記錄目的地坐標並判斷勝利

不用指針,那你就建個數組用來存,目的地坐標,如果目的地數目一樣的話,數組大小就確定了,每副圖目的地數目不一樣的話,那你就以最大個數為准。再用一個變數存目的地數目。
b[N][2]
這樣你在判斷目的在哪時,就不用m,n ,把坐標存入 b[k][0] b[k][1]中
後面 a[b[0][0]][b[0][1]]!='@'&&a[b[1][0]][b[1][1]]!='@'&&..這樣來判斷。
也可以在前面用個循環來判斷。

第二種方法,定義一個變數k 在你把 a[x][x]的'+'變為 '@'時 k++ a[x][x]的'@'變為 '+'時 k--
當k等於目的數時就結束。

④ 請問大佬如何用C語言實現推箱子的主菜單界面和游戲結束彈出框

可以自己用繪圖的方式來實現游戲主菜單,主菜單也可以用Dialog的方式來做,但是不友好。
游戲結束彈出框調用系統對話框就行了
MessageBox函數或MFC的AfxMessageBox函數。
建議去下載推箱子游戲的源代碼,自己慢慢研究研究,網路是這種代碼應該很好找。

望採納謝謝

⑤ c語言推箱子代碼

Here
you
are!
編譯通過。
/*
推箱子游戲
*/
#include
<dos.h>
#include
<stdio.h>
#include
<stdlib.h>
#include
<ctype.h>
#include
<conio.h>
#include
<bios.h>
#include
<alloc.h>
/*
定義二維數組ghouse來記錄屏幕上各點的狀態,
其中:0表示什麼都沒有,'b'表示箱子,'w'表示牆壁,'m'表示目的地,'i'表示箱子在目的地。
*/
char
ghouse[20][20];
/*
以下函數為直接寫屏函數,很酷的函數哦!是我朋友告訴我的。
*/
char
far
*screen=(char
far*
)0xb8000000;
void
putchxy(int
y,int
x,char
ch,char
fc,char
bc)
{
screen[(x*160)+(y<<1)+0]=ch;
screen[(x*160)+(y<<1)+1]=(bc*16)+fc;
}
/*
定義判斷是否勝利的數據結構
*/
typedef
struct
winer
{
int
x,y;
struct
winer
*p;
}winer;
/*
箱子位置的數據結構
*/
typedef
struct
boxs
{
int
x,y;
struct
boxs
*next;
}boxs;
/*
在特定的坐標上畫牆壁並用數組記錄狀態的函數
*/
void
printwall(int
x,int
y)
{
putchxy(y-1,x-1,219,MAGENTA,BLACK);
ghouse[x][y]='w';
}
/*
在特定的坐標上畫箱子並用數組記錄狀態的函數
*/
void
printbox(int
x,int
y)
{
putchxy(y-1,x-1,10,WHITE,BLACK);
ghouse[x][y]='b';
}
/*
在特定的坐標上畫目的地並用數組記錄狀態的函數
*/
void
printwhither1(int
x,int
y,winer
**win,winer
**pw)
{
winer
*qw;
putchxy(y-1,x-1,'*',YELLOW,BLACK);
ghouse[x][y]='m';
if(*win==NULL)
{
*win=*pw=qw=(winer*
)malloc(sizeof(winer));
(*pw)->x=x;(*pw)->y=y;(*pw)->p=NULL;
}
else
{
qw=(winer*
)malloc(sizeof(winer));
qw->x=x;qw->y=y;(*pw)->p=qw;(*pw)=qw;qw->p=NULL;
}
}
/*
在特定的坐標上畫目的地並用數組記錄狀態的函數
*/
void
printwhither(int
x,int
y)
{
putchxy(y-1,x-1,'*',YELLOW,BLACK);
ghouse[x][y]='m';
}
/*
在特定的坐標上畫人的函數
*/
void
printman(int
x,int
y)
{
gotoxy(y,x);
_AL=02;_CX=01;_AH=0xa;
geninterrupt(0x10);
}
/*
在特定的坐標上畫箱子在目的地上並用數組記錄狀態的函數
*/
void
printboxin(int
x,int
y)
{
putchxy(y-1,x-1,10,YELLOW,BLACK);
ghouse[x][y]='i';
}
/*
初始化函數,初始化數組和屏幕
*/
void
init()
{
int
i,j;
system("cls");
for(i=0;i<20;i++)
for(j=0;j<20;j++)
ghouse[i][j]=0;
_AL=3;
_AH=0;
geninterrupt(0x10);
gotoxy(40,4);
printf("Welcome
to
push
box
world!");
gotoxy(40,6);
printf("Press
up,down,left,right
to
play.");
gotoxy(40,8);
printf("Press
Esc
to
quit
it.");
gotoxy(40,10);
printf("Press
space
to
reset
the
game.");
gotoxy(40,12);
printf("April
30th
2004.");
}
/*
第一關的圖象初始化
*/
winer
*inithouse1()
{
int
x,y;
winer
*win=NULL,*pw;
gotoxy(8,2);
printf("Level
No.1");
for(x=1,y=5;y<=9;y++)
printwall(x+4,y+10);
for(y=5,x=2;x<=5;x++)
printwall(x+4,y+10);
for(y=9,x=2;x<=5;x++)
printwall(x+4,y+10);
for(y=1,x=3;x<=8;x++)
printwall(x+4,y+10);
for(x=3,y=3;x<=5;x++)
printwall(x+4,y+10);
for(x=5,y=8;x<=9;x++)
printwall(x+4,y+10);
for(x=7,y=4;x<=9;x++)
printwall(x+4,y+10);
for(x=9,y=5;y<=7;y++)
printwall(x+4,y+10);
for(x=8,y=2;y<=3;y++)
printwall(x+4,y+10);
printwall(5+4,4+10);
printwall(5+4,7+10);
printwall(3+4,2+10);
printbox(3+4,6+10);
printbox(3+4,7+10);
printbox(4+4,7+10);
printwhither1(4+4,2+10,&win,&pw);
printwhither1(5+4,2+10,&win,&pw);
printwhither1(6+4,2+10,&win,&pw);
printman(2+4,8+10);
return
win;
}
/*
第三關的圖象初始化
*/
winer
*inithouse3()
{int
x,y;
winer
*win=NULL,*pw;
gotoxy(8,3);
printf("Level
No.3");
for(x=1,y=2;y<=8;y++)
printwall(x+4,y+10);
for(x=2,y=2;x<=4;x++)
printwall(x+4,y+10);
for(x=4,y=1;y<=3;y++)
printwall(x+4,y+10);
for(x=5,y=1;x<=8;x++)
printwall(x+4,y+10);
for(x=8,y=2;y<=5;y++)
printwall(x+4,y+10);
for(x=5,y=5;x<=7;x++)
printwall(x+4,y+10);
for(x=7,y=6;y<=9;y++)
printwall(x+4,y+10);
for(x=3,y=9;x<=6;x++)
printwall(x+4,y+10);
for(x=3,y=6;y<=8;y++)
printwall(x+4,y+10);
printwall(2+4,8+10);
printwall(5+4,7+10);
printbox(6+4,3+10);
printbox(4+4,4+10);
printbox(5+4,6+10);
printwhither1(2+4,5+10,&win,&pw);
printwhither1(2+4,6+10,&win,&pw);
printwhither1(2+4,7+10,&win,&pw);
printman(2+4,4+10);
return
win;
}
/*
第二關的圖象初始化
*/
winer
*inithouse2()
{int
x,y;
winer
*win=NULL,*pw;
gotoxy(8,2);
printf("Level
No.2");
for(x=1,y=4;y<=7;y++)
printwall(x+4,y+10);
for(x=2,y=2;y<=4;y++)
printwall(x+4,y+10);
for(x=2,y=7;x<=4;x++)
printwall(x+4,y+10);
for(x=4,y=1;x<=8;x++)
printwall(x+4,y+10);
for(x=8,y=2;y<=8;y++)
printwall(x+4,y+10);
for(x=4,y=8;x<=8;x++)
printwall(x+4,y+10);
for(x=4,y=6;x<=5;x++)
printwall(x+4,y+10);
for(x=3,y=2;x<=4;x++)
printwall(x+4,y+10);
for(x=4,y=4;x<=5;x++)
printwall(x+4,y+10);
printwall(6+4,3+10);
printbox(3+4,5+10);
printbox(6+4,6+10);
printbox(7+4,3+10);
printwhither1(5+4,7+10,&win,&pw);
printwhither1(6+4,7+10,&win,&pw);
printwhither1(7+4,7+10,&win,&pw);
printman(2+4,6+10);
return
win;
}
/*
第四關的圖象初始化
*/
winer
*inithouse4()
{int
x,y;
winer
*win=NULL,*pw;
gotoxy(8,2);
printf("Level
No.4");
for(x=1,y=1;y<=6;y++)
printwall(x+4,y+10);
for(x=2,y=7;y<=8;y++)
printwall(x+4,y+10);
for(x=2,y=1;x<=7;x++)
printwall(x+4,y+10);
for(x=7,y=2;y<=4;y++)
printwall(x+4,y+10);
for(x=6,y=4;y<=9;y++)
printwall(x+4,y+10);
for(x=3,y=9;x<=5;x++)
printwall(x+4,y+10);
for(x=3,y=3;y<=4;y++)
printwall(x+4,y+10);
printwall(3+4,8+10);
printbox(3+4,5+10);
printbox(4+4,4+10);
printbox(4+4,6+10);
printbox(5+4,5+10);
printbox(5+4,3+10);
printwhither1(3+4,7+10,&win,&pw);
printwhither1(4+4,7+10,&win,&pw);
printwhither1(5+4,7+10,&win,&pw);
printwhither1(4+4,8+10,&win,&pw);
printwhither1(5+4,8+10,&win,&pw);
printman(2+4,2+10);
return
win;
}
/*
移動在空地上的箱子到空地上
*/
movebox(int
x,int
y,char
a)
{switch(a)
{
case
'u':ghouse[x-1][y]=0;printf("
");
printbox(x-2,y);printman(x-1,y);
ghouse[x-2][y]='b';break;
case
'd':ghouse[x+1][y]=0;printf("
");
printbox(x+2,y);printman(x+1,y);
ghouse[x+2][y]='b';break;
case
'l':ghouse[x][y-1]=0;printf("
");
printbox(x,y-2);printman(x,y-1);
ghouse[x][y-2]='b';break;
case
'r':ghouse[x][y+1]=0;printf("
");
printbox(x,y+2);printman(x,y+1);
ghouse[x][y+2]='b';break;
default:
break;
}
}
/*
移動在目的地上的箱子到空地上
*/
moveinbox(int
x,int
y,char
a)
{switch(a)
{
case
'u':ghouse[x-1][y]='m';printf("
");
printbox(x-2,y);printman(x-1,y);
ghouse[x-2][y]='b';break;
case
'd':ghouse[x+1][y]='m';printf("
");
printbox(x+2,y);printman(x+1,y);
ghouse[x+2][y]='b';break;
case
'l':ghouse[x][y-1]='m';printf("
");
printbox(x,y-2);printman(x,y-1);
ghouse[x][y-2]='b';break;
case
'r':ghouse[x][y+1]='m';printf("
");
printbox(x,y+2);printman(x,y+1);
ghouse[x][y+2]='b';break;
default:
break;
}
}
/*
移動在空地上的箱子到目的地上
*/
moveboxin(int
x,int
y,char
a)
{switch(a)
{
case
'u':ghouse[x-1][y]=0;printf("
");
printboxin(x-2,y);printman(x-1,y);
ghouse[x-2][y]='i';break;
case
'd':ghouse[x+1][y]=0;printf("
");
printboxin(x+2,y);printman(x+1,y);
ghouse[x+2][y]='i';break;
case
'l':ghouse[x][y-1]=0;printf("
");
printboxin(x,y-2);printman(x,y-1);
ghouse[x][y-2]='i';break;
case
'r':ghouse[x][y+1]=0;printf("
");
printboxin(x,y+2);printman(x,y+1);
ghouse[x][y+2]='i';break;
default:
break;
}
}
/*
移動在目的地上的箱子到目的地
*/
moveinboxin(int
x,int
y,char
a)
{switch(a)
{
case
'u':ghouse[x-1][y]='m';printf("
");
printboxin(x-2,y);printman(x-1,y);
ghouse[x-2][y]='i';break;
case
'd':ghouse[x+1][y]='m';printf("
");
printboxin(x+2,y);printman(x+1,y);
ghouse[x+2][y]='i';break;
case
'l':ghouse[x][y-1]='m';printf("
");
printboxin(x,y-2);printman(x,y-1);
ghouse[x][y-2]='i';break;
case
'r':ghouse[x][y+1]='m';printf("
");
printboxin(x,y+2);printman(x,y+1);
ghouse[x][y+2]='i';break;
default:
break;
}
}
/*
判斷特定的坐標上的狀態
*/
int
judge(int
x,int
y)
{int
i;
switch(ghouse[x][y])
{
case
0:
i=1;break;
case
'w':
i=0;break;
case
'b':
i=2;break;
case
'i':
i=4;break;
case
'm':
i=3;break;
default:
break;
}
return
i;
}
/*
處理按下鍵盤後,人物移動的主函數
*/
move(int
x,int
y,char
a)
{switch(a)
{
case
'u':if(!judge(x-1,y))
{gotoxy(y,x);break;}
else
if(judge(x-1,y)==1||judge(x-1,y)==3)
{if(judge(x,y)==3)
{
printwhither(x,y);printman(x-1,y);break;}
else
{printf("
");printman(x-1,y);break;}
}
else
if(judge(x-1,y)==2)
{
if(judge(x-2,y)==1)
{movebox(x,y,'u');
if(judge(x,y)==3)
printwhither(x,y);
gotoxy(y,x-1);
}
else
if(judge(x-2,y)==3)
{
moveboxin(x,y,'u');
if(judge(x,y)==3)
printwhither(x,y);
gotoxy(y,x-1);
}
else
gotoxy(y,x);
break;
}
else
if(judge(x-1,y)==4)
{
if(judge(x-2,y)==1)
{moveinbox(x,y,'u');
if(judge(x,y)==3)
printwhither(x,y);gotoxy(y,x-1);
}
else
if(judge(x-2,y)==3)
{
moveinboxin(x,y,'u');
if(judge(x,y)==3)
printwhither(x,y);gotoxy(y,x-1);
}
else
gotoxy(y,x);
break;
}
case
'd':if(!judge(x+1,y))
{gotoxy(y,x);break;}
else
if(judge(x+1,y)==1||judge(x+1,y)==3)
{if(judge(x,y)==3)
{
printwhither(x,y);printman(x+1,y);break;}
else
{printf("
");printman(x+1,y);break;}
}
else
if(judge(x+1,y)==2)
{
if(judge(x+2,y)==1)
{movebox(x,y,'d');
if(judge(x,y)==3)
printwhither(x,y);gotoxy(y,x+1);
}
else
if(judge(x+2,y)==3)
{moveboxin(x,y,'d');
if(judge(x,y)==3)
printwhither(x,y);gotoxy(y,x+1);
}
else
gotoxy(y,x);
break;
}
else
if(judge(x+1,y)==4)
{
if(judge(x+2,y)==1)
{moveinbox(x,y,'d');
if(judge(x,y)==3)
printwhither(x,y);gotoxy(y,x+1);
}
else
if(judge(x+2,y)==3)
{moveinboxin(x,y,'d');
if(judge(x,y)==3)
printwhither(x,y);gotoxy(y,x+1);
}
else
gotoxy(y,x);
break;
}
case
'l':if(!judge(x,y-1))
{gotoxy(y,x);break;}
else
if(judge(x,y-1)==1||judge(x,y-1)==3)
{if(judge(x,y)==3)
{
printwhither(x,y);printman(x,y-1);break;}
else
{printf("
");printman(x,y-1);break;}
}
else
if(judge(x,y-1)==2)
{
if(judge(x,y-2)==1)
{movebox(x,y,'l');
if(judge(x,y)==3)
printwhither(x,y);
gotoxy(y-1,x);
}
else
if(judge(x,y-2)==3)
{moveboxin(x,y,'l');
if(judge(x,y)==3)
printwhither(x,y);
gotoxy(y-1,x);
}
else
gotoxy(y,x);
break;
}
else
if(judge(x,y-1)==4)
{
if(judge(x,y-2)==1)
{moveinbox(x,y,'l');
if(judge(x,y)==3)
printwhither(x,y);
gotoxy(y-1,x);
}
else
if(judge(x,y-2)==3)
{moveinboxin(x,y,'l');
if(judge(x,y)==3)
printwhither(x,y);
gotoxy(y-1,x);
}
else
gotoxy(y,x);
break;
}
case
'r':if(!judge(x,y+1))
{gotoxy(y,x);break;}
else
if(judge(x,y+1)==1||judge(x,y+1)==3)
{if(judge(x,y)==3)
{printwhither(x,y);printman(x,y+1);break;}
else
{printf("
");printman(x,y+1);break;}
}
else
if(judge(x,y+1)==2)
{
if(judge(x,y+2)==1)
{movebox(x,y,'r');
if(judge(x,y)==3)
printwhither(x,y);
gotoxy(y+1,x);
}
else
if(judge(x,y+2)==3)
{moveboxin(x,y,'r');
if(judge(x,y)==3)
printwhither(x,y);
gotoxy(y+1,x);
}
else
gotoxy(y,x);
break;
}
else
if(judge(x,y+1)==4)
{
if(judge(x,y+2)==1)
{moveinbox(x,y,'r');
if(judge(x,y)==3)
printwhither(x,y);
gotoxy(y+1,x);
}
else
if(judge(x,y+2)==3)
{moveinboxin(x,y,'r');
if(judge(x,y)==3)
printwhither(x,y);
gotoxy(y+1,x);
}
else
gotoxy(y,x);
break;
}
default:
break;
}
}
/*
按下空格鍵後,回到本關開頭的函數
*/
void
reset(int
i)
{switch(i)
{
case
0:
init();
inithouse1();break;
case
1:
init();
inithouse2();break;
case
2:
init();
inithouse3();break;
case
3:
init();
inithouse4();break;
default:break;
}
}
/*
主函數main
*/
main()
{int
key,x,y,s,i=0;
winer
*win,*pw;
_AL=3;_AH=0;
geninterrupt(0x10);
init();
win=inithouse1();
do{
_AH=3;
geninterrupt(0x10);
x=_DH+1;y=_DL+1;
while(bioskey(1)==0);
key=bioskey(0);
switch(key)
{
case
0x4800:move(x,y,'u');break;
/*
按下向上鍵後
*/
case
0x5000:move(x,y,'d');break;
/*
按下向下鍵後
*/
case
0x4b00:move(x,y,'l');break;
/*
按下向左鍵後
*/
case
0x4d00:move(x,y,'r');break;
/*
按下向右鍵後
*/
case
0x3920:reset(i);break;
/*
按下空格鍵後
*/
default:break;
}
s=0;
pw=win;
while(pw)
{
if(ghouse[pw->x][pw->y]=='m')
s++;
pw=pw->p;
}
if(s==0)
{
free(win);
gotoxy(25,2);
printf("Congratulate!
You
have
passed
Level
%d!",i+1);
getch();
i++;
switch(i)
{
case
1:
init();
win=inithouse2();break;
case
2:
init();
win=inithouse3();break;
case
3:
init();
win=inithouse4();break;
case
4:
gotoxy(8,14);
printf("Great!
You
have
passed
all
the
levels!
Press
any
key
to
quit!");
key=0x011b;getch();break;
default:
break;
}
}
}while(key!=0x011b);
_AL=3;
_AH=0;
geninterrupt(0x10);
}

⑥ 如何用C語言編寫一如圖模型的推箱子游戲的程序!

/*TC環境下編的*/
#include <dos.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <bios.h>
#include <alloc.h>

typedef struct winer
{
int x,y;
struct winer *p;
}winer;

char status [20][20];
char far *printScreen=(char far* )0xB8000000;

void putoutChar(int y,int x,char ch,char fc,char bc);
void printWall(int x, int y);
void printBox(int x, int y);
void printBoxDes(int x, int y);
void printDestination(int x, int y);
void printDestination1(int x,int y,winer **win,winer **pw);
void printMan(int x, int y);
void init();
winer *initStep1();
winer *initStep2();
winer *initStep3();
winer *initStep4();
void moveBoxSpacetoSpace(int x ,int y, char a);
void moveBoxDestoSpace(int x ,int y, char a) ;
void moveBoxSpacetoDes(int x, int y, char a);
void moveBoxDestoDes(int x, int y, char a);
int judge(int x, int y);
void move(int x, int y, char a);
void reset(int i);

void putoutChar(int y,int x,char ch,char fc,char bc)
{
printScreen[(x*160)+(y<<1)+0]=ch;
printScreen[(x*160)+(y<<1)+1]=(bc*16)+fc;
}
void printWall(int x,int y)
{
putoutChar(y-1,x-1,219,GREEN,BLACK);
status[x][y]='w';
}

void printBox(int x,int y)
{
putoutChar(y-1,x-1,10,WHITE,BLACK);
status[x][y]='b';
}

void printDestination1(int x,int y,winer **win,winer **pw)
{
winer *qw;
putoutChar(y-1,x-1,003,YELLOW,BLACK);
status[x][y]='m';
if(*win==NULL)
{
*win=*pw=qw=(winer* )malloc(sizeof(winer));
(*pw)->x=x;
(*pw)->y=y;
(*pw)->p=NULL;
}
else
{
qw=(winer* )malloc(sizeof(winer));
qw->x=x;
qw->y=y;
(*pw)->p=qw;
(*pw)=qw;qw->p=NULL;
}
}

void printDestination(int x,int y)
{
putoutChar(y-1,x-1,003,YELLOW,BLACK);
status[x][y]='m';
}

void printMan(int x,int y)
{
gotoxy(y,x);
_AL=02;
_CX=01;
_AH=0xa;
geninterrupt(0x10);
}

void printBoxDes(int x,int y)
{
putoutChar(y-1,x-1,10,YELLOW,BLACK);
status[x][y]='i';
}

void init()
{
int i,j;
for(i=0;i<20;i++)
for(j=0;j<20;j++)
status[i][j]=0;
_AL=3;
_AH=0;
geninterrupt(0x10);
gotoxy(40,4);
printf("Welcome to the box world!");
gotoxy(40,6);
printf("You can use up, down, left,");
gotoxy(40,8);
printf("right key to control it, or");
gotoxy(40,10);
printf("you can press Esc to quit it.");
gotoxy(40,12);
printf("Press space to reset the game.");
gotoxy(40,14);
printf("Wish you have a good time !");
gotoxy(40,16);
printf("April , 2007");

}
winer *initStep1()
{
int x;
int y;
winer *win=NULL;
winer *pw;
for(x=1,y=5;y<=9;y++)
printWall(x+4,y+10);
for(y=5,x=2;x<=5;x++)
printWall(x+4,y+10);
for(y=9,x=2;x<=5;x++)
printWall(x+4,y+10);
for(y=1,x=3;x<=8;x++)
printWall(x+4,y+10);
for(x=3,y=3;x<=5;x++)
printWall(x+4,y+10);
for(x=5,y=8;x<=9;x++)
printWall(x+4,y+10);
for(x=7,y=4;x<=9;x++)
printWall(x+4,y+10);
for(x=9,y=5;y<=7;y++)
printWall(x+4,y+10);
for(x=8,y=2;y<=3;y++)
printWall(x+4,y+10);
printWall(5+4,4+10);
printWall(5+4,7+10);
printWall(3+4,2+10);
printBox(3+4,6+10);
printBox(3+4,7+10);
printBox(4+4,7+10);
printDestination1(4+4,2+10,&win,&pw);
printDestination1(5+4,2+10,&win,&pw);
printDestination1(6+4,2+10,&win,&pw);
printMan(2+4,8+10);
return win;
}

winer *initStep2()
{
int x;
int y;
winer *win=NULL;
winer *pw;
for(x=1,y=4;y<=7;y++)
printWall(x+4,y+10);
for(x=2,y=2;y<=4;y++)
printWall(x+4,y+10);
for(x=2,y=7;x<=4;x++)
printWall(x+4,y+10);
for(x=4,y=1;x<=8;x++)
printWall(x+4,y+10);
for(x=8,y=2;y<=8;y++)
printWall(x+4,y+10);
for(x=4,y=8;x<=8;x++)
printWall(x+4,y+10);
for(x=4,y=6;x<=5;x++)
printWall(x+4,y+10);
for(x=3,y=2;x<=4;x++)
printWall(x+4,y+10);
for(x=4,y=4;x<=5;x++)
printWall(x+4,y+10);
printWall(6+4,3+10);
printBox(3+4,5+10);
printBox(6+4,6+10);
printBox(7+4,3+10);
printDestination1(5+4,7+10,&win,&pw);
printDestination1(6+4,7+10,&win,&pw);
printDestination1(7+4,7+10,&win,&pw);
printMan(2+4,6+10);
return win;
}
winer *initStep3()
{
int x;
int y;
winer *win=NULL;
winer *pw;
for(x=1,y=2;y<=8;y++)
printWall(x+4,y+10);
for(x=2,y=2;x<=4;x++)
printWall(x+4,y+10);
for(x=4,y=1;y<=3;y++)
printWall(x+4,y+10);
for(x=5,y=1;x<=8;x++)
printWall(x+4,y+10);
for(x=8,y=2;y<=5;y++)
printWall(x+4,y+10);
for(x=5,y=5;x<=7;x++)
printWall(x+4,y+10);
for(x=7,y=6;y<=9;y++)
printWall(x+4,y+10);
for(x=3,y=9;x<=6;x++)
printWall(x+4,y+10);
for(x=3,y=6;y<=8;y++)
printWall(x+4,y+10);
printWall(2+4,8+10);
printWall(5+4,7+10);
printBox(6+4,3+10);
printBox(4+4,4+10);
printBox(5+4,6+10);
printDestination1(2+4,5+10,&win,&pw);
printDestination1(2+4,6+10,&win,&pw);
printDestination1(2+4,7+10,&win,&pw);
printMan(2+4,4+10);
return win;
}

winer *initStep4()
{
int x;
int y;
winer *win=NULL;
winer *pw;
for(x=1,y=1;y<=6;y++)
printWall(x+4,y+10);
for(x=2,y=7;y<=8;y++)
printWall(x+4,y+10);
for(x=2,y=1;x<=7;x++)
printWall(x+4,y+10);
for(x=7,y=2;y<=4;y++)
printWall(x+4,y+10);
for(x=6,y=4;y<=9;y++)
printWall(x+4,y+10);
for(x=3,y=9;x<=5;x++)
printWall(x+4,y+10);
for(x=3,y=3;y<=4;y++)
printWall(x+4,y+10);
printWall(3+4,8+10);
printBox(3+4,5+10);
printBox(4+4,4+10);
printBox(4+4,6+10);
printBox(5+4,5+10);
printBox(5+4,3+10);
printDestination1(3+4,7+10,&win,&pw);
printDestination1(4+4,7+10,&win,&pw);
printDestination1(5+4,7+10,&win,&pw);
printDestination1(4+4,8+10,&win,&pw);
printDestination1(5+4,8+10,&win,&pw);
printMan(2+4,2+10);
return win;
}

void moveBoxSpacetoSpace(int x,int y,char a)
{
switch(a)
{
case 'u':
status[x-1][y]=0;
printf(" ");
printBox(x-2,y);
printMan(x-1,y);
status[x-2][y]='b';
break;
case 'd':
status[x+1][y]=0;
printf(" ");
printBox(x+2,y);
printMan(x+1,y);
status[x+2][y]='b';
break;
case 'l':
status[x][y-1]=0;
printf(" ");
printBox(x,y-2);
printMan(x,y-1);
status[x][y-2]='b';
break;
case 'r':
status[x][y+1]=0;
printf(" ");
printBox(x,y+2);
printMan(x,y+1);
status[x][y+2]='b';
break;
default:
break;
}
}

void moveBoxDestoSpace(int x,int y,char a)
{
switch(a)
{
case 'u':
status[x-1][y]='m';
printf(" ");
printBox(x-2,y);
printMan(x-1,y);
status[x-2][y]='b';
break;
case 'd':
status[x+1][y]='m';
printf(" ");
printBox(x+2,y);
printMan(x+1,y);
status[x+2][y]='b';
break;
case 'l':
status[x][y-1]='m';
printf(" ");
printBox(x,y-2);
printMan(x,y-1);
status[x][y-2]='b';
break;
case 'r':
status[x][y+1]='m';
printf(" ");
printBox(x,y+2);
printMan(x,y+1);
status[x][y+2]='b';
break;
default:
break;
}
}

void moveBoxSpacetoDes(int x,int y,char a)
{
switch(a)
{
case 'u':
status[x-1][y]=0;
printf(" ");
printBoxDes(x-2,y);
printMan(x-1,y);
status[x-2][y]='i';
break;
case 'd':
status[x+1][y]=0;
printf(" ");
printBoxDes(x+2,y);
printMan(x+1,y);
status[x+2][y]='i';
break;
case 'l':
status[x][y-1]=0;
printf(" ");
printBoxDes(x,y-2);
printMan(x,y-1);
status[x][y-2]='i';
break;
case 'r':
status[x][y+1]=0;
printf(" ");
printBoxDes(x,y+2);
printMan(x,y+1);
status[x][y+2]='i';
break;
default:
break;
}
}

void moveBoxDestoDes(int x,int y,char a)
{
switch(a)
{
case 'u':
status[x-1][y]='m';
printf(" ");
printBoxDes(x-2,y);
printMan(x-1,y);
status[x-2][y]='i';
break;
case 'd':
status[x+1][y]='m';
printf(" ");
printBoxDes(x+2,y);
printMan(x+1,y);
status[x+2][y]='i';
break;
case 'l':
status[x][y-1]='m';
printf(" ");
printBoxDes(x,y-2);
printMan(x,y-1);
status[x][y-2]='i';
break;
case 'r':
status[x][y+1]='m';
printf(" ");
printBoxDes(x,y+2);
printMan(x,y+1);
status[x][y+2]='i';
break;
default:
break;
}
}

int judge(int x,int y)
{
int i;
switch(status[x][y])
{
case 0:
i=1;
break;
case 'w':
i=0;
break;
case 'b':
i=2;
break;
case 'i':
i=4;
break;
case 'm':
i=3;
break;
default:
break;
}
return i;
}

void move(int x,int y,char a)
{
switch(a)
{
case 'u':
if(!judge(x-1,y))
{
gotoxy(y,x);
break;
}
else if(judge(x-1,y)==1||judge(x-1,y)==3)
{
if(judge(x,y)==3)
{
printDestination(x,y);
printMan(x-1,y);
break;
}
else
{
printf(" ");
printMan(x-1,y);
break;
}
}
else if(judge(x-1,y)==2)
{
if(judge(x-2,y)==1)
{
moveBoxSpacetoSpace(x,y,'u');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x-1);
}
else if(judge(x-2,y)==3)
{
moveBoxSpacetoDes(x,y,'u');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x-1);
}
else
gotoxy(y,x);
break;
}
else if(judge(x-1,y)==4)
{
if(judge(x-2,y)==1)
{
moveBoxDestoSpace(x,y,'u');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x-1);
}
else if(judge(x-2,y)==3)
{
moveBoxDestoDes(x,y,'u');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x-1);
}
else
gotoxy(y,x);
break;
}
case 'd':
if(!judge(x+1,y))
{
gotoxy(y,x);
break;
}
else if(judge(x+1,y)==1||judge(x+1,y)==3)
{
if(judge(x,y)==3)
{
printDestination(x,y);
printMan(x+1,y);
break;
}
else
{
printf(" ");
printMan(x+1,y);
break;
}
}
else if(judge(x+1,y)==2)
{
if(judge(x+2,y)==1)
{
moveBoxSpacetoSpace(x,y,'d');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x+1);
}
else if(judge(x+2,y)==3)
{
moveBoxSpacetoDes(x,y,'d');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x+1);
}
else
gotoxy(y,x);
break;
}
else if(judge(x+1,y)==4)
{
if(judge(x+2,y)==1)
{
moveBoxDestoSpace(x,y,'d');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x+1);
}
else if(judge(x+2,y)==3)
{
moveBoxDestoDes(x,y,'d');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x+1);
}
else
gotoxy(y,x);
break;
}
case 'l':
if(!judge(x,y-1))
{
gotoxy(y,x);
break;
}
else if(judge(x,y-1)==1||judge(x,y-1)==3)
{
if(judge(x,y)==3)
{
printDestination(x,y);
printMan(x,y-1);
break;
}
else
{
printf(" ");
printMan(x,y-1);
break;
}
}
else if(judge(x,y-1)==2)
{
if(judge(x,y-2)==1)
{
moveBoxSpacetoSpace(x,y,'l');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y-1,x);
}
else if(judge(x,y-2)==3)
{
moveBoxSpacetoDes(x,y,'l');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y-1,x);
}
else
gotoxy(y,x);
break;
}
else if(judge(x,y-1)==4)
{
if(judge(x,y-2)==1)
{
moveBoxDestoSpace(x,y,'l');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y-1,x);
}
else if(judge(x,y-2)==3)
{
moveBoxDestoDes(x,y,'l');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y-1,x);
}
else
gotoxy(y,x);
break;
}
case 'r':
if(!judge(x,y+1))
{
gotoxy(y,x);
break;
}
else if(judge(x,y+1)==1||judge(x,y+1)==3)
{
if(judge(x,y)==3)
{
printDestination(x,y);
printMan(x,y+1);
break;
}
else
{
printf(" ");
printMan(x,y+1);
break;
}
}
else if(judge(x,y+1)==2)
{
if(judge(x,y+2)==1)
{
moveBoxSpacetoSpace(x,y,'r');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y+1,x);
}
else if(judge(x,y+2)==3)
{
moveBoxSpacetoDes(x,y,'r');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y+1,x);
}
else
gotoxy(y,x);
break;
}
else if(judge(x,y+1)==4)
{
if(judge(x,y+2)==1)
{
moveBoxDestoSpace(x,y,'r');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y+1,x);
}
else if(judge(x,y+2)==3)
{
moveBoxDestoDes(x,y,'r');
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y+1,x);
}
else
gotoxy(y,x);
break;
}
default:
break;
}
}

void reset(int i)
{
switch(i)
{
case 0:
init();
initStep1();
break;
case 1:
init();
initStep2();
break;
case 2:
init();
initStep3();
break;
case 3:
init();
initStep4();
break;
default:
break;
}
}

void main()
{
int key;
int x;
int y;
int s;
int i=0;
winer *win;
winer *pw;
_AL=3;
_AH=0;
geninterrupt(0x10);
init();
win=initStep1();
do{
_AH=3;
geninterrupt(0x10);
x=_DH+1;
y=_DL+1;
while(bioskey(1)==0);
key=bioskey(0);
switch(key)
{
case 0x4800:
move(x,y,'u');
break;
case 0x5000:
move(x,y,'d');
break;
case 0x4b00:
move(x,y,'l');
break;
case 0x4d00:
move(x,y,'r');
break;
case 0x3920:
reset(i);
break;
default:
break;
}
s=0;
pw=win;
while(pw)
{
if(status[pw->x][pw->y]=='m')
s++;
pw=pw->p;
}
if(s==0)
{
free(win);
gotoxy(25,2);
printf("congratulate! You have done this step!");
getch();
i++;
switch(i)
{
case 1:
init();
win=initStep2();
break;
case 2:
init();
win=initStep3();
break;
case 3:
init();
win=initStep4();
break;
case 4:
gotoxy(15,21);
printf("Congratulation! \n");
gotoxy(15,23);
printf("You have done all the steps, Welcome to play again!");
key=0x011b;
getch();
break;
default:
break;
}
}

}while(key!=0x011b);
_AL=3;
_AH=0;
geninterrupt(0x10);
}

⑦ 關於C語言推箱子代碼,這個代碼實現的是什麼功能

C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言制定了一套完整的美國國家標准語法,稱為ANSI C,作為C語言最初的標准。 目前2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)發布的C11標準是C語言的第三個官方標准,也是C語言的最新標准,該標准更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢字編程。
C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。
其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

⑧ 簡單的搬運工C語言代碼

程序在tc3.0下編譯通過. 回車鍵選關,我只做了兩關, r鍵重新開始 p鍵悔步,只能悔五步啊.不過你可以改#define STEPMAX的值 #define MAX 2 /*游戲中總關數*/#define STARTX 180#define STARTY 80#define ...
程序在tc3.0下編譯通過. 回車鍵

選關,我只做了兩關, r鍵重新開始

p鍵悔步,只能悔五步啊.不過你可以

改#define STEPMAX的值

#define MAX 2 /*游戲中總關數*/
#define STARTX 180
#define STARTY 80
#define BKCOLOR BLACK
#define MANCOLOR RED
#define OBJECTCOLOR YELLOW
#define TIMEINT 2
#define STARNUM 300
#define STEPMAX 5
#include<sing.h>
#include<bios.h>
#include<sio.h>
#include<dos.h>
#include<graphics.h>
#include<conio.h>
#include<time.h>
#include<slib.h>
#include<sio.h>
#define Key_R 0x1372
#define Key_Up 0x4800
#define Key_Enter 0x1c0d
#define Key_Down 0x5000
#define Key_P 0x1970
#define Key_Esc 0x11b
#define Key_Right 0x4d00
#define Key_Left 0x4b00

typedef suct star
{
int x;
int y;
int c;
}Star;
Star s;

typedef suct record
{
char name;
int second;
suct time t;
suct date d;
}Record;
Record r;

typedef suct c
{
int x;
int y;
}Add;

typedef suct a
{
int x;
int y;
}Player;
Player p;

char name; /*進入游戲時記錄玩家的姓名*/
time_t t1,t2; /*游戲結束時的時間*/
int Ide; /*開始進入游戲時,選擇菜單時返的功能號(1,2,3)*/
int MissionNum; /*玩家正在玩的關數*/
int BoxNum; /*目的地的個數*/
int Key; /*玩家按鍵*/
int map; /*地圖.(空=0),(人=1),(箱子=2),(牆=3),(目的地=4),(人 目的地=5),(箱子 目的地=6)*/
int StepNum;
int DirectionKey; /*用來表示方向鍵最後一次按鍵*/
int BoxMove;
int Step;

/*函數定義*/
void InputName();
void Init();
void MainMenu();
void JudgeRecord();
void WriteRecord();
void JudgeIde();
void DrawMenu(int );
void Game();
void InitMission(int );
void NextMission();
void InitPic(int ,int ,int );
int Move(Add );
void DrawWall(int ,int );
void DrawBack(int ,int );
void DrawBox(int ,int );
void DrawObject(int ,int );
void DrawMan(int ,int );
void DrawStar();
int JudgeWin();
void InitMission1();
void InitMission2();
int TimeCome();
void ChangeStar();
void InputName();
void ViewRecords();
void DeleteRecords();
void RegisterStep();
void ReverselyMove();
void MoveBack(Add );

void main()
{
InputName();
Init(); /*驅動顯卡*/
srand(time(&t1));
MainMenu(); /*畫開始菜單(1.start game 2.view records 3.delete records 4.exit game)*/
}

void InputName()
{
char c;
clrscr();
do
{
printf("\n\nPlease input your name:");
scanf("%s",name);
printf("Are you sure the name right(Y/N):");
do
{
c=getch();
}while(c!='Y'&&c!='y'&&c!='N'&&c!='n');
}while(c!='Y'&&c!='y');
}
void Init()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
}

void MainMenu()
{
setbkcolor(BKCOLOR);
cleardevice();
/*DrawStar(); /*畫開始菜單的背景畫面*/
DrawStar();
Ide=0,Key=0;
DrawMenu(Ide);
do
{
if(bioskey(1)) /*有鍵按下則處理按鍵*/
{
Key=bioskey(0);
switch(Key)
{
case Key_Down: {Ide ;Ide=Ide%4;DrawMenu(Ide);break;}
case Key_Up: {Ide--;Ide=(Ide 4)%4;DrawMenu(Ide);break;}
}
}
else {if(TimeCome()) ChangeStar();} /*改變背景*/
}while(Key!=Key_Enter);
JudgeIde(); /*根據Ide運行不同的程序*/
}

void JudgeIde()
{
switch(Ide)
{
case 0:Game();break;
case 1:{ViewRecords();bioskey(0);MainMenu();break;}
case 2:{DeleteRecords();ViewRecords();bioskey(0);MainMenu();break;}
case 3:exit(0);
}
}

void Game()
{
int i,j,flag;
Add ad;
MissionNum=0;
NextMission();
do
{
flag=0;
Key=bioskey(0);
switch(Key)
{
case Key_Enter:{NextMission();time(&t1);break;}
case Key_Up:{ad.x=-1;ad.y=0;flag=1;DirectionKey=Key;break;}
case Key_Down:{ad.x=1;ad.y=0;flag=1;DirectionKey=Key;break;}
case Key_Left:{ad.x=0;ad.y=-1;flag=1;DirectionKey=Key;break;}
case Key_Right:{ad.x=0;ad.y=1;flag=1;DirectionKey=Key;break;}
case Key_R:{MissionNum--;NextMission();break;}
case Key_Esc:{MainMenu();break;}
case Key_P:{ReverselyMove();break;}
}
if(flag==1)
{if(Move(ad)) {RegisterStep(); if(JudgeWin()) {JudgeRecord();NextMission();}}}
}while(1);
}

void InitMission(int n)
{
int i,j;
for(i=0;i<10;i )
for(j=0;j<10;j )
map=0;
switch(n)
{
case 1:InitMission1();break; /*第一關*/
case 2:InitMission2();break; /*第二關*/
}
}

void InitPic(int n,int i,int j)
{
switch(n)
{
case 0:DrawBack(i,j);break;
case 1:DrawMan(i,j);break;
case 2:DrawBo

x(i,j);break;
case 3:DrawWall(i,j);break;
case 4:DrawObject(i,j);break;
case 5:DrawMan(i,j);break;
case 6:DrawBox(i,j);break;
}
}

void NextMission()
{
int i,j;
if(MissionNum 1>MAX) MissionNum=1;
else MissionNum ;
InitMission(MissionNum);
setbkcolor(BKCOLOR);
cleardevice();
for(i=0;i<10;i )
for(j=0;j<10;j )
InitPic(map,i,j);
switch(MissionNum)
{
case 1:outtextxy(200,230,"Mission 1");break;
case 2:outtextxy(200,230,"Mission 2");break;
}
time(&t1);
for(i=0;i<STEPMAX;i )
{Step=BoxMove=0;}
StepNum=0;
}

int Move(Add a)
{
int flag;
int i=StepNum%STEPMAX;
switch(map) /*看下一位置為什麼*/
{
case 0:{map-=1;InitPic(map,p.x,p.y);
p.x=p.x a.x;p.y=p.y a.y;
map =1;InitPic(map,p.x,p.y);flag=1;break;}
case 2:{if(map==0||map==4)
{map-=1;map=1;map =2;
InitPic(map,p.x,p.y);
InitPic(map,p.x a.x,p.y a.y);
InitPic(map,p.x 2*a.x,p.y 2*a.y);
p.x=p.x a.x;p.y=p.y a.y;flag=1;BoxMove=1;}
else flag=0;
break;}
case 3:flag=0;break;
case 4:{map-=1;InitPic(map,p.x,p.y);
p.x=p.x a.x;p.y=p.y a.y;
map =1;InitPic(map,p.x,p.y);flag=1;break;}
case 6:{if(map==0||map==4)
{map-=1;map=5;map =2;
InitPic(map,p.x,p.y);
InitPic(map,p.x a.x,p.y a.y);
InitPic(map,p.x 2*a.x,p.y 2*a.y);
p.x=p.x a.x;p.y=p.y a.y;flag=1;BoxMove=1;}
else flag=0;
break;}
}
return flag;
}

void DrawWall(int i,int j)
{
DrawBack(i,j);
setfillstyle(9,1);
bar(STARTX 20*j-9,STARTY 20*i-9,STARTX 20*j 9,STARTY 20*i 9);
}

void DrawMan(int i,int j)
{
DrawBack(i,j);
setcolor(MANCOLOR);
circle(STARTX 20*j,STARTY 20*i,9);
arc(STARTX 20*j-3,STARTY 20*i-2,20,160,3);
arc(STARTX 20*j 4,STARTY 20*i-2,20,160,3);
arc(STARTX 20*j,STARTY 20*i-2,220,320,7);
}

void DrawBack(int i,int j)
{
setfillstyle(1,BKCOLOR);
bar(STARTX 20*j-9,STARTY 20*i-9,STARTX 20*j 9,STARTY 20*i 9);
}

void DrawObject(int i,int j)
{
DrawBack(i,j);
setcolor(OBJECTCOLOR);
line(STARTX 20*j-9,STARTY 20*i,STARTX 20*j 9,STARTY 20*i);
line(STARTX 20*j-9,STARTY 20*i-9,STARTX 20*j 9,STARTY 20*i 9);
line(STARTX 20*j-9,STARTY 20*i 9,STARTX 20*j 9,STARTY 20*i-9);
}

void DrawBox(int i,int j)
{
DrawBack(i,j);
setfillstyle(9,3);
bar(STARTX 20*j-9,STARTY 20*i-9,STARTX 20*j 9,STARTY 20*i 9);
}

void DrawMenu(int j)
{
int n;
char *s={"1.Start Game","2.View Records","3.Delete Records","4.Exit Game"};
settextstyle(0,0,1);
setcolor(GREEN);
for(n=0;n<4;n )
outtextxy(250,170 n*20,s);
setcolor(RED);
outtextxy(250,170 j*20,s);
}

void DrawStar()
{
int w,h,i,dotx,doty,color,maxcolor;
w=getmaxx();
h=getmaxy();
maxcolor=getmaxcolor();
for(i=0;i<STARNUM;i )
{
s.x=1 random(w-1);
s.y=1 random(h-1);
s.c=random(maxcolor);
putpixel(s.x,s.y,s.c);
}
}
void ChangeStar()
{
int i,maxcolor;
maxcolor=getmaxcolor();
for(i=0;i<STARNUM;i )
{
s.c=random(maxcolor);
putpixel(s.x,s.y,s.c);
}
}

int TimeCome()
{

static long tm, old;
tm=biostime(0,tm);
if(tm-old<TIMEINT) return 0;
else
{
old=tm; return 1;
}
}

int JudgeWin()
{
int n=0,i,j;
for(i=0;i<10;i )
for(j=0;j<10;j )
if(map==6) n ;
if(n==BoxNum) return 1;
else return 0;
}

void InitMission1() /*第九關*/
{
int i,j;
for(i=0;i<10;i )
for(j=0;j<10;j )
map=0;
for(i=0;i<=5;i )
map=3;
for(i=5;i<=7;i )
{map=map=3;}
for(i=1;i<=4;i )
{map=map=map=3;}
map=map=map=3;
for(i=2;i<=4;i )
map=2;
map=map=2;
for(i=2;i<=3;i )
{map=map=4;}
map=4;
p.x=3;p.y=5;
map=1;
BoxNum=5;
}

void InitMission2()
{
int i,j;
for(i=0;i<10;i )
for(j=0;j<10;j )
map=0;
for(i=1;i<=5;i )
{map=map=3;}
for(i=2;i<=4;i )
{map=map=map=map=3;}
map=map=map=map=map=map=3;
map=map=map=map=2;
map=map=map=map=4;
p.x=1;p.y=3;
map=1;
BoxNum=4;
}

void ViewRecords()
{
FILE *fp;
int i;
setbkcolor(BKCOLOR);
cleardevice();
if((fp=fopen("record","r"))==NULL)
{
printf("\nerror on open file!");
getch();
exit(1);
}
gotoxy(1,1);
printf("\n\t\t\tRecord Information\n");
printf("Record-holder Achievement(s)\t Time(h:m:s)\t\tDate(y/m/d)");
for(i=0;i<MAX;i )
{fseek(fp,i*sizeof(Record),0);
fread(&r,sizeof(Record),1,fp);
printf("\n%-10s\t%d\t\t d:d:d\t\td/d/d",r.name,r.second,r.t.ti_hour,r.t.ti_min,r.t.ti_sec,r.d.da_year,r.d.da_mon,r.d.da_day);}
fclose(fp);
gotoxy(10,25);
printf("Press any key to return mainmenu...");
}

void DeleteRecords()
{
int i;
FILE *fp;
fp=fopen("record","w");
for(i=0;i<MAX;i )
{
scpy(r.name,"nameless");
r.second=0;
gettime(&r.t);
geate(&r.d);
}
for(i=0;i<MAX;i )
fwrite(&r,sizeof(Record),1,fp);
fclose(fp);
}

void JudgeRecord()
{
int i=MissionNum-1;
time(&t2);
if(r.second==0||difftime(t2,t1)<r.second)
{
gotoxy(10,3);printf("\t\tYou have broken the record");
r.second=difftime(t2,t1);
scpy(r.name,name);
gettime(&r.t);
geate(&r.d);
WriteRecord();
}
else
{gotoxy(10,3);printf("\t\tYou have pass this mission");}
gotoxy(10,4);
printf("\t\tpress any key continue...");
getch();
getch();
}

void WriteRecord()
{
FILE *fp;
int i=MissionNum-1;
fp=fopen("record","rt ");
fseek(fp,i*sizeof(Record),0);
fwrite(&r,sizeof(Record),1,fp);
fclose(fp);
}

void RegisterStep()
{
int i;
StepNum ;
i=(StepNum-1)%STEPMAX;
Step=DirectionKey;
}

void ReverselyMove()
{
int i;
Add ad;
i=(StepNum-1)%STEPMAX;
if(Step==0) return;
else
{
switch(Step)
{
case Key_Up:{ad.x=1;ad.y=0;MoveBack(ad);break;}
case Key_Down:{ad.x=-1;ad.y=0;MoveBack(ad);break;}
case Key_Left:{ad.x=0;ad.y=1;MoveBack(ad);break;}
case Key_Right:{ad.x=0;ad.y=-1;MoveBack(ad);break;}
}
StepNum--;Step=0;BoxMove=0;
}
}

void MoveBack(Add a) /*一定可以移動*/
{
int i=(StepNum-1)%STEPMAX;
if(BoxMove==0)
{
map-=1;InitPic(map,p.x,p.y);
p.x=p.x a.x;p.y=p.y a.y;
map =1;InitPic(map,p.x,p.y);
}
else if(BoxMove==1)
{
map-=2;InitPic(map,p.x-a.x,p.y-a.y);
map =1;InitPic(map,p.x,p.y);
p.x=p.x a.x;p.y=p.y a.y;
map =1;InitPic(map,p.x,p.y);
}
}

點這里下載

p=map=map=4;
p.x=1;p.y=3;
map=1;
BoxNum=4;
}

void ViewRecords()
{
FILE *fp;
int i;
setbkcolor(BKCOLOR);
cleardevice();
if((fp=fopen("record","r"))==NULL)
{
printf("\nerror on open file!");
getch();
exit(1);
}
gotoxy(1,1);
printf("\n\t\t\tRecord Information\n");
printf("Record-holder Achievement(s)\t Time(h:m:s)\t\tDate(y/m/d)");
for(i=0;i<MAX;i )
{fseek(fp,i*sizeof(Record),0);
fread(&r,sizeof(Record),1,fp);
printf("\n%-10s\t%d\t\t d:d:d\t\td/d/d",r.name,r.second,r.t.ti_hour,r.t.ti_min,r.t.ti_sec,r.d.da_year,r.d.da_mon,r.d.da_day);}
fclose(fp);
gotoxy(10,25);
printf("Press any key to return mainmenu...");
}

void DeleteRecords()
{
int i;
FILE *fp;
fp=fopen("record","w");
for(i=0;i<MAX;i )
{
scpy(r.name,"nameless");
r.second=0;
gettime(&r.t);
geate(&r.d);
}
for(i=0;i<MAX;i )
fwrite(&r,sizeof(Record),1,fp);
fclose(fp);
}

void JudgeRecord()
{
int i=MissionNum-1;
time(&t2);
if(r.second==0||difftime(t2,t1)<r.second)
{
gotoxy(10,3);printf("\t\tYou have broken the record");
r.second=difftime(t2,t1);
scpy(r.name,name);
gettime(&r.t);
geate(&r.d);
WriteRecord();
}
else
{gotoxy(10,3);printf("\t\tYou have pass this mission");}
gotoxy(10,4);
printf("\t\tpress any key continue...");
getch();
getch();
}

void WriteRecord()
{
FILE *fp;
int i=MissionNum-1;
fp=fopen("record","rt ");
fseek(fp,i*sizeof(Record),0);
fwrite(&r,sizeof(Record),1,fp);
fclose(fp);
}

void RegisterStep()
{
int i;
StepNum ;
i=(StepNum-1)%STEPMAX;
Step=DirectionKey;
}

void ReverselyMove()
{
int i;
Add ad;
i=(StepNum-1)%STEPMAX;
if(Step==0) return;
else
{
switch(Step)
{
case Key_Up:{ad.x=1;ad.y=0;MoveBack(ad);break;}
case Key_Down:{ad.x=-1;ad.y=0;MoveBack(ad);break;}
case Key_Left:{ad.x=0;ad.y=1;MoveBack(ad);break;}
case Key_Right:{ad.x=0;ad.y=-1;MoveBack(ad);break;}
}
StepNum--;Step=0;BoxMove=0;
}
}

void MoveBack(Add a) /*一定可以移動*/
{
int i=(StepNum-1)%STEPMAX;
if(BoxMove==0)
{
map-=1;InitPic(map,p.x,p.y);
p.x=p.x a.x;p.y=p.y a.y;
map =1;InitPic(map,p.x,p.y);
}
else if(BoxMove==1)
{
map-=2;InitPic(map,p.x-a.x,p.y-a.y);
map =1;InitPic(map,p.x,p.y);
p.x=p.x a.x;p.y=p.y a.y;
map =1;InitPic(map,p.x,p.y);
}
}