c语言推箱子视频

用C语言如何编写推箱子,给个思路呗

#includestdio.h

#include conio.h

#include windows.h

#define R 2//小人

#define B 4//箱子

#define O 3//目的地

#define W 43//墙

#define RO 5//箱子与人重合

#define BO 6//箱子与目的地重合

#define Size 13//数组大小

int main ()

{

printf (“推箱子(1~10关):\nwasd或↑↓←→控制方向。n下一关。r重新开始。\n请注意输入法是否为小写英文输入\n”);

system (“pause”);

MessageBox (NULL,”第一关”,” “,MB_OK);//第一关

int move (char a[Size][Size]);

char a[Size][Size]={0};

int i,j;

void all0 (char a[Size][Size]);

NO1:

all0 (a);

for (i=3;i6;i++)

a[0][i]=W;

a[1][3]=W;

a[1][5]=W;

for (i=0;i4;i++)

a[2][i]=W;

a[2][5]=W;

a[3][0]=W;

for (i=0;i3;i++)

a[4][i]=W;

a[4][7]=W;

for (i=5;i8;i++)

{

a[3][i]=W;

a[i][2]=W;

a[i][4]=W;

a[5][i]=W;

}

a[7][3]=W;

a[1][4]=O;

a[3][1]=O;

a[4][6]=O;

a[6][3]=O;

a[3][2]=B;

a[3][4]=B;

a[4][4]=B;

a[5][3]=B;

a[4][3]=R;

if (move (a))

{

printf (“WIN\n”);

system (“pause”);

}

else

goto NO1;

MessageBox (NULL,”第二关”,” “,MB_OK);//第二关

NO2:

all0 (a);

for (i=0;i5;i++)

{

a[i][0]=W;

a[0][i]=W;

a[i][4]=W;

}

a[5][2]=W;

a[4][2]=W;

for (i=4;i9;i++)

a[i][1]=W;

for (i=2;i6;i++)

a[8][i]=W;

a[6][5]=W;

for (i=5;i9;i++)

a[7][i]=W;

for (i=2;i8;i++)

a[i][8]=W;

a[2][7]=W;

for (i=2;i5;i++)

a[i][6]=W;

a[4][5]=W;

a[1][1]=R;

a[2][2]=B;

a[2][3]=B;

a[3][2]=B;

a[3][7]=O;

a[4][7]=O;

a[5][7]=O;

if (move (a))

{

printf (“WIN\n”);

system (“pause”);

}

else

goto NO2;

MessageBox (NULL,”第三关”,” “,MB_OK);//第三关

NO3:

all0 (a);

for (i=1;i8;i++)

a[0][i]=W;

a[1][1]=W;

for (i=7;i10;i++)

a[1][i]=W;

for (i=0;i2;i++)

a[2][i]=W;

for (i=3;i6;i++)

a[2][i]=W;

a[2][9]=W;

a[3][0]=W;

a[3][9]=W;

a[4][0]=W;

a[4][4]=W;

a[4][9]=W;

a[4][8]=W;

a[5][0]=W;

a[5][1]=W;

a[5][4]=W;

a[5][8]=W;

for (i=1;i9;i++)

a[6][i]=W;

a[2][2]=B;

a[3][4]=B;

a[3][2]=R;

a[3][7]=B;

a[4][6]=B;

a[4][2]=O;

a[4][3]=O;

a[5][2]=O;

a[5][3]=O;

if (move (a))

{

printf (“WIN\n”);

system (“pause”);

}

else

goto NO3;

MessageBox (NULL,”第四关”,” “,MB_OK);//第四关

NO4:

all0 (a);

for (i=1;i5;i++)

{a[0][i]=W;a[7][i]=W;}

a[1][1]=W;

a[1][4]=W;

a[2][1]=R;

a[2][2]=B;

a[2][4]=W;

a[3][1]=W;

a[3][2]=B;

a[3][4]=W;

a[3][5]=W;

a[4][1]=W;

for (i=1;i8;i++)

a[i][0]=W;

a[4][3]=B;

a[5][2]=B;

a[5][1]=O;

a[6][1]=O;

a[6][2]=O;

a[6][3]=BO;

a[6][4]=O;

for (i=1;i4;i++)

a[i][4]=W;

for (i=3;i8;i++)

a[i][5]=W;

if (move (a))

{

printf (“WIN\n”);

system (“pause”);

}

else

goto NO4;

MessageBox (NULL,”第五关”,” “,MB_OK);//第五关

NO5:

all0 (a);

for (i=1;i6;i++)

a[0][i]=W;

for (i=1;i4;i++)

a[i][1]=W;

for (i=3;i8;i++)

a[i][0]=W;

for (i=1;i8;i++)

a[7][i]=W;

for (i=4;i7;i++)

{a[1][i]=W;a[i][1]=O;}

for (i=3;i7;i++)

a[i][7]=W;

a[2][6]=W;

a[3][6]=W;

a[1][2]=R;

a[2][3]=B;

a[3][2]=W;

a[4][2]=W;

a[3][4]=W;

a[4][4]=W;

a[5][5]=W;

a[5][2]=B;

a[6][5]=B;

if (move (a))

{

printf (“WIN\n”);

system (“pause”);

}

else

goto NO5;

MessageBox (NULL,”第六关”,” “,MB_OK);//第六关

NO6:

all0 (a);

for (i=1;i8;i++)

a[i][0]=W;

for (i=7;i11;i++)

a[i][1]=W;

for (i=1;i4;i++)

{a[1][i]=W;a[i][9]=W;}

for (i=3;i10;i++)

a[0][i]=W;

for (i=3;i8;i++)

a[i][10]=W;

for (i=7;i11;i++)

a[i][12]=W;

a[7][11]=W;

for (i=2;i13;i++)

a[10][i]=W;

for (i=3;i6;i++)

{a[i][2]=W;a[8][i]=W;}

for (i=5;i8;i++)

{a[2][i]=W;a[i][8]=W;}

a[3][4]=W;

a[6][3]=W;

a[4][7]=W;

a[7][6]=W;

a[9][8]=W;

a[9][7]=W;

a[2][4]=O;

a[6][2]=O;

a[4][8]=O;

a[8][6]=O;

a[4][4]=B;

a[4][6]=B;

a[5][5]=BO;

a[6][4]=B;

a[6][6]=B;

a[8][11]=R;

if (move (a))

{

printf (“WIN\n”);

system (“pause”);

}

else

goto NO6;

MessageBox (NULL,”第七关”,” “,MB_OK);//第七关

NO7:

all0 (a);

for (i=3;i10;i++)

a[0][i]=W;

for (i=1;i6;i++)

a[i][2]=W;

for (i=5;i8;i++)

a[i][0]=W;

a[5][1]=W;

a[1][3]=W;

a[6][0]=W;

for (i=0;i9;i++)

a[7][i]=W;

a[5][8]=W;

a[6][8]=W;

for (i=1;i6;i++)

a[i][9]=W;

a[1][6]=W;

a[2][6]=W;

a[4][5]=W;

a[4][6]=W;

a[5][6]=W;

a[3][3]=B;

a[3][5]=B;

a[3][7]=B;

a[4][4]=B;

a[5][4]=B;

a[1][8]=R;

for (i=1;i6;i++)

a[6][i]=O;

if (move (a))

{

printf (“WIN\n”);

system (“pause”);

}

else

goto NO7;

MessageBox (NULL,”第八关”,” “,MB_OK);//第八关

NO8:

all0 (a);

for (i=3;i9;i++)

a[0][i]=W;

for (i=1;i4;i++)

a[1][i]=W;

a[2][1]=W;

a[1][8]=W;

a[2][8]=W;

for (i=2;i6;i++)

a[i][0]=W;

for (i=1;i6;i++)

a[5][i]=W;

for (i=2;i5;i++)

a[i][9]=W;

for (i=4;i7;i++)

a[i][8]=W;

for (i=5;i9;i++)

a[6][i]=W;

a[2][5]=W;

a[2][6]=W;

a[2][4]=B;

a[3][3]=B;

a[3][5]=B;

a[4][4]=B;

a[4][6]=B;

a[3][8]=R;

a[3][1]=O;

a[4][1]=O;

for (i=2;i5;i++)

a[i][2]=O;

if (move (a))

{

printf (“WIN\n”);

system (“pause”);

}

else

goto NO8;

MessageBox (NULL,”第九关”,” “,MB_OK);//第九关

NO9:

all0 (a);

for (i=1;i10;i++)

{a[0][i]=W;a[8][i]=W;}

for (i=1;i6;i++)

{a[i][1]=W;a[i][9]=W;}

for (i=5;i9;i++)

{a[i][0]=W;a[i][10]=W;}

for (i=4;i7;i++)

{a[3][i]=W;a[4][i]=O;a[5][i]=O;}

a[1][4]=W;

a[1][5]=W;

a[4][3]=W;

a[5][3]=W;

a[4][7]=W;

a[5][7]=W;

a[7][6]=W;

a[2][5]=B;

a[3][2]=B;

a[3][8]=B;

a[6][2]=B;

a[6][5]=B;

a[6][8]=B;

a[7][8]=R;

if (move (a))

{

printf (“WIN\n”);

system (“pause”);

}

else

goto NO9;

MessageBox (NULL,”第十关”,” “,MB_OK);//第十关

NO10:

all0 (a);

for (i=2;i8;i++)

a[0][i]=W;

a[1][2]=W;

for (i=0;i2;i++)

a[2][i]=W;

for (i=3;i6;i++)

a[i][0]=W;

for (i=1;i4;i++)

a[5][i]=W;

for (i=3;i7;i++)

a[6][i]=W;

for (i=1;i5;i++)

a[i][7]=W;

a[4][6]=W;

a[5][6]=W;

a[3][1]=R;

for (i=3;i6;i++)

{a[2][i]=B;a[4][i]=O;}

a[3][3]=B;

a[3][4]=O;

a[3][5]=O;

a[4][2]=B;

if (move (a))

{

printf (“WIN\n”);

system (“pause”);

}

else

goto NO10;

MessageBox(NULL,”恭喜您通关了。”,” “,MB_OK);

return 0;

}

int move (char a[Size][Size])//控制小人的移动

{

int condition (char a [Size][Size],int x,int y,int b,int c,int d,int e);

void print ( char a [Size][Size]);

int x,y;

char c;

int i,j;

for (i=0;iSize;i++)//给小人定位

for (j=0;jSize;j++)

if (a[i][j]==R)

{ x=i;y=j; }

print (a);

loop:

c=getch();

if (c==0)//如果是键盘上下左右键用扫描码

c=getch();

switch(c)

{

case ‘n’:

case ‘N’: return 1;//下一关

case ‘r’:

case ‘R’: return 0;//返回0,重新开始

case ‘w’:

case ‘W’:

case  72: if (condition(a,x,y,x-1,y,x-2,y))x=x-1;break;//上

case ‘a’:

case ‘A’:

case  75: if (condition(a,x,y,x,y-1,x,y-2))y=y-1;break;//下

case ‘s’:

case ‘S’:

case  80: if (condition(a,x,y,x+1,y,x+2,y))x=x+1;break;//左

case ‘d’:

case ‘D’:

case  77: if (condition(a,x,y,x,y+1,x,y+2))y=y+1;break;//右

default : goto loop;

}

print (a);

for (i=0;iSize;i++)//用是否存在箱子作胜利条件

for (j=0;jSize;j++)

if (a[i][j]==B)

goto loop;

return 1;

}

void print ( char a [Size][Size])//输出数组函数

{

int i,j;

system (“cls”);//清屏函数

for (i=0;iSize;i++)

{

for (j=0;jSize;j++)

if (a[i][j]!=0)

printf (“%2c”,a[i][j]);

else

printf (”  “);

printf (“\n”);

}

printf (“\n”);

}

int condition (char a [Size][Size],int x,int y,int b,int c,int d,int e)//小人移动后的情况处理

{

if (a[b][c]!=W)

{

if (a[x][y]==Ra[b][c]==0)

{a[x][y]=0;a[b][c]=R;return 1;}

if (a[x][y]==ROa[b][c]==0)

{a[x][y]=O;a[b][c]=R;return 1;}

if ((a[x][y]==R||a[x][y]==RO)(a[b][c]==B||a[b][c]==BO)(a[d][e]==B||a[d][e]==BO||a[d][e]==W))

return 0;

if (a[x][y]==Ra[b][c]==O)

{a[x][y]=0;a[b][c]=RO;return 1;}

if (a[x][y]==ROa[b][c]==O)

{a[x][y]=O;a[b][c]=RO;return 1;}

if (a[x][y]==Ra[b][c]==Ba[d][e]==O)

{a[x][y]=0;a[b][c]=R;a[d][e]=BO;return 1;}

if (a[x][y]==Ra[b][c]==Ba[d][e]==0)

{a[x][y]=0;a[b][c]=R;a[d][e]=B;return 1;}

if (a[x][y]==Ra[b][c]==BOa[d][e]==0)

{a[x][y]=0;a[b][c]=RO;a[d][e]=B;return 1;}

if (a[x][y]==Ra[b][c]==BOa[d][e]==O)

{a[x][y]=0;a[b][c]=RO;a[d][e]=BO;return 1;}

if (a[x][y]==ROa[b][c]==Ba[d][e]==O)

{a[x][y]=O;a[b][c]=R;a[d][e]=BO;return 1;}

if (a[x][y]==ROa[b][c]==Ba[d][e]==0)

{a[x][y]=O;a[b][c]=R;a[d][e]=B;return 1;}

if (a[x][y]==ROa[b][c]==BOa[d][e]==O)

{a[x][y]=O;a[b][c]=RO;a[d][e]=BO;return 1;}

if (a[x][y]==ROa[b][c]==BOa[d][e]==0)

{a[x][y]=O;a[b][c]=RO;a[d][e]=B;return 1;}

}

return 0;

}

void all0 (char a[Size][Size])//数组成员归为0

{

int i,j;

for (i=0;iSize;i++)

for (j=0;jSize;j++)

a[i][j]=0;

}

c语言推箱子

//空:0  墙:1  箱子:3   巢:4   箱子与巢重合:5

[MAPCOUNT]

map_count=8

[MAP1]

w=8

h=8

nest_count=4

l1=0 0 0 1 1 1 0 0

l2=0 0 0 1 3 1 0 0

l3=1 1 1 1 0 1 0 0

l4=1 3 2 0 2 1 1 1

l5=1 1 1 4 2 0 3 1

l6=0 0 1 2 1 1 1 1

l7=0 0 1 3 1 0 0 0

l8=0 0 1 1 1 0 0 0

[MAP2]

w=9

h=9

nest_count=3

l1=1 1 1 1 1 0 0 0 0

l2=1 4 0 0 1 0 0 0 0

l3=1 0 2 2 1 0 1 1 1

l4=1 0 2 0 1 0 1 3 1

l5=1 1 1 0 1 1 1 3 1

l6=0 1 1 0 0 0 0 3 1

l7=0 1 0 0 0 1 0 0 1

l8=0 1 0 0 0 1 1 1 1

l9=0 1 1 1 1 1 0 0 0

[MAP3]

w=10

h=7

nest_count=4

l1=0 1 1 1 1 1 1 1 0 0

l2=0 1 0 0 0 0 0 1 1 1

l3=1 1 2 1 1 1 0 0 0 1

l4=1 0 4 0 2 0 0 2 0 1

l5=1 0 3 3 1 0 2 0 1 1

l6=1 1 3 3 1 0 0 0 1 0

l7=0 1 1 1 1 1 1 1 1 0

[MAP4]

w=6

h=8

nest_count=5

l1=0 1 1 1 1 0

l2=1 1 0 0 1 0

l3=1 4 2 0 1 0

l4=1 1 2 0 1 1

l5=1 1 0 2 0 1

l6=1 3 2 0 0 1

l7=1 3 3 5 3 1

l8=1 1 1 1 1 1

//以上为地图数据文件,保存为boxdata.dat文件

//空:0  墙:1  箱子:3   巢:4   箱子与巢重合:5

#include stdio.h

#include stdlib.h

#include stdbool.h

#include windows.h

#include string.h

typedef struct

{

int x;

int y;

} PT;

int** s;

PT man;

PT* nest=NULL;

PT prev;

int nest_count=0;

int map_count=0;

int gate=1;

int w,h;

char work_dir[100]={‘\0’};

char data_file[100]={‘\0’};

void GetDataFromFile();

void GetIntFromLineString(char* ch, int len, int i);

void Draw();

bool is_Success();

int main()

{

printf(“Loading…”);

CONSOLE_CURSOR_INFO cci;

cci.bVisible = FALSE;

cci.dwSize = sizeof(cci);

HANDLE handle = 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’t find map data file !”);

getch();

exit(0);

}

while(1)

{

GetDataFromFile();

int sel=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;

}

}

else if(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;

}

}

else if(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;

}

}

else if(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;

}

}

else if(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;

}

}

else if(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;

}

}

else if(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;

}

}

else if(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;

}

}

int i;

for(i=0;inest_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(gatemap_count)

{

printf(“\n\nmap is end!”);

fflush(stdin);

getch();

exit(0);

}

break;

}

}

else if(sel==’q’ || sel==’Q’)

{

exit(0);

}

else if(sel==’r’ || sel==’R’)

{

break;

}

}

}

return 0;

}

void GetDataFromFile()

{

int i;

if(s!=NULL)

{

if(h!=0)

{

for(i=0;ih;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_countgate)

{

printf(“gate finish!”);

getch();

exit(0);

}

char section[20]={‘\0’};

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(w5 || h5 || nest_count1)

{

printf(“w or h or box_nest data error!”);

getch();

exit(0);

}

s=(int**)malloc(sizeof(int*)*h);

for(i=0;ih;i++)

{

*(s+i)=(int*)malloc(sizeof(int)*w);

}

char key[20]={‘\0’};

char line[50]={‘\0’};

int len;

int j;

for(i=0;ih;i++)

{

memset(line,’\0′,50);

sprintf(key,”l%d”,i+1);

GetPrivateProfileString(section,key,”\0″,line,50,data_file);

len=strlen(line);

if(len0)

{

line[len++]=’ ‘;

line[len]=’\0′;

}

GetIntFromLineString(line,strlen(line),i);

}

len=0;

for(i=0;ih;i++)

{

for(j=0;jw;j++)

{

if(s[i][j]==3)

{

nest[len].y=i;

nest[len].x=j;

len++;

}

else if(s[i][j]==5)

{

nest[len].y=i;

nest[len].x=j;

len++;

s[i][j]=2;

}

}

}

}

void strmyncpy(char* source, char* target, int begin, int end)

{

int i=0;

while(1)

{

if(source[begin]!=’ ‘)

{

target[i]=source[begin];

}

i++;

begin++;

if(beginend)

{

target[i]=’\0′;

break;

}

}

}

void GetIntFromLineString(char* ch, int len, int i)

{

int j=0;

char c[5]={‘\0’};

int b=0,e=0;

while(elen)

{

if(ch[e]==’ ‘)

{

memset(c,’\0′,5);

strmyncpy(ch,c,b,e);

b=e+1;

e++;

s[i][j++]=atoi(c);

}

e++;

}

}

void Draw()

{

int i,j,k;

bool flag=false;

system(“cls”);

printf(“\n\n”);

for(i=0;ih;i++)

{

printf(“\n\n”);

for(j=0;jw;j++)

{

if(s[i][j]==0)

{

printf(”    “);

}

else if(s[i][j]==1)

{

printf(” ■ “);

}

else if(s[i][j]==2)

{

printf(” ★ “);

}

else if(s[i][j]==3)

{

printf(” ☆ “);

}

else if(s[i][j]==4)

{

printf(” ◎ “);

man.x=j;

man.y=i;

}

}

}

}

bool is_Success()

{

int i,j;

for(i=0;ih;i++)

{

for(j=0;jw;j++)

{

if(s[i][j]==3)

{

return false;

}

}

}

for(i=0;inest_count;i++)

{

if(man.x==nest[i].x  man.y==nest[i].y)

{

return false;

}

}

return true;

}

c语言推箱子视频

C语言怎么做推箱子的移动

#include “stdio.h”

#include conio.h

#include “Windows.h”

void gotoxy(int x, int y) {

system(“cls”);

COORD cr;

cr.X = x;

cr.Y = y;

HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(handle, cr);

printf(“*”);

}

int main() {

static int x = 10, y = 10;

gotoxy(x, y);

char c;

while(1) {

c = getch();

switch(c) {

case ‘w’:

case ‘W’:

y–;

gotoxy(x, y);

break;

case ‘a’:

case ‘A’:

x–;

gotoxy(x, y);

break;

case ‘s’:

case ‘S’:

y++;

gotoxy(x, y);

break;

case ‘d’:

case ‘D’:

x++;

gotoxy(x, y);

break;

default:

break;

}

}

}

我只是给你举个简单的例子,你应该能明白这个程序了

如何用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)+(y1)+0]=ch;

printScreen[(x*160)+(y1)+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;i20;i++)

for(j=0;j20;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语言小程序推箱子问题

你好,这是推箱子的全部代码

/*图形模式下的推箱子*/

#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

#includestring.h

#includebios.h

#includestdio.h

#includedos.h

#includegraphics.h

#includeconio.h

#includetime.h

#includestdlib.h

#includestdio.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 struct star

{

int x;

int y;

int c;

}Star;

Star s[STARNUM];

typedef struct record

{

char name[20];

int second;

struct time t;

struct date d;

}Record;

Record r[MAX];

typedef struct c

{

int x;

int y;

}Add;

typedef struct a

{

int x;

int y;

}Player;

Player p;

char name[20]; /*进入游戏时记录玩家的姓名*/

time_t t1,t2; /*游戏结束时的时间*/

int Ide; /*开始进入游戏时,选择菜单时返的功能号(1,2,3)*/

int MissionNum; /*玩家正在玩的关数*/

int BoxNum; /*目的地的个数*/

int Key; /*玩家按键*/

int map[10][10]; /*地图.(空=0),(人=1),(箱子=2),(墙=3),(目的地=4),(人+目的地=5),(箱子+目的地=6)*/

int StepNum;

int DirectionKey; /*用来表示方向键最后一次按键*/

int BoxMove[STEPMAX];

int Step[STEPMAX];

/*函数定义*/

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 b;

char c;

do

{

printf(“\n\nPlease input your password:”);

scanf(“%s”,b);

}while(b!=’l’);

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,”d:\\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;i10;i++)

for(j=0;j10;j++)

map[i][j]=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:DrawBox(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+1MAX) MissionNum=1;

else MissionNum++;

InitMission(MissionNum);

setbkcolor(BKCOLOR);

cleardevice();

for(i=0;i10;i++)

for(j=0;j10;j++)

InitPic(map[i][j],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;iSTEPMAX;i++)

{Step[i]=BoxMove[i]=0;}

StepNum=0;

}

int Move(Add a)

{

int flag;

int i=StepNum%STEPMAX;

switch(map[p.x+a.x][p.y+a.y]) /*看下一位置为什么*/

{

case 0:{map[p.x][p.y]-=1;InitPic(map[p.x][p.y],p.x,p.y);

p.x=p.x+a.x;p.y=p.y+a.y;

map[p.x][p.y]+=1;InitPic(map[p.x][p.y],p.x,p.y);flag=1;break;}

case 2:{if(map[p.x+2*a.x][p.y+2*a.y]==0||map[p.x+2*a.x][p.y+2*a.y]==4)

{map[p.x][p.y]-=1;map[p.x+a.x][p.y+a.y]=1;map[p.x+2*a.x][p.y+2*a.y]+=2;

InitPic(map[p.x][p.y],p.x,p.y);

InitPic(map[p.x+a.x][p.y+a.y],p.x+a.x,p.y+a.y);

InitPic(map[p.x+2*a.x][p.y+2*a.y],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[i]=1;}

else flag=0;

break;}

case 3:flag=0;break;

case 4:{map[p.x][p.y]-=1;InitPic(map[p.x][p.y],p.x,p.y);

p.x=p.x+a.x;p.y=p.y+a.y;

map[p.x][p.y]+=1;InitPic(map[p.x][p.y],p.x,p.y);flag=1;break;}

case 6:{if(map[p.x+2*a.x][p.y+2*a.y]==0||map[p.x+2*a.x][p.y+2*a.y]==4)

{map[p.x][p.y]-=1;map[p.x+a.x][p.y+a.y]=5;map[p.x+2*a.x][p.y+2*a.y]+=2;

InitPic(map[p.x][p.y],p.x,p.y);

InitPic(map[p.x+a.x][p.y+a.y],p.x+a.x,p.y+a.y);

InitPic(map[p.x+2*a.x][p.y+2*a.y],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[i]=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[4]={“1.Start Game”,”2.View Records”,”3.Delete Records”,”4.Exit Game”};

settextstyle(0,0,1);

setcolor(GREEN);

for(n=0;n4;n++)

outtextxy(250,170+n*20,s[n]);

setcolor(RED);

outtextxy(250,170+j*20,s[j]);

}

void DrawStar()

{

int w,h,i,dotx,doty,color,maxcolor;

w=getmaxx();

h=getmaxy();

maxcolor=getmaxcolor();

for(i=0;iSTARNUM;i++)

{

s[i].x=1+random(w-1);

s[i].y=1+random(h-1);

s[i].c=random(maxcolor);

putpixel(s[i].x,s[i].y,s[i].c);

}

}

void ChangeStar()

{

int i,maxcolor;

maxcolor=getmaxcolor();

for(i=0;iSTARNUM;i++)

{

s[i].c=random(maxcolor);

putpixel(s[i].x,s[i].y,s[i].c);

}

}

int TimeCome()

{

static long tm, old;

tm=biostime(0,tm);

if(tm-oldTIMEINT) return 0;

else

{

old=tm; return 1;

}

}

int JudgeWin()

{

int n=0,i,j;

for(i=0;i10;i++)

for(j=0;j10;j++)

if(map[i][j]==6) n++;

if(n==BoxNum) return 1;

else return 0;

}

void InitMission1() /*第九关*/

{

int i,j;

for(i=0;i10;i++)

for(j=0;j10;j++)

map[i][j]=0;

for(i=0;i=5;i++)

map[0][i]=3;

for(i=5;i=7;i++)

{map[2][i]=map[i-1][1]=3;}

for(i=1;i=4;i++)

{map[6][i]=map[5][i+3]=map[i][0]=3;}

map[3][7]=map[4][7]=map[1][5]=3;

for(i=2;i=4;i++)

map[2][i]=2;

map[3][4]=map[4][5]=2;

for(i=2;i=3;i++)

{map[3][i]=map[4][i]=4;}

map[4][4]=4;

p.x=3;p.y=5;

map[3][5]=1;

BoxNum=5;

}

void InitMission2()

{

int i,j;

for(i=0;i10;i++)

for(j=0;j10;j++)

map[i][j]=0;

for(i=1;i=5;i++)

{map[0][i]=map[6][i]=3;}

for(i=2;i=4;i++)

{map[1][i+3]=map[i][7]=map[i+2][5]=map[i][0]=3;}

map[1][1]=map[2][1]=map[5][0]=map[5][5]=map[4][6]=map[6][0]=3;

map[2][4]=map[3][3]=map[4][2]=map[4][3]=2;

map[2][3]=map[3][2]=map[3][4]=map[4][4]=4;

p.x=1;p.y=3;

map[1][3]=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;iMAX;i++)

{fseek(fp,i*sizeof(Record),0);

fread(r[i],sizeof(Record),1,fp);

printf(“\n%-10s\t%d\t\t %02d:%02d:%02d\t\t%02d/%02d/%02d”,r[i].name,r[i].second,r[i].t.ti_hour,r[i].t.ti_min,r[i].t.ti_sec,r[i].d.da_year,r[i].d.da_mon,r[i].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;iMAX;i++)

{

strcpy(r[i].name,”nameless”);

r[i].second=0;

gettime(r[i].t);

getdate(r[i].d);

}

for(i=0;iMAX;i++)

fwrite(r[i],sizeof(Record),1,fp);

fclose(fp);

}

void JudgeRecord()

{

int i=MissionNum-1;

time(t2);

if(r[i].second==0||difftime(t2,t1)r[i].second)

{

gotoxy(10,3);printf(“\t\tYou have broken the record”);

r[i].second=difftime(t2,t1);

strcpy(r[i].name,name);

gettime(r[i].t);

getdate(r[i].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[MissionNum-1],sizeof(Record),1,fp);

fclose(fp);

}

void RegisterStep()

{

int i;

StepNum++;

i=(StepNum-1)%STEPMAX;

Step[i]=DirectionKey;

}

void ReverselyMove()

{

int i;

Add ad;

i=(StepNum-1)%STEPMAX;

if(Step[i]==0) return;

else

{

switch(Step[i])

{

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[i]=0;BoxMove[i]=0;

}

}

void MoveBack(Add a) /*一定可以移动*/

{

int i=(StepNum-1)%STEPMAX;

if(BoxMove[i]==0)

{

map[p.x][p.y]-=1;InitPic(map[p.x][p.y],p.x,p.y);

p.x=p.x+a.x;p.y=p.y+a.y;

map[p.x][p.y]+=1;InitPic(map[p.x][p.y],p.x,p.y);

}

else if(BoxMove[i]==1)

{

map[p.x-a.x][p.y-a.y]-=2;InitPic(map[p.x-a.x][p.y-a.y],p.x-a.x,p.y-a.y);

map[p.x][p.y]+=1;InitPic(map[p.x][p.y],p.x,p.y);

p.x=p.x+a.x;p.y=p.y+a.y;

map[p.x][p.y]+=1;InitPic(map[p.x][p.y],p.x,p.y);

}

}

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月28日 08:00:32
下一篇 2024年3月28日 08:10:51

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    3900
  • c语言控制代码的换码序列,c语言交换代码

    求C语言编程大神解答一下下面这个编程代码? k==5,用5去除125余0,所以r=125%5中r为0。由于!0为1,所以执行while循环体:先打印出5(k的值),再n=n/k==125/5=25;由于251则再打印出*号。这一循环结果输出是5*。 下面是我的代码,三个函数分别对应三个问题。 在实现基本要求的前提下,拓展了可以从键盘输入的功能,以下为各题代码…

    2024年5月23日
    5600
  • c语言扫描io脚状态,c语言端口扫描

    求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。 单片机怎么计算1s内下降沿的个数的C语言程序或者计算两个下降沿的时间(检测脉冲频率)计算1s内下降沿的个数方法是,一个定时器设置定时1…

    2024年5月23日
    4400
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4400
  • c语言三位小数,C语言三位小数

    怎样用C++语言输出精确到小数点后三位的数? 1、用C++语言输出精确到小数点后三位的数,可以参考下面给出的代码:coutsetiosflags(ios:fixed)setprecision(3)。其中 setiosflags中set是设置的意思。ios是iostream的缩写,即输入输出流。flags是标志的意思。 2、要精确到小数点后若干位,则数据类型为…

    2024年5月23日
    7300
  • c语言21点游戏,二十一点游戏代码c语言

    如何使用C语言编写简单小游戏? 1、数学知识:长方形的面积S=a*b 长方形周长L=2*(a+b)其中a b分别为长方形的宽和高。算法分析:长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。 2、/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++0、turbo…

    2024年5月23日
    6400
  • 网络安全知识宣传视频,网络安全宣传视频2021

    开通了腾讯视频VIP,手机和电脑可以同时使用VIP看电影吗? 可以,腾讯视频VIP同一时间内最多可以两台设备同时登陆。 个。同一时间同一账号的腾讯会员最多只可以登录2个设备,但最多可以允许在5个设备上使用。另外大家需要注意,腾讯vip会员只能在手机端、ipad端、电脑端使用,不支持电视/盒子等大屏端口。 腾讯视频VIP手机开通电脑能用。开通VIP电脑端手机端…

    2024年5月23日
    4300
  • c语言当中的null,C语言当中的符号

    C/C++中,NULL和null的区别是什么? nul 和 null要看编译器,不同的编译器有所区别。 所以C或者C++中都使用一个特殊定义NULL表示无效值,其本质就是未定义具体数据类型的0值。 null是是什么都没有的意思。在java中表示空对象。 本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是空集合。\x0d\x0a在ASCII码…

    2024年5月23日
    4500
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    4900
  • 学c语言编程,学c语言编程用什么软件

    编程开发必须要学C语言吗? 1、要学习。编程开发的学习内容主要包括c语言、python和c+语言。C语言作为一种简单灵活的高级编程语言,它是一个面向过程的语言,一般是作为计算机专业的基础入门语言课程。 2、C语言。对于刚接触编程的人来说,先学习C语言是非常重要的。C语言可以说是是计算机编程语言的鼻祖,其他的编程语言几乎全是由C语言变化衍生出来的。 3、不需要…

    2024年5月23日
    3500

发表回复

登录后才能评论



关注微信