C++实现简单扫雷游戏
扫雷是一个经典的电脑小游戏,用C++来编一下,效果自己试一下
#include#include #defineYELLOWFOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY #defineCYANFOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY #defineORANGEFOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY #definePURPLEFOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY usingnamespacestd; constintSTARTX=30; constintSTARTY=6; constintMAXX=9;//雷区的宽 constintMAXY=9;//雷区的高 constintBOMBNUMBER=10;//地雷数量 classCube{ private: boolifHaveBomb;//该方块是否含有炸弹 boolifOpen;//该方块有无被玩家翻开 intnearBombNumber;//该区块周围8格的含有炸弹的方块的数量 public: voidsetOpen(){ //将Open的值改为true ifOpen=true; } boolgetOpen(){ //获取ifOpen的值 returnifOpen; } voidsetNearBombNumber(intnumber){ //给nearBombNumber赋值 nearBombNumber=number; } voidhaveBomb(){ //给方块放置地雷 ifHaveBomb=true; } boolgetIfHaveBomb(){ //获取ifHaveBomb的值 returnifHaveBomb; } intgetNearBombNumber(){ //获取nearBombNumber的值 returnnearBombNumber; } voidresetCube(boolifhavebomb=false,boolifopen=false,intnearbombnumber=0){ //初始化成员数据 ifHaveBomb=ifhavebomb; ifOpen=ifopen; nearBombNumber=nearbombnumber; } }; Cubecube[MAXX][MAXY]; voidGoTo(intx,inty);//定位光标 voidsetBomb(intbombNumber);//生成bombNumber个炸弹并且放进随机的方块中 voidshow();//显示地雷阵 intcheckAndSetNearBombNumber(intx,inty);//检查当前方块周围的雷数量 voidgameStart();//初始化游戏 voidshowXY();//显示雷区坐标 boolplayer(bool&life);//玩家输入坐标翻开方块 voidmessage(boollife);//玩家游戏结束后输出的信息 voidautoOpen(intx,inty);//玩家翻开的方块为不含雷且周围无雷的方块时,自动翻开周围无雷的方块 boolifWin();//判断玩家是否扫雷成功 voidshowBomb();//游戏结束后显示地雷位置 intmain(){ system("title李柏衡"); gameStart(); show(); boollife=true,win=true; while(player(life)&&!ifWin()){ } message(life&&ifWin()); return0; } voidGoTo(intx,inty){ //定位光标 COORDcoord={x,y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); } voidsetBomb(intbombNumber=BOMBNUMBER){ //生成bombNumber个炸弹并且放进随机的方块中 srand((unsigned)GetCurrentTime()); while(bombNumber--){ intx=MAXX+1,y=MAXY+1; while((x>=MAXX||y>=MAXY)||cube[x][y].getIfHaveBomb()==true){ x=rand()%MAXX; y=rand()%MAXY; } cube[x][y].haveBomb(); } } voidshow(){ //显示地雷阵 system("cls"); showXY(); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),CYAN); for(inti=0;i =0&&nx<=MAXX-1)&& (ny>=0&&ny<=MAXY-1)){ if(cube[nx][ny].getIfHaveBomb()){ num++; } } } } cube[x][y].setNearBombNumber(num);//设置该方块附近的地雷的数量 return0; } } voidgameStart(){ //初始化游戏 for(inti=0;i MAXX-1)||(y<0)||(y>MAXY-1)){ //当玩家输入的坐标超出范围时 show(); GoTo(STARTX-3,STARTY+MAXY+3); printf("该坐标不存在,请重新输入坐标"); GoTo(STARTX+MAXX/2,STARTY+MAXY+2); }elseif(cube[x][y].getIfHaveBomb()==true){ //当玩家翻开的方块有地雷时 cube[x][y].setOpen(); show(); life=false; returnfalse; }elseif(cube[x][y].getOpen()==false){ //当玩家翻开的方块无雷时 if(cube[x][y].getNearBombNumber()==0){ autoOpen(x,y); cube[x][y].setOpen(); show(); }else{ cube[x][y].setOpen(); show(); } }elseif(cube[x][y].getOpen()==true){ //当玩家输入已翻开方块的坐标时 show(); GoTo(STARTX,STARTY+MAXY+3); printf("该方块已被挖开,请再次输入坐标"); GoTo(STARTX+MAXX/2,STARTY+MAXY+2); } ifWin(); returntrue; } voidmessage(boolresult){ if(result==true){ //玩家胜利时输出的信息 showBomb(); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),YELLOW); GoTo(STARTX-1,STARTY+MAXY+1); printf("祝贺你,你胜利了!"); GoTo(STARTX,STARTY+MAXY+2); }else{ //玩家失败时输出的信息 showBomb(); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),PURPLE); GoTo(STARTX-1,STARTY+MAXY+1); printf("××你踩中地雷了××"); GoTo(STARTX,STARTY+MAXY+2); } } voidautoOpen(intx,inty){ //玩家翻开的方块为不含雷且周围无雷的方块时,自动翻开周围无雷的方块 for(inti=-1;i<=1;i++){ for(intj=-1;j<=1;j++){ intnx=x+i; intny=y+j; if(!(ny==y&&nx==x)&&(nx>=0&&nx<=MAXX-1)&& (ny>=0&&ny<=MAXY-1)&&cube[nx][ny].getOpen()==false){ if(cube[nx][ny].getNearBombNumber()==0){ cube[nx][ny].setOpen(); autoOpen(nx,ny); }else{ cube[nx][ny].setOpen(); } } } } } boolifWin(){ //判断玩家是否扫雷成功达到游戏结束条件 intnum=0; for(inti=0;i 更多精彩游戏小代码,请点击《游戏专题》阅读
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。