C语言实现连连看.doc_第1页
C语言实现连连看.doc_第2页
C语言实现连连看.doc_第3页
C语言实现连连看.doc_第4页
C语言实现连连看.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南京航空航天大学计算机专业专业: 计算机科学与技术学院姓名: 杨万学号: 161310224“mymain.cpp”文件中代码#include using namespace std;#include #include #include #include #include #include #include lianliankan.hint main()Game mygame;int selection;while(true)mygame.GameMenu();cout请输入:endl数字1进入游戏;数字2继续游戏;数字3选择游戏难度;数字4选择游戏模式;数字5查看排行榜;数字0退出游戏.selection;if(selection5)cout输入错误endl;system(cls);continue;DWORD game_start, game_end;switch(selection)case 1:char myname20;coutmyname;mygame.SetName(myname);char ch;bool is_complete = true;DWORD load_start, load_end;load_start = GetTickCount();cout游戏地图加载中,请稍后. 2000) /如果系统随机产生地图时间大于4s,则直接从map.dat文件中加载地图mygame.LoadMap();break;while(mygame.MapIsRight();game_start = GetTickCount();while(!mygame.IsComplete()if(mygame.GetGameModel() = 1&mygame.GetGameTime()*1000 mygame.GetGameEndtime()is_complete = false;cout时间到,游戏结束endl;break;mygame.PaintMap();docout是否需要变换地图,输入Y或y切换地图,按N或n终止游戏,任意字符键继续,回车、空格、TAB键无效ch;if( ch = Y|ch = y)mygame.Reset();mygame.PaintMap();if(ch = N|ch = n)is_complete = false;system(cls);break;while(ch = Y|ch = y);if(ch = N|ch = n)break;mygame.DoEiminate();game_end = GetTickCount()-game_start;mygame.SetGameTime(game_end/1000.0);if(is_complete)game_end = GetTickCount()-game_start;mygame.SetGameTime(game_end/1000.0);mygame.SaveGamer();/将完成游戏的玩家用时,和一些游戏信息存入文件中coutgame_endendl;break;case 2:char ch;DWORD game_start, game_end;bool is_complete = true;game_start = GetTickCount();while(!mygame.IsComplete()mygame.PaintMap();docout是否需要变换地图,输入Y或y切换地图,按N或n终止游戏,任意字符键继续,回车、空格、TAB键无效ch;if( ch = Y|ch = y)mygame.Reset();if(ch = N|ch = n)is_complete = false;system(cls);break;while(ch = Y|ch = y);if(ch = N|ch = n)break;mygame.DoEiminate();if(is_complete)game_end = GetTickCount()-game_start;mygame.SetGameTime(game_end/1000.0);coutgame_endendl;break;case 3:int difficulty_grade = 2; /默认难度普通cout 1. 简 单endl;cout 2. 普 通endl;cout 3. 困 难endl;docout请按相应的数字键选择您需要的游戏难度difficulty_grade;mygame.SetGameDifficuties(difficulty_grade);while(!(difficulty_grade=1|difficulty_grade=2|difficulty_grade=3);system(cls);break;case 4:int model; /游戏模式cout 1.限时模式endl;cout 2.无限时模式endl;docout请按相应的数字选择您需要的游戏模式model;mygame.SetGameModel(model);while(!(model=1|model=2);break;case 5:mygame.Ranking();break;case 0:exit(0);return 0;“lianliankan.cpp文件中代码#include using namespace std;#include #include #include #include #include #include #include #include lianliankan.h/*/*/*/Game:Game() /构造函数中随机初始化地图difficuties = 8; /默认难道为普通strcpy(name,);gametime = 0.0;endtime = 0;gamemodel = 2;/游戏模式默认设置为无限时模式score = 0;for(int i=0;i14;i+)for(int j=0;j14;j+)gamemapij = ;/*/*/*/void Game:BuildMap()int jie = difficuties; /随机创建jie阶随机字符矩阵,构造地图srand(unsigned)time(NULL); int m=(14-jie)/2;int n=(14+jie)/2;for(int i=m;in;i+)for(int j=m;jn;j+)gamemapij = A+rand()%8; /用rand()%8+A随机产生8个字母元素/*/*/*/bool Game:IsTEiminate2(int j1,int i1,int j2,int i2)int jie = difficuties;bool flag1 = true; /是否能够前通消除bool flag2 = true; /是否能够后通消除int m =0;int n=0;/是否能够左通消除for(m=(14-jie)/2;mi1;m+)if(gamemapmj1 != )flag1 = false;break;for(m=(14-jie)/2;mi2;m+)if(gamemapmj2 != )flag1 = false;break;for(m=i1+1;m(14+jie)/2;m+)if(gamemapmj1 != )flag2 = false;break;for(m=i2+1;m(14+jie)/2;m+)if(gamemapmj2 != )flag2 = false;break;if(flag1|flag2)return true;return false;/*/*/*/void Game:SetGameDifficuties(int diff) /设置游戏的难度if(diff = 1)difficuties = 4;else if(diff = 2)difficuties = 8;else if(diff = 3)difficuties = 12;/*/*/*/void Game:SaveGamer()Gamer gamer;fstream savegamer;savegamer.open(gamerinformation.dat,ios:out|ios:app|ios:binary);if(savegamer.fail()/cout打开gamerinformation.data文件失败endl;return;gamer.gametime = gametime;strcpy(,name);gamer.model = difficuties/4;savegamer.write(char*)&gamer,sizeof(gamer);savegamer.close();/*/*/*/void Game:SetName(char *myname)strcpy(name,myname);/*/*/*/bool Game:IsTEiminate1(int i1,int j1,int i2,int j2) bool flag1 = true; /是否能够左通消除bool flag2 = true; /是否能够右通消除int m =0;int n=0;int jie = difficuties;/是否能够左通消除for(m=(14-jie)/2;mj1;m+)if(gamemapi1m != )flag1 = false;break;for(m=(14-jie)/2;mj2;m+)if(gamemapi2m != )flag1 = false;break;for(m=j1+1;m(14+jie)/2;m+)if(gamemapi1m != )flag2 = false;break;for(m=j2+1;m(14+jie)/2;m+)if(gamemapi2m != )flag2 = false;break;if(flag1|flag2)return true;return false;/*/*/*/void Game:SetGameModel(int mymodel)gamemodel = mymodel;if(gamemodel = 1)if(difficuties = 4)endtime =120*1000; /简单限时模式下2分钟内如果没有完成游戏,游戏自动结束if(difficuties = 8)endtime = 360*1000; /普通限时模式下6分钟如果没有完成游戏,游戏自动结束if(difficuties = 4) endtime = 600*1000; /困难模式下10分钟如果没有完成游戏,游戏自动结束bool Game:IsVEiminate(int i,int j1,int j2) /判断是否能够垂直水平消除bool flag = true;int m=0;int n=0;for(m=j1+1;mj2;m+)if(gamemapim != )flag = false;break;for(m=j2+1;mj1;m+)if(gamemapim != )flag = false;break;return flag;/*/*/*/void Game:DoEiminate()int jie = difficuties;char ch;int xi1,i1;int xi2,i2;int xj1,j1;int xj2,j2;cout请输入你要消除的两个元素的下标,输入格式为(i,j)chxi1ch;cinxj1ch;cinchxi2ch;cinxj2ch;i1 = xi1+(14-jie)/2-1;i2 = xi2+(14-jie)/2-1;j1 = xj1+(14-jie)/2-1;j2 = xj2+(14-jie)/2-1; /进行坐标系的转化,因为屏幕输出数组和计算机中存储的字符数组下标不同if(IsEliminate(i1,j1,i2,j2)gamemapi1j1 = ;gamemapi2j2 = ;score += 10;cout*消除成功*得分:score*endl;elsecout不能消除endl;/*/*/*/bool Game:IsGEiminate(int i1,int j1,int i2,int j2)/是否可以拐弯消除int jie = difficuties;int i=1;int j=1;int m=0;int n=0;int x111 = i1,0,0,0,0,0,0,0,0,0,0;int x211 = i2,0,0,0,0,0,0,0,0,0,0;for(m=i1+1;m(14-jie)/2;n-)if(gamemapnj2 = )x2j = n;j+;if(i*j = 0)return false;for(int p=0;pi;p+)for(int q=0;qj;q+)if(x1q = x2p)if(IsVEiminate(x1q,j1,j2)return true;return false;/*/*/*/bool Game:IsGEiminate_sub1(int i1,int j1,int i2,int j2)/是否可以拐弯消除int jie = difficuties;int i=1;int j=1;int m=0;int n=0;int x111 = i1,0,0,0,0,0,0,0,0,0,0;int x211 = j2,0,0,0,0,0,0,0,0,0,0;for(m=i1+1;m(14-jie)/2;n-)if(gamemapi2n = )x2j = n;j+;if(i*j = 0)return false;for(int p=0;pi;p+)for(int q=0;qj;q+)if(x1q = i2)if(IsVEiminate(x1q,j1,x2j)return true;return false;bool Game:IsGEiminate_sub2(int i1,int j1,int i2,int j2)/是否可以拐弯消除int jie = difficuties;int i=1;int j=1;int m=0;int n=0;int x111 = i1,0,0,0,0,0,0,0,0,0,0;int x211 = j2,0,0,0,0,0,0,0,0,0,0;for(m=i1-1;m(14+jie)/2;n+)if(gamemapi2n = )x2j = n;j+;if(i*j = 0)return false;for(int p=0;pi;p+)for(int q=0;qj;q+)if(x2j = j1)if(IsVEiminate(j1,x1i,i2)return true;return false;/连连看的消除应该包括直通消除,前后消除,左右消除,和拐角消除bool Game:IsEliminate(int i1,int j1,int i2,int j2)int m=0;int n=0;if(gamemapi1j1 != gamemapi2j2)return false;if(i1 = i2) /判断是否能够水平消除if(IsVEiminate(i1,j1,j2)return true;if(j1 = j2) /判断是否能垂直消除if(IsVEiminate(j1,i1,i2)return true;if(IsTEiminate1(i1,j1,i2,j2) /判断是否能过左右通消除return true;if(IsTEiminate2(i1,j1,i2,j2) /判断是否能够前后通消除return true; if(IsTEiminate1(j1,i1,j2,i2) /判断是否能过左右通消除return true;if(IsTEiminate2(j1,i1,j2,i2) /判断是否能够前后通消除return true; if(IsGEiminate(i1,j1,i2,j2)return true;if(IsGEiminate(i2,j2,i1,j1)return true;if(IsGEiminate(j1,i1,j2,i2)return true;if(IsGEiminate(j2,i2,j1,i1)return true;if(IsGEiminate_sub1(i1,j1,i2,j2)return true;if(IsGEiminate_sub2(i1,j1,i2,j2)return true;if(IsGEiminate_sub1(i2,j2,i1,j1)return true;if(IsGEiminate_sub2(i2,j2,i1,j1)return true;return false;/*/*/*/int Game:GetFileMapNum()int num=0;fstream mapnum;if(difficuties = 4)mapnum.open(esaymap.dat,ios:in|ios:binary);if(difficuties = 8)mapnum.open(ordinarymap.dat,ios:in|ios:binary);if(difficuties = 12)mapnum.open(difficultmap.dat,ios:in|ios:binary);if(!mapnum)/printf(打开文件失败n);return -1;mapnum.seekg(0,ios:end);num = mapnum.tellg();return num/16;/*/*/*/bool Game:MapIsRight() /判断地图中个元素的个数是否为偶数,如果为奇数,重新绘制地图int jie = difficuties;int elenum8;/记录6个元素在地图中的个数for(int k=0;k8;k+)elenumk = 0;for(int i=(14-jie)/2;i(14+jie)/2;i+)for(int j=(14-jie)/2;j(14+jie)/2;j+)if(gamemapij = A)elenum0+;if(gamemapij = B)elenum1+;if(gamemapij = C)elenum2+;if(gamemapij = D)elenum3+;if(gamemapij = E)elenum4+;if(gamemapij = F)elenum5+;if(gamemapij = G)elenum6+;if(gamemapij = H)elenum7+;for(int x=0;x8;x+)if(elenumx%2 != 0)break;if(x != 8) /如果有元素的个数不是偶数,就返回false,表示地图构造不正确;return false;SaveMap(*gamemap);return true;/*/*/*/bool Game:LoadMap()int num=0;int offset=0;offset = GetFileMapNum();srand(unsigned(time(NULL);num = rand()%offset;fstream loadmap;if(difficuties = 4)loadmap.open(easymap.dat,ios:in|ios:binary);if(difficuties = 8)loadmap.open(ordinarymap.dat,ios:in|ios:binary);if(difficuties = 12)loadmap.open(difficultmap.dat,ios:in|ios:binary);if(!loadmap)/printf(打开文件失败!);return false;loadmap.seekg(num,ios:beg);loadmap.read(char*)*gamemap,14*14);loadmap.close();return true;/*/*/*/void Game:SaveMap(char *map)fstream savemap;if(difficuties = 4)savemap.open(easymap.dat,ios:out|ios:app|ios:binary);if(difficuties = 8)savemap.open(ordinarymap.dat,ios:out|ios:app|ios:binary);if(difficuties = 12)savemap.open(difficultmap.dat,ios:out|ios:app|ios:binary);if(!savemap)/cout打开文件失败endl;return;savemap.write(char*)map,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论