版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、南京航空航天大学计算机专业专业: 计算机科学与技术学院姓名: 杨万学号: 161310224“mymai”文件中代码#include <iostream>using namespace std;#include <stdio.h>#include <fstream>#include <windows.h>#include <math.h>#include <stdlib.h>#include <string.h>#include "lianliankan.h"int main()
2、Game mygame; int selection; while(true) mygamenu(); cout<<"请输入:"<<endl <<"数字1进入游戏;" <<"数字2继续游戏;" <<"数字3选择游戏难度;" <<&quo
3、t;数字4选择游戏模式;" <<"数字5查看排行榜;" <<"数字0退出游戏."<<endl; cin>>selection; if(selection<0|selection>5) cout<<"输入错误"<<endl; system(&q
4、uot;cls"); continue; DWORD game_start, game_end; switch(selection) case 1: char myname20; cout<<"请输入您的用户名(不超过20个字符):"
5、cin>>myname; mygamme(myname); char ch; bool is_complete = true; DWORD load_start, load_end; load_start = GetTickCount(); cout<<"游戏地图加载中,请稍后."
6、;<<endl; do mygamMap(); load_end = GetTickCount()-load_start; if(load_end > 2000) /如果系统随机产生地图时间大于4s,则直接从m中加载地图
7、; mygamap(); break; while(mygamRight(); game_start = GetTickCount(); while(!mygamplete() i
8、f(mygammeModel() = 1&& mygammeTime()*1000 > mygammeEndtime() is_complete = false; cout<<"时间到,游戏结束"<<endl;
9、60; break; mygamMap(); do cout<<"是否需要变换地图,输入Y或y切换地图,按N或n终止游戏," <<"任意字符键继续,
10、回车、空格、TAB键无效"<<endl; e(); cin>>ch; if( ch = 'Y'|ch = 'y') mygam(); &
11、#160; mygamMap(); if(ch = 'N'|ch = 'n') is_complete = false; system("cls&
12、quot;); break; while(ch = 'Y'|ch = 'y'); if(ch = 'N'|ch = 'n') break;
13、;mygaminate(); game_end = GetTickCount()-game_start; mygammeTime(game_end/1000.0); if(is_complete) game_end = GetTickCount()-game_start;
14、 mygammeTime(game_end/1000.0); mygamamer();/将完成游戏的玩家用时,和一些游戏信息存入文件中 cout<<game_end<<endl; break; case 2:
15、60; char ch; DWORD game_start, game_end; bool is_complete = true; game_start = GetTickCount(); while(!mygamplete() mygamMap();
16、 do cout<<"是否需要变换地图,输入Y或y切换地图,按N或n终止游戏," <<"任意字符键继续,回车、空格、TAB键无效"<<endl; e();
17、60;cin>>ch; if( ch = 'Y'|ch = 'y') mygam(); if(ch = 'N'|ch = 'n') is_compl
18、ete = false; system("cls"); break; while(ch = 'Y'|ch = 'y'); if(ch = 'N'|ch = 'n')
19、 break; mygaminate(); if(is_complete) game_end = GetTickCount()-game_start; mygammeTime(game_end/1000.0);
20、160; cout<<game_end<<endl; break; case 3: int difficulty_grade = 2; /默认难度普通 cout<<" &
21、#160; 1. 简 单"<<endl; cout<<" 2. 普 通"<<endl; cout<<" 3. 困 难"<<endl; do
22、; cout<<"请按相应的数字键选择您需要的游戏难度"<<endl; cin>>difficulty_grade; mygammeDifficuties(difficulty_grade); while(!(difficulty_grade=1|difficulty_grade=2|difficulty_grade=3);
23、; system("cls"); break; case 4: int model; /游戏模式 cout<<" 1.限时模式"<<endl; cout
24、<<" "<<endl; do cout<<"请按相应的数字选择您需要的游戏模式"<<endl; cin>>model; mygammeModel(model);
25、 while(!(model=1|model=2); break; case 5: mygamng(); break; case 0: exit(0); ret
26、urn 0; “lianliankan.cpp"文件中代码#include <iostream>using namespace std;#include <stdio.h>#include <fstream>#include <windows.h>#include <math.h>#include <time.h>#include <stdlib.h>#include <string.h>#include "lianliankan.h"/*/*/*/Game:
27、Game() /构造函数中随机初始化地图 difficuties = 8; /默认难道为普通 strcpy(name,""); gametime = 0.0; endtime = 0; gamemodel = 2;/游戏模式默认设置为无限时模式 score = 0; for(int i=0;i<14;i+) for(int j=0;j<14;j+) gamemapij = ' '/*/*/*/void Game
28、:BuildMap() int jie = difficuties; /随机创建jie阶随机字符矩阵,构造地图 srand(unsigned)time(NULL); int m=(14-jie)/2; int n=(14+jie)/2; for(int i=m;i<n;i+) for(int j=m;j<n;j+) gamemapij = 'A'+rand()%8; /用rand()%8+
29、'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;m<i1;m+)
30、; if(gamemapmj1 != ' ') flag1 = false; break; for(m=(14-jie)/2;m<i2;m+) if(gamemapmj2 != ' ') flag1 = false; break; for(m
31、=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;
32、60;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;
33、/*/*/*/void Game:SaveGamer() Gamer gamer; fstream savegamer; savegamer.open("gamerinformation.dat",ios:out|ios:app|ios:binary); if(savegamer.fail() /cout<<"打开gamerinformat件失败"<<endl; return; gamer.gametime = g
34、ametime; strcpy(,name); gamer.model = difficuties/4; saveg(char*)&gamer,sizeof(gamer); saveg();/*/*/*/void Game:SetName(char *myname) strcpy(name,myname);/*/*/*/bool Game:IsTEiminate1(int i1,int j1,int i2,int j2) bool flag1 = true; /是否能够左通消除 bo
35、ol flag2 = true; /是否能够右通消除 int m =0; int n=0; int jie = difficuties; /是否能够左通消除 for(m=(14-jie)/2;m<j1;m+) if(gamemapi1m != ' ') flag1 = false; break; for(m=(14-jie)/2;m<j
36、2;m+) if(gamemapi2m != ' ') flag1 = false; break; for(m=j1+1;m<(14+jie)/2;m+) if(gamemapi1m != ' ') flag2 = false; break;
37、; 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 =
38、mymodel; if(gamemodel = 1) if(difficuties = 4) endtime =120*1000; /简单限时模式下2分钟内如果没有完成游戏,游戏自动结束 if(difficuties = 8) endtime = 360*1000; /普通限时模式下6分钟如果没有完成游戏,游戏自动结束 if(difficuties = 4)
39、; 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;m<j2;m+) if(gamemapim != ' ') flag = false;
40、 break; for(m=j2+1;m<j1;m+) if(gamemapim != ' ') flag = false; break; return flag;/*/*/*/void Game:DoEiminate() int jie = difficuties; char ch; int xi1,i1;
41、;int xi2,i2; int xj1,j1; int xj2,j2; cout<<"请输入你要消除的两个元素的下标,输入格式为(i,j)"<<endl; cin>>ch>>xi1>>ch; cin>>xj1>>ch; cin>>ch>>xi2>>ch; cin>>xj2>>ch; i1 = xi1+(14-jie)/2-1; i2 = xi
42、2+(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<<"*消除成功*得分:"<&l
43、t;score<<"*"<<endl; else cout<<"不能消除"<<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;
44、 int x211 = i2,0,0,0,0,0,0,0,0,0,0; for(m=i1+1;m<(14+jie)/2;m+) if(gamemapmj1 = ' ') x1i = m; i+; for(n=i2-1;n>(14-jie)/2;n-) if(gamemapnj2 = ' ') &
45、#160; x2j = n; j+; if(i*j = 0) return false; for(int p=0;p<i;p+) for(int q=0;q<j;q+) if(x1q = x2p) if(IsVEiminate(x1q,j1,j2) return tru
46、e; 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+
47、jie)/2;m+) if(gamemapmj1 = ' ') x1i = m; i+; for(n=j2-1;n>(14-jie)/2;n-) if(gamemapi2n = ' ') x2j = n; j+; if
48、(i*j = 0) return false; for(int p=0;p<i;p+) for(int q=0;q<j;q+) if(x1q = i2) if(IsVEiminate(x1q,j1,x2j) return true; return false;bool Game:IsGEiminate_sub2(
49、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;m-) if(gamemapmj1 = ' ')
50、; x1i = m; i+; for(n=j2+1;n>(14+jie)/2;n+) if(gamemapi2n = ' ') x2j = n; j+; if(i*j = 0) return false; for(int p=0;p<i;p+)
51、; for(int q=0;q<j;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;
52、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;
53、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
54、(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(IsGEimina
55、te_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.o
56、pen("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&qu
57、ot;); return -1; mapnu(0,ios:end); num = mapnu(); return num/16;/*/*/*/bool Game:MapIsRight() /判断地图中个元素的个数是否为偶数,如果为奇数,重新绘制地图 int jie = difficuties; int elenum8;/记录6个元素在地图中的个数 for(int k=0;k<8;k+) elenumk = 0; for(int i=(14-jie)/2;i<
58、(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')
59、60; elenum2+; if(gamemapij = 'D') elenum3+; if(gamemapij = 'E') elenum4+; if(gamemapij = 'F') elenum5+; if(gamemapij = 'G')
60、60; elenum6+; if(gamemapij = 'H') elenum7+; for(int x=0;x<8;x+) if(elenumx%2 != 0) break; if(x != 8) /如果有元素的个数不是偶数,就返回false,表示地图构造不正确; return false
61、; 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:
62、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;
63、 loadm(num,ios:beg); loadmap.read(char*)*gamemap,14*14); loadm(); 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("
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年城市公共服务设施建设项目合同
- 2024年度影视作品授权使用合同
- 2024年度货物采购协议
- 2024年国际快递公司服务协议
- 2024年度建筑材料采购合同
- 2024年度供应链管理服务合同标的说明
- 04版7月:股权激励计划协议
- 信息技术2.0培训项目个人研修计划
- 七夕节品牌宣传文案(55句)
- 2024年建筑工程施工合同详解
- 审计部工作总结及计划
- 山东开放大学2024《控制系统CAD》形考作业1-3答案
- 小学生心肺复苏培训意义
- 幼儿体适能通用课件
- 大数据专业职业规划
- 人教版九年级上学期期中考试数学试卷及答案解析(共5套)
- 逆境中的积极心态与成就
- 山东省2023年高考物理模拟(一模、二模)试题知识点训练:电磁学解答题
- 门诊健康宣教 课件
- 计量器具管理课件
- 2022年《系统集成项目管理工程师》案例分析真题
评论
0/150
提交评论