推箱子的c語言,推箱子c語言程序代碼

本文目錄一覽:

如何用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語言推箱子:如何記錄目的地坐標並判斷勝利

不用指針,那你就建個數組用來存,目的地坐標,如果目的地數目一樣的話,數組大小就確定了,每副圖目的地數目不一樣的話,那你就以最大個數為準。再用一個變量存目的地數目。

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語言怎麼做推箱子的移動

#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語言推箱子

//空: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操作文件的建議

寫入文件使用fwrite()函數,

比較文件中各個數據的最小值,你可以逐個讀出,在比較

下面是一個例子

#includestdio.h

int main()

{

FILE *fp;

int num[5]={10,20,50,40,60};

int i;

int number;

fp=fopen(“Data”,”w”); //打開Data文件,文件操作為寫入

if(NULL==fp) //若打開失敗,返回NULL

{

printf(“Can’t open the file\n”);

return;

}

for(i=0;i5;i++) //將num中的數據逐個寫入

{

fwrite(num[i],sizeof(int),1,fp);

}

fclose(fp); //關閉文件

fp=fopen(“Data”,”r”); //重新打開,文件操作為讀

while(fread(number,sizeof(int),1,fp)!=0) //逐個讀取文件中的數據,並賦予number

printf(“\n%d”,number); //輸出每個數據

fclose(fp);

}

C語言程序設計推箱子算法

#include”stdio.h”

#include”bios.h”

#define LEFT 75

#define RIGHT 77

#define UPPER 72

#define DOWN 80

#define ESC 27

struct Boxss /*定義箱子結構體,其中包含坐標屬性*/

{

int x,y;

};

union keyboard /*定義讀取鍵盤碼的共用體類型*/

{

unsigned int iKeyInfo;

char chKeyBit[2];

};

int fnGetKey(void) /*定義讀取鍵盤碼的函數*/

{

union keyboard uniKey1; /*定義讀取鍵盤碼的共用體變量*/

while(bioskey(1)==0); /*檢測用戶是否按鍵*/

uniKey1.iKeyInfo=bioskey(0); /*讀取按鍵信息*/

return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII碼或擴充碼*/

}

void main()

{

int iKey,x=11,y=6,tx=11,ty=6; /*x,y為人物移動後坐標,tx,ty為人物移動前坐標*/

struct Boxss Box[4]; /*定義箱子數量*/

int chMap[10][10]={ /*用二維數組定義地圖*/

{0,0,0,0,0,0,0,0,0,0}, /*0表示牆1表示路2表示目標*/

{0,1,0,0,0,0,1,1,1,0},

{0,1,0,2,0,0,1,0,1,0},

{0,1,0,1,0,0,1,0,1,0},

{0,1,1,1,0,0,1,0,1,0},

{0,1,0,0,0,0,1,0,1,0},

{0,1,1,1,1,1,1,0,1,0},

{0,1,0,1,0,0,0,0,2,0},

{0,2,0,1,1,1,1,2,0,0},

{0,0,0,0,0,0,0,0,0,0},

};

int i,j;

Box[0].x=13; /*定義箱子的坐標屬性*/

Box[1].x=11;

Box[2].x=14;

Box[3].x=18;

Box[0].y=8;

Box[1].y=7;

Box[2].y=13;

Box[3].y=7;

while(1) /*反覆進行求移動的坐標運算*/

{

for(i=0;i10;i++) /*輸出新地圖(刷新地圖)*/

{

gotoxy(10,5+i);

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

{

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

printf(“#”);

if(chMap[i][j]==1)

printf(” “);

if(chMap[i][j]==2)

printf(“X”);

}

}

j=0; /*判斷是否所有箱子都在目標坐標上*/

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

if(chMap[Box[i].y-5][Box[i].x-10]==2)

j++;

if(j==4) /*如果所有箱子都就位輸出”YOU WIN!”退出*/

{

clrscr();

printf(“You Win!”);

break;

}

for(i=0;i4;i++) /*在起始(或移動後)的坐標輸出箱子*/

{

gotoxy(Box[i].x,Box[i].y);

printf(“0”);

}

gotoxy(x,y); /*在起始(或移動後)的坐標輸出人*/

printf(“*\b”);

tx=x; /*記錄本次移動前的坐標*/

ty=y;

iKey=fnGetKey();

if(iKey==LEFTchMap[y-5][x-1-10]!=0) /*按讀取的按鍵信息改變坐標如果改變的坐標和牆(0)重合則不改變*/

x–;

if(iKey==RIGHTchMap[y-5][x+1-10]!=0)

x++;

if(iKey==UPPERchMap[y-1-5][x-10]!=0)

y–;

if(iKey==DOWNchMap[y+1-5][x-10]!=0)

y++; /*輸入ESC退出並輸出”YOU LOST”*/

if(iKey==ESC)

{

clrscr();

printf(“You Lost”);

break;

}

for(i=0;i4;i++) /*如果移動後的人的坐標與箱子坐標重合,則改變箱子坐標向前一格*/

if(Box[i].x==xBox[i].y==y)

{

Box[i].x+=(x-tx);

Box[i].y+=(y-ty);

if(chMap[Box[i].y-5][Box[i].x-10]==0) /*如果移動後的箱子坐標會出現在牆上,則使箱子坐標和人坐標都返回移動前的值*/

{

Box[i].x-=(x-tx);

Box[i].y-=(y-ty);

x=tx;

y=ty;

}

break;

}

clrscr();

}

getch();

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/289172.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 03:01
下一篇 2024-12-24 03:02

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python計算機程序代碼全面介紹

    本文將從多個方面對Python計算機程序代碼進行詳細介紹,包括基礎語法、數據類型、控制語句、函數、模塊及面向對象編程等。 一、基礎語法 Python是一種解釋型、面向對象、動態數據…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28

發表回復

登錄後才能評論