简易版推箱子游戏
来源:互联网 发布:淘宝脐橙好不好卖 编辑:程序博客网 时间:2024/06/05 19:57
关于文件的使用,在这个代码里你要先创建一个D:\\data.txt,,否则不行,你也可以改变一下文件的打开方式。
这里有一些新的功能函数,比如gotoxy()这个自定义函数,里面的一些代码,你可能没学过,在网上可以搜到,其实
这也是定位光标的固定代码,在这个函数里电脑屏幕是一个坐标系,原点在左上角。
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<windows.h>#include<conio.h>int rx,ry; //小人在每一步的坐标int count=0;FILE *fp; //文件指针//w--墙 ‘ ’--空地 i--有箱子的目的地 m--目的地 r--小人 s--有小人的目的地char status[22][22]; //状态数组void gotoxy(int x,int y);void initstatus();void putoutChar(int x,int y,char ch);void color(int x);void showMain();int judge1();int judge2();int judge3();int judge4();void putoutDestination(int x,int y);void putoutMan(int x,int y);void putoutBox(int x,int y);void putoutDbox(int x,int y);void putoutBlank(int x,int y);void firstfreshenDestination();void secondfreshenDestination();void thirdfreshenDestination();void fourfreshenDestination();void moveUp(int num);void moveDown(int num);void moveLeft(int num);void moveRight(int num);void reset(int num);int move(int num);void firstprintWall();void firstprintBox();int first();int second();int third();int four();void inFile();void outFile();void step();/***写入文件*/void inFile(){ int s=0;if((fp= fopen("D:\\data.txt","r"))==NULL){ printf("Can not open file!\n");exit(1);} fscanf(fp,"%d",&s); fclose(fp); if((fp= fopen("D:\\data.txt","w"))==NULL){ printf("Can not open file!\n");exit(1);} if(s>count) { fprintf(fp,"%d",count); } else { fprintf(fp,"%d",s); } fclose(fp);}/***读取文件*/void outFile(){ int s=0; if((fp= fopen("D:\\data.txt","r"))==NULL){ printf("Can not open file!\n");exit(1);}fscanf(fp,"%d",&s);color(13); gotoxy(7,13); printf("玩家最少步数为\n"); gotoxy(7,15);printf(": %d",s);fclose(fp);}/***第一关步数*/void step(){ color(13); gotoxy(7,10); printf("步数:%d",count);}/***将光标移到指定位置*/void gotoxy(int x,int y){ HANDLE hout; COORD pos={x,y}; hout=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hout,pos);}/***初始化状态数组*/void initStatus(){ int i,j; for(i=0;i<=80;i++) { for(j=0;j<=80;j++) { status[i][j]=' '; } }}/***指定位置输出指定字符*/void putoutChar(int x,int y,char ch){ gotoxy(x,y); printf("%c",ch);}/****/void color(int x) //自定义函根据参数改变颜色{ if(x>=0 && x<=15)//参数在0-15的范围颜色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x); else SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);//默认的颜色白色}/***主界面*/void showMain(){ int x,y; for(x=1,y=0;x<=60;x++) { color(4); putoutChar(x,y,'_'); } for(x=1,y=20;x<=60;x++) { color(4); putoutChar(x,y,'_'); } for(x=1,y=1;y<=20;y++) { color(4); putoutChar(x,y,'|'); } for(x=60,y=1;y<=20;y++) { color(4); putoutChar(x,y,'|'); } gotoxy(22,15); color(4); printf("游戏基本操作:\n"); gotoxy(22,16); color(4); printf("w--上\ts--下\n"); gotoxy(22,17); color(4); printf("a--左\td--右\n"); gotoxy(5,3); color(4); printf("ESC键退出游戏\n"); gotoxy(39,3); color(4); printf("按b重置当前关卡\n"); gotoxy(39,10); color(4); printf("按字母n可直接跳入\n"); gotoxy(39,11); color(4); printf("下一关卡\n"); gotoxy(46,16); color(4); printf("w\n"); gotoxy(45,17); color(4); printf("asd\n"); gotoxy(39,16); color(4); printf("--->\n"); gotoxy(39,17); color(4); printf("--->\n");}/***判断第一关是否完成*/int judge1(){ int flag=0; if(status[24][7]=='i'&&status[24][8]=='i'&&status[24][9]=='i') { flag=1; } return flag;}/***判断第二关是否完成*/int judge2(){ int flag=0; if(status[24][7]=='i'&&status[24][8]=='i') { flag=1; } return flag;}/***判断第三关是否完成*/int judge3(){ int flag=0; if(status[24][7]=='i') { flag=1; } return flag;}/***判断第四关是否完成*/int judge4(){ int flag=0; if(status[24][7]=='i'&&status[24][8]=='i'&&status[24][9]=='i'&&status[29][11]=='i') { flag=1; } return flag;}/***指定位置打印目的地*/void putoutDestination(int x,int y){ putoutChar(x,y,3);}/***指定位置打印小人*/void putoutMan(int x,int y){ color(8); putoutChar(x,y,2);}/***指定位置打印箱子*/void putoutBox(int x,int y){ color(7); putoutChar(x,y,4);}/***指定位置打印在目的地的箱子*/void putoutDbox(int x,int y){ color(13); putoutChar(x,y,22);}/***指定位置打印空格*/void putoutBlank(int x,int y){ putoutChar(x,y,' ');}/***刷新第一关的目的地*/void firstfreshenDestination(){ color(6); if(status[24][7]!='s'&&status[24][7]!='i') { putoutDestination(24,7); status[24][7]='m'; } if(status[24][8]!='s'&&status[24][8]!='i') { putoutDestination(24,8); status[24][8]='m'; } if(status[24][9]!='s'&&status[24][9]!='i') { putoutDestination(24,9); status[24][9]='m'; }}/***刷新第二关的目的地*/void secondfreshenDestination(){ color(6); if(status[24][7]!='s'&&status[24][7]!='i') { putoutDestination(24,7); status[24][7]='m'; } if(status[24][8]!='s'&&status[24][8]!='i') { putoutDestination(24,8); status[24][8]='m'; }}/***刷新第三关的目的地*/void thirdfreshenDestination(){ color(6); if(status[24][7]!='s'&&status[24][7]!='i') { putoutDestination(24,7); status[24][7]='m'; }}/***刷新第四关的目的地*/void fourfreshenDestination(){ color(6); if(status[24][7]!='s'&&status[24][7]!='i') { putoutDestination(24,7); status[24][7]='m'; } if(status[24][8]!='s'&&status[24][8]!='i') { putoutDestination(24,8); status[24][8]='m'; } if(status[24][9]!='s'&&status[24][9]!='i') { putoutDestination(24,9); status[24][9]='m'; } if(status[29][11]!='s'&&status[29][11]!='i') { putoutDestination(29,11); status[29][11]='m'; }}/***向上走*/void moveUp(int num){ int flag=1; int f=1; if(f==1&&status[rx][ry-1]=='w') { flag=0; f=0; } else if(f==1&&status[rx][ry-1]=='b') { if(f==1&&status[rx][ry-2]=='w'||status[rx][ry-2]=='b'||status[rx][ry-2]=='i') { flag=0; f=0; } else if(f==1&&status[rx][ry-2]=='m') { f=0; //在位置的上上方打印目的地箱子的标志 putoutDbox(rx,ry-2); //在位置的上方打印小人的标志,并把原位置标志消除 putoutMan(rx,ry-1); putoutBlank(rx,ry); //改变状态 status[rx][ry-2]='i'; status[rx][ry-1]='r'; status[rx][ry]=' '; } else if(f==1&&status[rx][ry-2]==' ') { f=0; //在位置的上上方打印箱子的标志 putoutBox(rx,ry-2); //在位置的上方打印小人的标志,并把原位置标志消除 putoutMan(rx,ry-1); putoutBlank(rx,ry); //改变状态 status[rx][ry-2]='b'; status[rx][ry-1]='r'; status[rx][ry]=' '; } } else if(f==1&&status[rx][ry-1]=='i') { if(f==1&&status[rx][ry-2]=='w'||status[rx][ry-2]=='b'||status[rx][ry-2]=='i') { flag=0; f=0; } else if(f==1&&status[rx][ry-2]=='m') { f=0; //在位置的上上方打印目的地箱子的标志 putoutDbox(rx,ry-2); //在位置的上方打印目的地小人的标志,并把原位置标志消除 putoutMan(rx,ry-1); putoutBlank(rx,ry); //改变状态 status[rx][ry-2]='i'; status[rx][ry-1]='s'; status[rx][ry]=' '; } } else if(f==1&&status[rx][ry-1]==' ') { f=0; //在位置的上方打印小人的标志,并把原位置标志消除 putoutBlank(rx,ry); putoutMan(rx,ry-1); //改变状态 status[rx][ry-1]='r'; status[rx][ry]=' '; } else if(f==1&&status[rx][ry-1]=='m') { f=0; //在位置的上方打印目的地小人的标志,并把原位置标志消除 putoutBlank(rx,ry); putoutMan(rx,ry-1); //改变状态 status[rx][ry-1]='s'; status[rx][ry]=' '; } if(flag) { ry--; } if(num==1) { firstfreshenDestination(); } else if(num==2) { secondfreshenDestination(); } else if(num==3) { thirdfreshenDestination(); } else if(num==4) { fourfreshenDestination(); } gotoxy(rx,ry);}/***向下走*/void moveDown(int num){ int flag=1; int f=1; if(f==1&&status[rx][ry+1]=='w') { flag=0; f=0; } else if(f==1&&status[rx][ry+1]=='b') { if(f==1&&status[rx][ry+2]=='w'||status[rx][ry+2]=='b'||status[rx][ry+2]=='i') { flag=0; f=0; } else if(f==1&&status[rx][ry+2]=='m') { f=0; //在位置的下下方打印目的地箱子的标志 putoutDbox(rx,ry+2); //在位置的下方打印小人的标志,并把原位置标志消除 putoutMan(rx,ry+1); putoutBlank(rx,ry); //改变状态 status[rx][ry+2]='i'; status[rx][ry+1]='r'; status[rx][ry]=' '; } else if(f==1&&status[rx][ry+2]==' ') { f=0; //在位置的下下方打印箱子的标志 putoutBox(rx,ry+2); //在位置的下方打印小人的标志,并把原位置标志消除 putoutMan(rx,ry+1); putoutBlank(rx,ry); //改变状态 status[rx][ry+2]='b'; status[rx][ry+1]='r'; status[rx][ry]=' '; } } else if(f==1&&status[rx][ry+1]=='i') { if(f==1&&status[rx][ry+2]=='w'||status[rx][ry+2]=='b'||status[rx][ry+2]=='i') { flag=0; f=0; } else if(f==1&&status[rx][ry+2]=='m') { f=0; //在位置的下下方打印目的地箱子的标志 putoutDbox(rx,ry+2); //在位置的下方打印目的地小人的标志,并把原位置标志消除 putoutMan(rx,ry+1); putoutBlank(rx,ry); //改变状态 status[rx][ry+2]='i'; status[rx][ry+1]='s'; status[rx][ry]=' '; } } else if(f==1&&status[rx][ry+1]==' ') { f=0; //在位置的下方打印小人的标志,并把原位置标志消除 putoutBlank(rx,ry); putoutMan(rx,ry+1); //改变状态 status[rx][ry+1]='r'; status[rx][ry]=' '; } else if(f==1&&status[rx][ry+1]=='m') { f=0; //在位置的下方打印小人的标志,并把原位置标志消除 putoutBlank(rx,ry); putoutMan(rx,ry+1); //改变状态 status[rx][ry+1]='s'; status[rx][ry]=' '; } if(flag) { ry++; } if(num==1) { firstfreshenDestination(); } else if(num==2) { secondfreshenDestination(); } else if(num==3) { thirdfreshenDestination(); } else if(num==4) { fourfreshenDestination(); } gotoxy(rx,ry);}/***向左走*/void moveLeft(int num){ int flag=1; int f=1; if(f==1&&status[rx-1][ry]=='w') { flag=0; f=0; } else if(f==1&&status[rx-1][ry]=='b') { if(f==1&&status[rx-2][ry]=='w'||status[rx-2][ry]=='b'||status[rx-2][ry]=='i') { flag=0; f=0; } else if(f==1&&status[rx-2][ry]=='m') { f=0; //在位置的左左方打印目的地箱子的标志 putoutDbox(rx-2,ry); //在位置的左方打印小人的标志,并把原位置标志消除 putoutMan(rx-1,ry); putoutBlank(rx,ry); //改变状态 status[rx-2][ry]='i'; status[rx-1][ry]='r'; status[rx][ry]=' '; } else if(f==1&&status[rx-2][ry]==' ') { f=0; //在位置的左左方打印箱子的标志 putoutBox(rx-2,ry); //在位置的左方打印小人的标志,并把原位置标志消除 putoutMan(rx-1,ry); putoutBlank(rx,ry); //改变状态 status[rx-2][ry]='b'; status[rx-1][ry]='r'; status[rx][ry]=' '; } } else if(f==1&&status[rx-1][ry]=='i') { if(f==1&&status[rx-2][ry]=='w'||status[rx-2][ry]=='b'||status[rx-2][ry]=='i') { flag=0; f=0; } else if(f==1&&status[rx-2][ry]=='m') { f=0; //在位置的左左方打印目的地箱子的标志 putoutDbox(rx-2,ry); //在位置的左方打印目的地小人的标志,并把原位置标志消除 putoutMan(rx-1,ry); putoutBlank(rx,ry); //改变状态 status[rx-2][ry]='i'; status[rx-1][ry]='s'; status[rx][ry]=' '; } } else if(f==1&&status[rx-1][ry]==' ') { f=0; //在位置的左方打印小人的标志,并把原位置标志消除 putoutBlank(rx,ry); putoutMan(rx-1,ry); //改变状态 status[rx-1][ry]='r'; status[rx][ry]=' '; } else if(f==1&&status[rx-1][ry]=='m') { f=0; //在位置的左方打印目的地小人的标志,并把原位置标志消除 putoutBlank(rx,ry); putoutMan(rx-1,ry); //改变状态 status[rx-1][ry]='s'; status[rx][ry]=' '; } if(flag) { rx--; } if(num==1) { firstfreshenDestination(); } else if(num==2) { secondfreshenDestination(); } else if(num==3) { thirdfreshenDestination(); } else if(num==4) { fourfreshenDestination(); } gotoxy(rx,ry);}/***向右走*/void moveRight(int num){ int flag=1; int f=1; if(f==1&&status[rx+1][ry]=='w') { flag=0; f=0; } else if(f==1&&status[rx+1][ry]=='b') { if(f==1&&status[rx+2][ry]=='w'||status[rx+2][ry]=='b'||status[rx+2][ry]=='i') { flag=0; f=0; } else if(f==1&&status[rx+2][ry]=='m') { f=0; //在位置的右右方打印目的地箱子的标志 putoutDbox(rx+2,ry); //在位置的右方打印小人的标志,并把原位置标志消除 putoutMan(rx+1,ry); putoutBlank(rx,ry); //改变状态 status[rx+2][ry]='i'; status[rx+1][ry]='r'; status[rx][ry]=' '; } else if(f==1&&status[rx+2][ry]==' ') { f=0; //在位置的右方打印箱子的标志,并把原位置标志消除 putoutBox(rx+2,ry); //在位置的右方打印小人的标志,并把原位置标志消除 putoutMan(rx+1,ry); putoutBlank(rx,ry); //改变状态 status[rx+2][ry]='b'; status[rx+1][ry]='r'; status[rx][ry]=' '; } } else if(f==1&&status[rx+1][ry]=='i') { if(f==1&&status[rx+2][ry]=='w'||status[rx+2][ry]=='b'||status[rx+2][ry]=='i') { flag=0; f=0; } else if(f==1&&status[rx+2][ry]=='m') { f=0; //在位置的右右方打印目的地箱子的标志 putoutDbox(rx+2,ry); //在位置的右方打印目的地小人的标志,并把原位置标志消除 putoutMan(rx+1,ry); putoutBlank(rx,ry); //改变状态 status[rx+2][ry]='i'; status[rx+1][ry]='s'; status[rx][ry]=' '; } } else if(f==1&&status[rx+1][ry]==' ') { f=0; //在位置的右方打印小人的标志,并把原位置标志消除 putoutBlank(rx,ry); putoutMan(rx+1,ry); //改变状态 status[rx+1][ry]='r'; status[rx][ry]=' '; } else if(f==1&&status[rx+1][ry]=='m') { f=0; //在位置的右方打印小人的标志,并把原位置标志消除 putoutBlank(rx,ry); putoutMan(rx+1,ry); //改变状态 status[rx+1][ry]='s'; status[rx][ry]=' '; } if(flag) { rx++; } if(num==1) { firstfreshenDestination(); } else if(num==2) { secondfreshenDestination(); } else if(num==3) { thirdfreshenDestination(); } else if(num==4) { fourfreshenDestination(); } gotoxy(rx,ry);}/***重置当前关*/void reset(int num){ system("cls"); if(num==1) { first(); } else if(num==2) { second(); } else if(num==3) { third(); } else if(num==4) { four(); }}/***输入移动字符**分配对应的移动函数*/int move(int num){ char ch; int a=1; char choose=1; int choo; int flag=1; while(a) { ch=getch(); switch(ch) { case 'w': moveUp(num);count++;step();break; case 's': moveDown(num);count++;step();break; case 'a': moveLeft(num);count++;step();break; case 'd': moveRight(num);count++;step();break; case 'b': reset(num);break; case 'n': a=0;break; default :break; } if(ch==27) { flag=0; break; } if(num==1) { if(judge1()) { frame(); inFile(); gotoxy(22,8); color(13); printf("恭喜您通过第一关成功\n"); gotoxy(22,9); printf("是否进行第二关?\n"); gotoxy(22,10); printf("1---是 2---否\n"); gotoxy(22,11); while(1) { choose=getch(); choose-=48; choo=choose; if(choo==1) { flag=1; break; } else if(choo==2) { flag=0; break; } else { gotoxy(22,13); printf("输入有误,请重新输入\n"); } } break; } } else if(num==2) { if(judge2()) { frame(); inFile(); gotoxy(22,8); color(13); printf("恭喜您通过第二关成功\n"); gotoxy(22,9); printf("是否进行第三关?\n"); gotoxy(22,10); printf("1---是 2---否\n"); gotoxy(22,11); while(1) { choose=getch(); choose-=48; choo=choose; if(choo==1) { flag=1; break; } else if(choo==2) { flag=0; break; } else { gotoxy(22,13); printf("输入有误,请重新输入\n"); } } break; } } else if(num==3) { if(judge3()) { frame(); inFile(); gotoxy(22,8); color(13); printf("恭喜您通过第三关成功\n"); gotoxy(22,9); printf("是否进行第四关?\n"); gotoxy(22,10); printf("1---是 2---否\n"); gotoxy(22,11); while(1) { choose=getch(); choose-=48; choo=choose; if(choo==1) { flag=1; break; } else if(choo==2) { flag=0; break; } else { gotoxy(22,13); printf("输入有误,请重新输入\n"); } } break; } } else if(num==4) { if(judge4()) { frame(); inFile(); gotoxy(22,8); color(13); printf("恭喜您通过第四关成功\n"); gotoxy(22,9); printf("恭喜你已经通过所有关卡\n"); gotoxy(22,10); system("pause"); break; } } } return flag;}/***第一关初始化墙壁*/void firstprintWall(){ int x,y; color(2); for(x=3,y=4;y<=9;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=5,y=4;y<=6;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=7,y=2;y<=6;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=11,y=2;y<=6;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=6,y=8;y<=10;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=10,y=6;y<=10;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } putoutChar(24,6,1); status[24][6]='w'; for(x=8,y=2;x<=10;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } putoutChar(26,8,1); status[26][8]='w'; for(x=9,y=6;x<=10;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=4,y=9;x<=5;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=7,y=10;x<=9;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; }}/***第一关初始化箱子*/void firstprintBox(){ color(7); putoutChar(28,6,4); status[28][6]='b'; putoutChar(29,6,4); status[29][6]='b'; putoutChar(29,7,4); status[29][7]='b';}/***第一关初始化目的地*/void firstprintDestination(){ color(6); putoutChar(24,7,3); status[24][7]='m'; putoutChar(24,8,3); status[24][8]='m'; putoutChar(24,9,3); status[24][9]='m';}/***第一关初始化小人*/void firstprintMan(){ color(7); putoutChar(30,5,2); status[30][5]='r';}/***第一关初始化屏幕*/void firstinit(){ firstprintWall();//初始化墙壁 firstprintBox();//初始化箱子 firstprintDestination();//初始化目的地 firstprintMan();//初始化小人}/***第一关*/int first(){ int flag=1; count=0; system("cls"); initStatus(); showMain(); gotoxy(26,2); color(4); printf("第一关\n"); firstinit(); gotoxy(30,5); rx=30;ry=5; flag=move(1); gotoxy(1,20); return flag;}/***第二关初始化墙壁*/void secondprintWall(){ int x,y; color(2); for(x=3,y=4;y<=9;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=5,y=4;y<=6;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=7,y=2;y<=6;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=11,y=2;y<=6;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=6,y=8;y<=10;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=10,y=6;y<=10;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } putoutChar(24,6,1); status[24][6]='w'; for(x=8,y=2;x<=10;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } putoutChar(26,8,1); status[26][8]='w'; for(x=9,y=6;x<=10;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=4,y=9;x<=5;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=7,y=10;x<=9;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; }}/***第二关初始化箱子*/void secondprintBox(){ color(7); putoutChar(28,6,4); status[28][6]='b'; putoutChar(29,6,4); status[29][6]='b';}/***第二关初始化目的地*/void secondprintDestination(){ color(6); putoutChar(24,7,3); status[24][7]='m'; putoutChar(24,8,3); status[24][8]='m';}/***第二关初始化小人*/void secondprintMan(){ color(7); putoutChar(29,5,2); status[29][5]='r';}/***第二关初始化屏幕*/void secondinit(){ secondprintWall();//初始化墙壁 secondprintBox();//初始化箱子 secondprintDestination();//初始化目的地 secondprintMan();//初始化小人}/***第二关*/int second(){ int flag=1; count=0; system("cls"); initStatus(); gotoxy(26,2); color(4); printf("第二关\n"); showMain(); secondinit(); gotoxy(29,5); rx=29;ry=5; flag=move(2); gotoxy(1,20); return flag;}/***第三关初始化墙壁*/void thirdprintWall(){ int x,y; color(2); for(x=3,y=4;y<=9;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=5,y=4;y<=6;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=7,y=2;y<=6;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=11,y=2;y<=6;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=6,y=8;y<=10;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=10,y=6;y<=10;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } putoutChar(24,6,1); status[24][6]='w'; for(x=8,y=2;x<=10;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } putoutChar(26,8,1); status[26][8]='w'; for(x=9,y=6;x<=10;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=4,y=9;x<=5;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=7,y=10;x<=9;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; }}/***第三关初始化箱子*/void thirdprintBox(){ color(7); putoutChar(28,6,4); status[28][6]='b';}/***第三关初始化目的地*/void thirdprintDestination(){ color(6); putoutChar(24,7,3); status[24][7]='m';}/***第三关初始化小人*/void thirdprintMan(){ color(8); putoutChar(28,5,2); status[28][5]='r';}/***第三关初始化屏幕*/void thirdinit(){ thirdprintWall();//初始化墙壁 thirdprintBox();//初始化箱子 thirdprintDestination();//初始化目的地 thirdprintMan();//初始化小人}/***第三关*/int third(){ int flag=1; count=0; system("cls"); initStatus(); gotoxy(26,2); color(4); printf("第三关\n"); showMain(); thirdinit(); gotoxy(28,5); rx=28;ry=5; flag=move(3); gotoxy(1,20); return flag;}/***第四关初始化墙壁*/void fourprintWall(){ int x,y; color(2); for(x=3,y=4;y<=9;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=5,y=4;y<=6;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=7,y=1;y<=6;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=12,y=1;y<=6;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=6,y=8;y<=10;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=10,y=6;y<=10;y++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } putoutChar(24,6,1); status[24][6]='w'; for(x=8,y=1;x<=11;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } putoutChar(26,8,1); status[26][8]='w'; putoutChar(31,8,1); status[31][8]='w'; for(x=9,y=6;x<=10;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=4,y=9;x<=5;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; } for(x=7,y=10;x<=9;x++) { putoutChar(x+20,y+2,1); status[x+20][y+2]='w'; }}/***第四关初始化箱子*/void fourprintBox(){ color(7); putoutChar(28,6,4); status[28][6]='b'; putoutChar(29,6,4); status[29][6]='b'; putoutChar(29,7,4); status[29][7]='b'; putoutChar(28,10,4); status[28][10]='b';}/***第四关初始化目的地*/void fourprintDestination(){ color(6); putoutChar(24,7,3); status[24][7]='m'; putoutChar(24,8,3); status[24][8]='m'; putoutChar(24,9,3); status[24][9]='m'; putoutChar(29,11,3); status[29][11]='m';}/***第四关初始化小人*/void fourprintMan(){ color(8); putoutChar(26,9,2); status[26][9]='r';}/***第四关初始化屏幕*/void fourinit(){ fourprintWall();//初始化墙壁 fourprintBox();//初始化箱子 fourprintDestination();//初始化目的地 fourprintMan();//初始化小人}/***第四关*/int four(){ int flag=1; count=0; system("cls"); initStatus(); gotoxy(26,2); color(4); printf("第四关\n"); showMain(); fourinit(); gotoxy(26,9); rx=26;ry=9; flag=move(4); gotoxy(1,20); return flag;}/***打印边框*/void frame(){ system("cls"); int x,y; color(4); for(x=1,y=0;x<=60;x++) { printf("1"); putoutChar(x,y,'_'); } for(x=1,y=20;x<=60;x++) { putoutChar(x,y,'_'); } for(x=1,y=1;y<=20;y++) { putoutChar(x,y,'|'); } for(x=60,y=1;y<=20;y++) { putoutChar(x,y,'|'); } color(1); for(x=2,y=1;x<=59;x++) { putoutChar(x,y,'_'); } for(x=2,y=19;x<=59;x++) { putoutChar(x,y,'_'); } for(x=2,y=2;y<=19;y++) { putoutChar(x,y,'|'); } for(x=59,y=2;y<=19;y++) { putoutChar(x,y,'|'); }}/***说明页面*/void explain(){ int choose; frame(); color(13); gotoxy(10,3); printf("游戏背景:\n"); gotoxy(10,4); printf(" 经典的推箱子是来自日本的古老游戏,\n"); gotoxy(10,5); printf("在一个狭小的仓库中,要求把木箱从开始位置推放到\n"); gotoxy(10,6); printf("指定的位置,而且箱子只能推,不能拉。本游戏一共4关\n"); gotoxy(10,8); printf("游戏操作:\n"); gotoxy(10,9); printf(" w---上 d---下 a---左 d---右\n"); while(1) { gotoxy(19,11); printf("1---返回上一个页面"); choose=getch(); choose-=48; if(choose==1) { break; } else { gotoxy(18,15); printf("输入有误,请重新输入"); } }}/***开始页面*/int gameStart(){ char choose; frame(); outFile(); color(13); gotoxy(27,5); printf("推箱子\n"); gotoxy(25,7); printf("1===开始游戏\n"); gotoxy(25,9); printf("0===退出游戏\n"); gotoxy(25,11); printf("2===游戏说明\n"); gotoxy(37,11); while(1) { choose=getch(); choose-=48; if(choose==1||choose==2||choose==0) { break; } else { gotoxy(22,14); printf("输入有误,请重新输入\n"); } } return choose;}/***结束页面*/void gameEnd(){ char choose; frame(); color(13); gotoxy(25,9); printf("GAME OVER\n"); gotoxy(1,21);}int main(){ int flag=1; int f; while(1) { f=gameStart(); if(f==1) { while(1) { flag=first();//第一关 if(flag==0) { break; } flag=second();//第二关 if(flag==0) { break; } flag=third();//第三关 if(flag==0) { break; } flag=four();//第四关 break; } gameEnd(); break; } else if(f==2) { explain(); } else if(f==0) { gameEnd(); break; } } return 0;}
阅读全文
1 0
- 简易版推箱子游戏
- 简易推箱子游戏
- 简易推箱子游戏
- 简易版推箱子问题
- 推箱子游戏代码
- 推箱子游戏代码
- 推箱子游戏
- 类【推箱子】游戏
- js推箱子游戏
- 应用:推箱子游戏
- jq游戏----推箱子
- 推箱子游戏
- 推箱子游戏实现
- C 推箱子游戏
- 推箱子游戏
- 推箱子游戏
- 【网易游戏】推箱子
- 推箱子游戏
- Java集合-ConcurrentHashMap工作原理和实现JDK7
- NSNUmber,NSValue,NSNull
- FPGA 主流芯片选型指导和命名规则(一)
- hdu4734 F(x) 数位dp
- 拓扑排序
- 简易版推箱子游戏
- 在action中使用Servlet API,推荐使用第三种比较简单
- [转]node的pm2启动脚本时指定日志位置
- HDU-2017中国大学生程序设计竞赛-网络选拔赛-1003-Friend-Graph
- SPOJ 7001-Visible Lattice Points (莫比乌斯反演)
- [复习]清除浮动的几种方法总结
- Java之IO(六)编码和解码
- 图像处理复习(二):SURF
- C语言 结构体与结构体指针用法总结