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

下载本文档

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

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论