1、迷宫游戏C语言小游戏源代码迷宫源代码:#include #include #include #include #include #define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define F9 0x43#define Esc 0x1b#define Del 0x53#define Home 0x47#define End 0x4f#define Space 0x20#define Up 0x48#define Down 0x50#define Left 0x4b#define Right 0x4d#define Enter 0
2、x0d#define F2 0x3c#define F3 0x3d#define STACK_INIT_SIZE 200#define STACKINCREMENT 10typedef int Boolean;typedef int Status;typedef suct int x;int y; PosType;typedef suct int ord;PosType seat;int di; SElemType;typedef suct int ;int foot;int mark; MazeType;typedef suct SElemType *base;SElemType *top;
3、int stacksize; Stack;int Maze2030;MazeType maze2030;PosType StartPlace;PosType EndPlace;int count;int m,n;Boolean b_start=FALSE,b_end=FALSE;void CreatMaze(void);Status SaveMaze(char *filename);Status LoadMaze(char *filename);void Error(char *message);Status InitStack(Stack *s);Status DesoyStack(Stac
4、k *s);Status ClearStack(Stack *s);Boolean StackEmpty(Stack *s);int StackLength(Stack *s);Status Push(Stack *s,SElemType e);SElemType Pop(Stack *s,SElemType e);Status GetTop(Stack *s,SElemType *e);Status StackTraverse(Stack *s,Status (* visit)(SElemType *se);Boolean Pass(PosType curpos);void MarkPrin
5、t(PosType seat);void FootPrint(PosType curpos);PosType NextPos(PosType seat,int di);Status MazePath(PosType start,PosType end);void CreatMaze(void)/* Form the maze. */void Error(char *message);Status SaveMaze(char *filename);Status LoadMaze(char *filename);int i,j;int x,y;char c;char savename12,load
6、name12;Boolean flag=FALSE,load=FALSE;clrscr();printf(Menu:nn);printf(1.Load Mazefile:(*.dd)nn);printf(2.Input Maze:nn);printf(Input your choice: );doc=getch();switch(c)case 1: putch(1); break;case 2: putch(2); break;case Esc: sleep(1); exit(1);default: break;while(c!=1&c!=2) ;if(c=1)printf(nnLoadNam
7、e: );scanf(%s,loadname);if(LoadMaze(loadname)sleep(1); load=TRUE;else gotoxy(1,9); printf(Load fail! ); if(!load)printf(nInput the mazes size:n);printf(nInput Length :n);scanf(%d,&m);printf(nInput Width :n);scanf(%d,&n);if(m4|n30|n20) Error(Maze too large);for(i=0;i30;i )for(j=0;j for(i=1;i=n;i )for
8、(j=1;j3) y-; gotoxy(x,y); break;case Down: if(y4) x-=2; gotoxy(x,y); break;case Right: if(x2*m-2) x =2; gotoxy(x,y); break;case Del: if(y-2=StartPlace.y&x/2-1=StartPlace.x) b_start=FALSE;if(y-2=EndPlace.y&x/2-1=EndPlace.x) b_end=FALSE;putch( ); Mazey-2x/2-1=1; gotoxy(x,y);break;case Enter: if(y-2=St
9、artPlace.y&x/2-1=StartPlace.x) break;if(y-2=EndPlace.y&x/2-1=EndPlace.x) break;putch(#); Mazey-2x/2-1=0; gotoxy(x,y);break;case Home: if(Mazey-2x/2-1&!b_start)StartPlace.x=x/2-1;StartPlace.y=y-2;putch(S);gotoxy(x,y);b_start=TRUE;break;case End: if(Mazey-2x/2-1&!b_end)EndPlace.x=x/2-1;EndPlace.y=y-2;
10、putch(E);gotoxy(x,y);b_end=TRUE;break;case Esc: gotoxy(2,22); printf(exit); sleep(1); exit(1);case F9: if(b_start&b_end) flag=TRUE; break;case F2: gotoxy(2,22);printf(Savename:);scanf(%s,savename);gotoxy(2,22);if(SaveMaze(savename) printf(Save OK! );else printf(Save fail! );sleep(1);gotoxy(2,22);pri
11、ntf( );gotoxy(x,y);break;default: break;while(!flag);for(i=0;i30;i )for(j=0;j20;j )mazeji.=Mazeji;mazeji.mark=0;mazeji.foot=0;Status LoadMaze(char *file)/* The maze has been loaded. */FILE *fp;char *buffer;char ch;int i=0,j,k;Boolean len=FALSE,wid=FALSE;if(fp=fopen(file,r)=NULL)return ERROR;buffer=(
12、char *)malloc(600*sizeof(char);ch=fgetc(fp);while(ch!=EOF)bufferi=ch;i ;ch=fgetc(fp);m=30;n=20;for(i=0;i600;i )j=i/30; k=i0;if(bufferi=2&!len) m=i; len=TRUE; if(k=0&bufferi=2&!wid) n=j; wid=TRUE; switch(bufferi)case 0: Mazejk=0; break;case 1: Mazejk=1; break;case 2: Mazejk=2; break;case 3: Mazejk=1;
13、StartPlace.x=k;StartPlace.y=j;b_start=TRUE;break;case 4: Mazejk=1;EndPlace.x=k;EndPlace.y=j;b_end=TRUE;break;default : break;fclose(fp);clrscr();for(i=0;i30;i )for(j=0;j20;j )mazeji.=Mazeji;mazeji.foot=0;mazeji.mark=0;if(Mazeji=0)gotoxy(2*i 2,j 2);putch(#);gotoxy(2*StartPlace.x 2,StartPlace.y 2);put
14、ch(S);gotoxy(2*EndPlace.x 2,EndPlace.y 2);putch(E);return OK;Status SaveMaze(char *filename)/* The maze has been saved. */FILE *fp;char *buffer;int i,j,k;fp=fopen(filename,wb);buffer=(char *)malloc(600*sizeof(char);for(i=0;ibase=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!s-base) Error
15、(Overflow);s-top=s-base;s-stacksize=STACK_INIT_SIZE;return OK; /* InitStack */Status DesoyStack(Stack *s)/* The stack s has been desoyed. */s-top=NULL;s-stacksize=0;free(s-base);s-base=NULL;return OK; /* DesoyStack */Status ClearStack(Stack *s)/* The stack has been clear to be maximum. */s-top=s-bas
16、e;s-stacksize=STACK_INIT_SIZE;return OK; /* ClearStack */Boolean StackEmpty(Stack *s)/* Check if the stack s is empty. */if(s-top=s-base) return TRUE;else return FALSE; /* StackEmpty */int StackLength(Stack *s)/* Gain the length of the stack s. */if(s-tops-base) return (int)(s-top-s-base);else retur
17、n 0; /* StackLength */Status Push(Stack *s,SElemType e)/* The element e has been pushed into the stack s. */if(s-top-s-base=s-stacksize)s-base=(SElemType *)realloc(s-base,(s-stacksize STACKINCREMENT)*sizeof(SElemType);if(!s-base) Error(Overflow);s-top=s-base s-stacksize;s-stacksize =STACKINCREMENT;*
18、s-top =e;return OK; /* Push */SElemType Pop(Stack *s,SElemType e)/* The element e has been removed from the stack s. */if(s-top=s-base) Error(Pop);e=*-s-top;return e; /* Pop */Status GetTop(Stack *s,SElemType *e)/* The element e has got to the top of the stack s.*/if(s-top=s-base) Error(GetTop);*e=*
19、(s-top-1);return OK; /* GetTop */* Traverse the stack s using visiting function. */* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se)SElemType p;int result;if(s-top=s-base) return ERROR;p=s-base;while(!(p=s-top)result=(*visit)(p);p ;return OK; */Boolean Pass(PosType curpos)/* Check if the current position can be passed. */if(mazecurpos.xcurpos.y.=1&mazecurpos.xcurpos.y.foot=0&mazecurpos.xcurpos.y.mark=0)return TRUE;else return FALSE; /* Pass */void MarkPrint(PosType seat)/* Mark the position seat. */mazeseat.x
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1