C语言 推箱子小游戏 可重玩 可选关 保存记录
2013-03-10 01:37
531 查看
转载请保留此行,来自Vic___
这是DLNU大一的题目,估计我发上来后,这个课题的难度大大降低。
可以随意增加地图
根据20*20的画就行
0:可移动 1:墙 2:目的地 3:箱子 5:玩家
记得也要增加“存在关数”
这是DLNU大一的题目,估计我发上来后,这个课题的难度大大降低。
可以随意增加地图
根据20*20的画就行
0:可移动 1:墙 2:目的地 3:箱子 5:玩家
记得也要增加“存在关数”
//----------------------------------- // // version 1.0 // From Vic___ // //----------------------------------- #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <fstream.h> void DisplayMap(); const int completelevel=5;//存在关数 int dataMap[30][20][20]= { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0, //0:可移动 1:墙 2:目的地 3:箱子 5:玩家 0,0,0,0,0,0,0,1,1,3,1,1,1,0,0,0,0,0,0,0, 0,0,0,0,0,1,1,2,3,5,3,2,1,0,0,0,0,0,0,0, 0,0,0,0,0,1,2,3,0,0,1,1,1,0,0,0,0,0,0,0, 0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,2,2,2,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,1,3,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,1,5,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,0,3,3,0,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,2,0,3,1,1,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,2,0,5,0,0,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,1,3,0,1,0,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,5,0,0,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,0,3,3,1,0,1,1,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,3,0,1,0,1,2,1,0,0,0,0,0, 0,0,0,0,0,0,1,1,1,0,1,1,1,2,1,0,0,0,0,0, 0,0,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0, 0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0, 0,0,0,1,1,3,1,1,1,0,0,0,1,0,0,0,0,0,0,0, 0,0,0,1,0,0,5,3,0,0,3,0,1,0,0,0,0,0,0,0, 0,0,0,1,0,2,2,1,0,3,0,1,1,0,0,0,0,0,0,0, 0,0,0,1,1,2,2,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } }; int Map[20][20]; int level=0; int x,y; int bestdata[30]={0}; int ReadKey() { int a; a=getch(); if(a==114) return 0; if(a==122) return 10; if(a==120) return 11; if(a==224) { a=getch(); switch(a) { case 72:return 1; case 75:return 2; case 80:return 3; case 77:return 4; } } else return 0; } void FindXY() { int i,j; for(i=0;i<20;i++) for(j=0;j<20;j++) if(Map[i][j]==5 ||Map[i][j]==7) { y=i;x=j;break; } } void GameStart() { int i,j; for(i=0;i<20;i++) for(j=0;j<20;j++) Map[i][j]=dataMap[level][i][j]; FindXY(); DisplayMap(); printf("第 %d 关\t\t最佳纪录 %d 步\n\nR:重玩\tZ:上关\tX:下关\n",level+1,bestdata[level]); } void HandleKey(int key) { if(key==1)//上 { int y1,y2; y1=y-1; y2=y-2; if(y1<0) return ; else if(Map[y1][x]==3||Map[y1][x]==4) { if(Map[y2][x]==3 ||Map[y2][x]==4||Map[y2][x]==1) return ; else if(Map[y2][x]==0 ||Map[y2][x]==2) { // tuixiangzi Map[y][x]-=5; if(Map[y1][x]==3) Map[y1][x]=5; else if(Map[y1][x]==4) Map[y1][x]=7; if(Map[y2][x]==0) Map[y2][x]=3; else if(Map[y2][x]==2) Map[y2][x]=4; FindXY(); } } else if(Map[y1][x]==0 ||Map[y1][x]==2) { Map[y][x]-=5;Map[y1][x]+=5; FindXY(); } } else if(key==2) //左 { int x1,x2; x1=x-1; x2=x-2; if(x1<0) return ; else if(Map[y][x1]==1) return ; else if(Map[y][x1]==3||Map[y][x1]==4) { if(Map[y][x2]==3 ||Map[y][x2]==4||Map[y][x2]==1) return ; else if(Map[y][x2]==0 ||Map[y][x2]==2) { // tuixiangzi Map[y][x]-=5; if(Map[y][x1]==3) Map[y][x1]=5; else if(Map[y][x1]==4) Map[y][x1]=7; if(Map[y][x2]==0) Map[y][x2]=3; else if(Map[y][x2]==2) Map[y][x2]=4; FindXY(); } } else if(Map[y][x1]==0 ||Map[y][x1]==2) { Map[y][x]-=5;Map[y][x1]+=5; FindXY(); } } else if(key==3)//下 { int y1,y2; y1=y+1; y2=y+2; if(y1>=20) return ; else if(Map[y1][x]==3||Map[y1][x]==4) { if(Map[y2][x]==3 ||Map[y2][x]==4||Map[y2][x]==1) return ; else if(Map[y2][x]==0 ||Map[y2][x]==2) { // tuixiangzi Map[y][x]-=5; if(Map[y1][x]==3) Map[y1][x]=5; else if(Map[y1][x]==4) Map[y1][x]=7; if(Map[y2][x]==0) Map[y2][x]=3; else if(Map[y2][x]==2) Map[y2][x]=4; FindXY(); } } else if(Map[y1][x]==0 ||Map[y1][x]==2) { Map[y][x]-=5;Map[y1][x]+=5; FindXY(); } } else if(key==4)//右 { int x1,x2; x1=x+1; x2=x+2; if(x1>=20) return ; else if(Map[y][x1]==1) return ; else if(Map[y][x1]==3||Map[y][x1]==4) { if(Map[y][x2]==3 ||Map[y][x2]==4||Map[y][x2]==1) return ; else if(Map[y][x2]==0 ||Map[y][x2]==2) { Map[y][x]-=5; if(Map[y][x1]==3) Map[y][x1]=5; else if(Map[y][x1]==4) Map[y][x1]=7; if(Map[y][x2]==0) Map[y][x2]=3; else if(Map[y][x2]==2) Map[y][x2]=4; FindXY();// tuixiangzi } } else if(Map[y][x1]==0 ||Map[y][x1]==2) { Map[y][x]-=5;Map[y][x1]+=5; FindXY(); } } } void DisplayMap() { int i,j; for(i=0;i<20;i++) { for(j=0;j<20;j++) { switch(Map[i][j]) { case 0:printf(" ");break; case 1:printf("▓");break; case 2:printf("※");break; case 3:printf("□");break; case 4:printf("■");break; case 5:printf("♀");break; case 7:printf("♂");break; } } printf("\n"); } } int JudgeComplete() { int i,j; for(i=0;i<20;i++) for(j=0;j<20;j++) if(2==Map[i][j]||3==Map[i][j]) return 0; return 1; } void OpenData() { int i=0; ifstream ifile("save.dat",ios::binary); if(!ifile) { printf("不能打开文件\n"); return; } while(!ifile.eof()) { ifile.read((char *)&bestdata[i],sizeof(bestdata[i])); i++; } ifile.close(); } void SaveData() { ofstream ofile("save.dat",ios::binary); if(!ofile) { printf("不能存入文件\n"); return; } for(int i=0;i<completelevel;i++) ofile.write((char *)&bestdata[i],sizeof(bestdata[i])); ofile.close(); } void main() { OpenData(); int key,move,movex,movey; while(1){ GameStart(); move=0; while(1) { movex=x; movey=y; key=ReadKey(); if(1!=key&&2!=key&&3!=key&&4!=key) break; HandleKey(key); if(movex!=x||movey!=y)move++; system("cls"); DisplayMap(); printf("第 %d 关\t\t已走 %d 步\t最佳纪录 %d 步\n\nR:重玩\tZ:上关\tX:下关\n",level+1,move,bestdata[level]); if(JudgeComplete()) break; } if(10==key) { if(0==level){printf("这是第一关!!!");system("pause");} else level--; } else if(11==key) { if(completelevel==level+1){printf("这是最后一关!!!");system("pause");} else level++; } else if(0!=key) { if(0==bestdata[level]||move<bestdata[level]) { bestdata[level]=move; printf("恭喜破纪录了\n"); SaveData(); } printf("恭喜进入下一关\n"); level++; system("pause"); system("cls"); } if(completelevel==level) { printf("恭喜你打通所有关了!\n"); system("pause"); return; } system("cls"); } }
相关文章推荐
- 012-C语言小游戏之推箱子
- C语言,用EGE图形库实现推箱子小游戏
- 学习ios第八天 番外篇 《c语言小游戏 推箱子的实现》
- C语言编程 - 推箱子小游戏源码分享 (含过关)
- c语言实现的推箱子小游戏-1
- C语言实现推箱子小游戏
- c语言小游戏,推箱子
- 黑马程序员--C语言自学笔记---11数组、指针、推箱子小游戏
- C语言 推箱子小游戏(多年前入门时所写)
- C语言精华记录——叁(数组与指针①)
- 聊天记录保存方式
- Qt/C++ 开发Android平台《林中伊人》消球小游戏全记录4——半个美工的诞生
- 删除有两个字段相同的多条重复记录,只保存一条
- 对sklearn训练结果进行保存(joblib或pickle或cPickle的使用问题记录)
- C语言学习记录 指针数组和数组指针的区别
- 手动设置QQ聊天记录保存目录
- c语言简单小游戏(模拟魔塔)
- C语言学习记录3
- Winform中保存当前控件的记录
- <转>修改TM2013聊天记录保存目录final版