迷宫游戏C语言小游戏源代码.docx
- 文档编号:9533292
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:26
- 大小:17.91KB
迷宫游戏C语言小游戏源代码.docx
《迷宫游戏C语言小游戏源代码.docx》由会员分享,可在线阅读,更多相关《迷宫游戏C语言小游戏源代码.docx(26页珍藏版)》请在冰点文库上搜索。
迷宫游戏C语言小游戏源代码
迷宫源代码:
#include
#include
#include
#include
#include
#defineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
#defineF90x43
#defineEsc0x1b
#defineDel0x53
#defineHome0x47
#defineEnd0x4f
#defineSpace0x20
#defineUp0x48
#defineDown0x50
#defineLeft0x4b
#defineRight0x4d
#defineEnter0x0d
#defineF20x3c
#defineF30x3d
#defineSTACK_INIT_SIZE200
#defineSTACKINCREMENT10
typedefintBoolean;
typedefintStatus;
typedefsuct{
intx;
inty;
}PosType;
typedefsuct{
intord;
PosTypeseat;
intdi;
}SElemType;
typedefsuct{
int;
intfoot;
intmark;
}MazeType;
typedefsuct{
SElemType*base;
SElemType*top;
intstacksize;
}Stack;
intMaze[20][30];
MazeTypemaze[20][30];
PosTypeStartPlace;
PosTypeEndPlace;
intcount;
intm,n;
Booleanb_start=FALSE,b_end=FALSE;
voidCreatMaze(void);
StatusSaveMaze(char*filename);
StatusLoadMaze(char*filename);
voidError(char*message);
StatusInitStack(Stack*s);
StatusDesoyStack(Stack*s);
StatusClearStack(Stack*s);
BooleanStackEmpty(Stack*s);
intStackLength(Stack*s);
StatusPush(Stack*s,SElemTypee);
SElemTypePop(Stack*s,SElemTypee);
StatusGetTop(Stack*s,SElemType*e);
StatusStackTraverse(Stack*s,Status(*visit)(SElemType*se));
BooleanPass(PosTypecurpos);
voidMarkPrint(PosTypeseat);
voidFootPrint(PosTypecurpos);
PosTypeNextPos(PosTypeseat,intdi);
StatusMazePath(PosTypestart,PosTypeend);
voidCreatMaze(void)
/*Formthemaze.*/
{
voidError(char*message);
StatusSaveMaze(char*filename);
StatusLoadMaze(char*filename);
inti,j;
intx,y;
charc;
charsavename[12],loadname[12];
Booleanflag=FALSE,load=FALSE;
clrscr();
printf("Menu:
\n\n");
printf("1.LoadMazefile:
(*.dd)\n\n");
printf("2.InputMaze:
\n\n");
printf("Inputyourchoice:
");
do
{
c=getch();
switch(c)
{
case''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''':
putch(''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''');break;
case''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''':
putch(''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''');break;
caseEsc:
sleep
(1);exit
(1);
default:
break;
}
}
while(c!
=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&&c!
=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''');
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
{
printf("\n\nLoadName:
");
scanf("%s",loadname);
if(LoadMaze(loadname))
{
sleep
(1);load=TRUE;
}
else{gotoxy(1,9);printf("Loadfail!
");}
}
if(!
load)
{
printf("\nInputthemaze''''''''''''''''''''''''''''''''ssize:
\n");
printf("\nInputLength:
\n");
scanf("%d",&m);
printf("\nInputWidth:
\n");
scanf("%d",&n);
if(m<4||n<4)Error("Input");
if(m>30||n>20)Error("Mazetoolarge");
for(i=0;i<30;i)
for(j=0;j<20;j)
Maze[j][i]=2;
StartPlace.x=0;
StartPlace.y=0;
EndPlace.x=0;
EndPlace.y=0;
clrscr();BR>for(i=1;i<=n;i)
{
for(j=1;j<=m;j)
{
printf("#");
Maze[i-1][j-1]=0;
}
printf("\n");
}
}
gotoxy(65,5);
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':
Wall");
gotoxy(65,7);
printf("Start:
Home");
gotoxy(65,9);
printf("End:
End");
gotoxy(65,11);
printf("DeleteWall:
Del");
gotoxy(65,13);
printf("EnterWall:
Enter");
gotoxy(65,15);
printf("SaveMaze:
F2");
gotoxy(65,17);
printf("Complete:
F9");
gotoxy(65,19);
printf("Exit:
Esc");
gotoxy(4,3);
x=4;y=3;
do
{
c=getch();
switch(c)
{
caseUp:
if(y>3){y--;gotoxy(x,y);}
break;
caseDown:
if(y break; caseLeft: if(x>4){x-=2;gotoxy(x,y);} break; caseRight: if(x<2*m-2){x=2;gotoxy(x,y);} break; caseDel: 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('''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''');Maze[y-2][x/2-1]=1;gotoxy(x,y); break; caseEnter: if(y-2==StartPlace.y&&x/2-1==StartPlace.x)break; if(y-2==EndPlace.y&&x/2-1==EndPlace.x)break; putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');Maze[y-2][x/2-1]=0;gotoxy(x,y); break; caseHome: if(Maze[y-2][x/2-1]&&! b_start) { StartPlace.x=x/2-1; StartPlace.y=y-2; putch(''''''''''''''''''''''''''''''''S''''''''''''''''''''''''''''''''); gotoxy(x,y); b_start=TRUE; } break; caseEnd: if(Maze[y-2][x/2-1]&&! b_end) { EndPlace.x=x/2-1; EndPlace.y=y-2; putch(''''''''''''''''''''''''''''''''E''''''''''''''''''''''''''''''''); gotoxy(x,y); b_end=TRUE; } break; caseEsc: gotoxy(2,22);printf("exit");sleep (1);exit (1); caseF9: if(b_start&&b_end)flag=TRUE;break; caseF2: gotoxy(2,22); printf("Savename: "); scanf("%s",savename); gotoxy(2,22); if(SaveMaze(savename))printf("SaveOK! "); elseprintf("Savefail! "); sleep (1); gotoxy(2,22); printf(""); gotoxy(x,y); break; default: break; } } while(! flag); for(i=0;i<30;i) for(j=0;j<20;j) { maze[j][i].=Maze[j][i]; maze[j][i].mark=0; maze[j][i].foot=0; } } StatusLoadMaze(char*file) /*Themazehasbeenloaded.*/ { FILE*fp; char*buffer; charch; inti=0,j,k; Booleanlen=FALSE,wid=FALSE; if((fp=fopen(file,"r"))==NULL) returnERROR; buffer=(char*)malloc(600*sizeof(char)); ch=fgetc(fp); while(ch! =EOF) { buffer[i]=ch; i; ch=fgetc(fp); } m=30;n=20; for(i=0;i<600;i) { j=i/30;k=i0; if(buffer[i]==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&&! len){m=i;len=TRUE;} if(k==0&&buffer[i]==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&&! wid){n=j;wid=TRUE;} switch(buffer[i]) { case''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0;break; case''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1;break; case''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2;break; case''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1; StartPlace.x=k; StartPlace.y=j; b_start=TRUE; break; case''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1; EndPlace.x=k; EndPlace.y=j; b_end=TRUE; break; default: break; } } fclose(fp); clrscr(); for(i=0;i<30;i) for(j=0;j<20;j) { maze[j][i].=Maze[j][i]; maze[j][i].foot=0; maze[j][i].mark=0; if(Maze[j][i]==0) { gotoxy(2*i2,j2); putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); } } gotoxy(2*StartPlace.x2,StartPlace.y2); putch(''''''''''''''''''''''''''''''''S''''''''''''''''''''''''''''''''); gotoxy(2*EndPlace.x2,EndPlace.y2); putch(''''''''''''''''''''''''''''''''E''''''''''''''''''''''''''''''''); returnOK; } StatusSaveMaze(char*filename) /*Themazehasbeensaved.*/ { FILE*fp; char*buffer; inti,j,k; fp=fopen(filename,"wb"); buffer=(char*)malloc(600*sizeof(char)); for(i=0;i<600;i) { j=i/30;k=i0; switch(Maze[j][k]) { case0: buffer[i]=''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''';break; case1: buffer[i]=''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''';break; case2: buffer[i]=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''';break; default: Error("Write");break; } if(k==StartPlace.x&&j==StartPlace.y)buffer[i]=''''''''''''''''''''''''''''''''3''''''''''''''''''''''''''''''''; if(k==EndPlace.x&&j==EndPlace.y)buffer[i]=''''''''''''''''''''''''''''''''4''''''''''''''''''''''''''''''''; } fwrite(buffer,600,1,fp); free(buffer); fclose(fp); returnOK; } voidError(char*message) { clrscr(); fprintf(serr,"Error: %s\n",message); exit (1); }/*Error*/ StatusInitStack(Stack*s) /*Thestackshasbeencreatedandisinitializedtobeempty.*/ { s->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(! s->base)Error("Overflow"); s->top=s->base; s->stacksize=STACK_INIT_SIZE; returnOK; }/*InitStack*/ StatusDesoyStack(Stack*s) /*Thestackshasbeendesoyed.*/ { s->top=NULL; s->stacksize=0; free(s->base); s->base=NULL; returnOK; }/*DesoyStack*/ StatusClearStack(Stack*s) /*Thestackhasbeencleartobemaximum.*/ { s->top=s->base; s->stacksize=STACK_INIT_SIZE; returnOK; }/*ClearStack*/ BooleanStackEmpty(Stack*s) /*Checkifthestacksisempty.*/ { if(s->top==s->base)returnTRUE; elsereturnFALSE; }/*StackEmpty*/ intStackLength(Stack*s) /*Gainthelengthofthestacks.*/ { if(s->top>s->base)return(int)(s->top-s->base); elsereturn0; }/*StackLength*/ StatusPush(Stack*s,SElemTypee) /*Theelementehasbeenpushedintothestacks.*/ { if(s->top-s->base>=s->stacksize) { s->base=(SElemType*)realloc(s->base, (s->stacksizeSTACKINCREMENT)*sizeof(SElemType)); if(! s->base)Error("Overflow"); s->top=s->bases->stacksize; s->stacksize=STACKINCREMENT; } *s->top=e; returnOK; }/*Push*/ SElemTypePop(Stack*s,SElemTypee) /*Theelementehasbeenremovedfromthestacks.*/ { if(s->top==s->base)Error("Pop"); e=*--s->top; returne; }/*Pop*/ StatusGetTop(Stack*s,SElemType*e) /*Theelementehasgottothetopofthestacks.*/ { if(s->top==s->base)Error("GetTop"); *e=*(s->top-1); returnOK; }/*GetTop*/ /*Traversethestacksusing''''''''''''''''''''''''''''''''visiting''''''''''''''''''''''''''''''''function.*/ /*StatusStackTraverse(Stack*s,Status(*visit)(SElemType*se)) { SElemTypep; intresult; if(s->top==s->base)returnERROR; p=s->base; while(! (p==s->top)) { result=(*visit)(p); p; } returnOK; }*/ BooleanPass(PosTypecurpos) /*Checkifthecurrentpositioncanbepassed.*/ { if(maze[curpos.x][curpos.y].==1&& maze[curpos.x][curpos.y].foot==0&&maze[curpos.x][curpos.y].mark==0) returnTRUE; elsereturnFALSE; }/*Pass*/ voidMarkPrint(PosTypeseat) /*Markthepositionseat.*/ { maze[seat.x]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 迷宫 游戏 语言 小游戏 源代码
![提示](https://static.bingdoc.com/images/bang_tan.gif)