C++小游戏扫雷——如何写出一个简易的扫雷

其实很简单,但是这段代码不知道是否有BUG,有的话可以提出,谢谢大家。
all.h函数库

#include "all.h"
using namespace std;
const int flg_xzy[9][2]={{0,0},{0,1},{0,-1},{1,0},{1,1},{1,-1},{-1,0},{-1,1},{-1,-1}};
int ground=0,mp[105][105],n=9,m=9,Set_number=10,number,Ending=0;
//string s1="mode con cols=",s2=" lines=";
bool vis_xzy[105][105],vis[105][105],se[105][105];
int ran(int x){return x<=0?0:(rand()<<16|rand()<<1|(rand()&1))%x;}
void mp_add(int x,int y,int s){mp[x][y]=-1;for(int k=1;k<9;k++)if(flg_xzy[k][0]+x>=0&&flg_xzy[k][0]+x<n&&flg_xzy[k][1]+y>=0&&flg_xzy[k][1]+y<m)if(mp[flg_xzy[k][0]+x][flg_xzy[k][1]+y]^-1) mp[flg_xzy[k][0]+x][flg_xzy[k][1]+y]+=s;
}
void mak_xzy(int X,int Y,int num){memset(mp,0,sizeof(mp));memset(vis_xzy,0,sizeof(vis_xzy));for(int i=0;i<9;i++)if(flg_xzy[i][0]+X>=0&&flg_xzy[i][0]+X<n&&flg_xzy[i][1]+Y>=0&&flg_xzy[i][1]+Y<m)vis_xzy[flg_xzy[i][0]+X][flg_xzy[i][1]+Y]=1;while(num--){int x=rand()%n,y=rand()%m;while(mp[x][y]||vis_xzy[x][y]) x=rand()%n,y=rand()%m;mp_add(x,y,1);}
}
void DFS_xzy(int x,int y,bool C){vis_xzy[x][y]=1;se[x][y]=1;if(vis[x][y]||mp[x][y]==-1) Ending=1;if(mp[x][y]&&C) return;for (int i=1;i<9;i++){int xx=x+flg_xzy[i][0],yy=y+flg_xzy[i][1];if (xx<0||yy<0||xx>=n||yy>=m||vis_xzy[xx][yy]||vis[xx][yy]) continue;DFS_xzy(xx,yy,1);}
}
void change_mp(){setcolor(ground+12);for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(se[i][j]==1){GOTO(i,j*2);if(!mp[i][j]) printf("  ");else printf("%d ",mp[i][j]);}
}
void Lost(){cls();setcolor(ground+12);printf("Lost\n");Sleep(1500);
}
void Win(){cls();setcolor(ground+12);printf("Win\n");Sleep(1500);
}
int Start(){string s;
//  s=s1+ChangeNumToStr(m)+s2+ChangeNumToStr(n);
//  system(s.c_str());setcolor(ground+14);cls();for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) printf("▇");printf("\n");}setcolor(ground+15);GOTO(n,0);printf("   ");GOTO(n,0);printf("%d",number);int x=0,y=0;GOTO(x,2*y);setcolor(ground+10);printf("▇");bool t=0;int Js=number;while(1){char ch=getch();if(ch<0){ch=getch();GOTO(x,y*2);if(se[x][y]){setcolor(ground+12);if(mp[x][y]) printf("%d ",mp[x][y]);else printf("  ");}else if(vis[x][y]) setcolor(ground+15),printf("▇");else setcolor(ground+14),printf("▇");if(ch==75&&y>0) y--;elseif(ch==77&&y<m-1) y++;elseif(ch==72&&x>0) x--;elseif(ch==80&&x<n-1) x++;GOTO(x,y*2);if(se[x][y]){setcolor(160+12);if(mp[x][y]) printf("%d ",mp[x][y]);else printf("  ");}else setcolor(ground+10),printf("▇");}else{GOTO(x,y*2);if(se[x][y]){setcolor(ground+12);if(mp[x][y]) printf("%d ",mp[x][y]);else printf("  ");}else if(vis[x][y]) setcolor(ground+15),printf("▇");else setcolor(ground+14),printf("▇");if((ch=='W'||ch=='w')&&x>0) x--;elseif((ch=='S'||ch=='s')&&x<n-1) x++;elseif((ch=='A'||ch=='a')&&y>0) y--;elseif((ch=='D'||ch=='d')&&y<m-1) y++;elseif(ch==' '){if(!t) t=1,mak_xzy(x,y,Set_number);if(mp[x][y]==-1){Lost();return 0;}else{memset(vis_xzy,0,sizeof(vis_xzy));DFS_xzy(x,y,0);change_mp();if(Ending){Lost();return 0;}}}if(ch=='P'||ch=='p'){GOTO(x,y*2);vis[x][y]=1-vis[x][y];if(mp[x][y]==-1&&vis[x][y]==1) number--;if(mp[x][y]==-1&&vis[x][y]==0) number++;if(vis[x][y]==1) Js--;if(vis[x][y]==0) Js++;if(Js<0) vis[x][y]=1-vis[x][y],Js++;setcolor(ground+15);GOTO(n,0);printf("   ");GOTO(n,0);printf("%d",Js);if(number==0){Win();return 0;}}GOTO(x,y*2);if(se[x][y]){setcolor(160+12);if(mp[x][y]) printf("%d ",mp[x][y]);else printf("  ");}else setcolor(ground+10),printf("▇");}}
}
void Set(){cls();setcolor(ground+15);printf("选择难度\n");printf("0.返回\n");printf("1.初级\n");printf("2.中级\n");printf("3.高级\n");printf("4.自定义\n");char ch=getch();while(ch<'0'||ch>'4') ch=getch(); if(ch=='0') return;if(ch=='1') n=9,m=9,Set_number=10;elseif(ch=='2') n=16,m=16,Set_number=40;elseif(ch=='3') n=16,m=30,Set_number=99;if(ch^'4') return;int nn=0;while(nn<5||nn>25){printf("行数(范围5~25):");cin>>nn;if(nn<5||nn>25) printf("\n重复");}n=nn;int mm=0;while(mm<5||mm>30){printf("列数(范围5~30):");cin>>mm;if(mm<5||mm>30) printf("\n重复");}m=mm;int tt=0;while(tt<=0||tt>25){printf("雷的个数(范围1~%d):",n*m);cin>>tt;if(tt<=0||tt>25) printf("\n重复");}Set_number=tt;
}
int main(){system("title ");char ch;bsrand();while(1){setcolor(ground+12);cls();memset(se,0,sizeof(se));number=Set_number;Ending=0;memset(vis,0,sizeof(vis)); printf("     主菜单\n");printf("   0.退出\n");printf("   1.开始游戏\n");printf("   2.选择难度\n");printf("   空格点击,P标记\n");setcolor(ground+14);printf("   由小威工作室出品,QQ群号:432180340\n"); ch=getch();if(ch=='0') retr();elseif(ch=='1') Start();elseif(ch=='2') Set();}return 0;
}

由小威工作室出品,QQ群号:432180340,群里会有最新的小游戏o( ^ v ^ )o。

转载于:https://www.cnblogs.com/XSamsara/p/9059442.html

C++小游戏扫雷——如何写出一个简易的扫雷相关推荐

  1. 用js写出数据结构中的自定义队列,利用队列思想写出一个击鼓传花的游戏函数,优先级队列

    队列的核心是先进先出 1.用js写出数据结构中的自定义队列 class Queue{constructor(){this.item = [];}// 1.入队enqueue(ele){this.ite ...

  2. 怎样写出一个较好的高速排序程序

    写出一个较好的高速排序程序 高速排序是经常使用的排序算法之中的一个,但要想写出一个又快又准的使用程序,就不是那么简单了 须要注意的事项 首先要写正确.通常使用递归实现.其递归相当于二叉树展开,因此假设 ...

  3. 如何写出一个较好的快速排序程序

    写出一个较好的快速排序程序 快速排序是常用的排序算法之一,但要想写出一个又快又准的使用程序,就不是那么简单了 需要注意的事项 首先要写正确.通常使用递归实现.其递归相当于二叉树展开,因此如果要用迭代实 ...

  4. 编写一个猜成语的小游戏。要求:使用一个字符串数组来保存10个四字成语,例如: String [] idioms = {“凉拌黄瓜”, “红烧肘子”, …};

    编写一个猜成语的小游戏. 要求:使用一个字符串数组来保存10个四字成语,例如: String [] idioms = {"凉拌黄瓜", "红烧肘子", -}; ...

  5. 国庆八天教你怎么写出一个钢琴

    来源:听见下雨声 https://juejin.im/post/6879708939190009869 前言 国庆节八天来娱乐一下,教你怎么用代码写出一个钢琴????,并用它弹奏歌曲.学生时代的我们如 ...

  6. 输入一个数字n 如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数 写出一个函数

    输入一个数字n 如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数 写出一个函数 题目: 输入一个数字n  如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数  写 ...

  7. linux mysql 不稳定_linux,mysql:今天写出一个十分弱智的bug!

    今天写出一个十分弱智的bug,记录一下,提醒自己以后别这种犯错,不怕丢人哈~ 在写一个分页查询记录的sql时,要根据添加的时间逆序分页输出,之前的写法是酱紫: select record.a, y.c ...

  8. python小项目实例流程-Python小项目:快速开发出一个简单的学生管理系统

    原标题:Python小项目:快速开发出一个简单的学生管理系统 本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: ...

  9. python小项目案例-Python小项目:快速开发出一个简单的学生管理系统

    本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: 包括: 学校信息的管理 教师信息的管理 学生信息的管理 根据A ...

最新文章

  1. vba宏语言_三分钟了解Excel的程序语言VBA
  2. 分享一个javascript alert精简框架
  3. 6.0动态加载权限用PermissionGen
  4. HTTP、TCP、UDP、Socket (转)
  5. Redis的发布订阅(消息队列,比如ActiveMQ,一方得到数据后,多方得到信息)
  6. Linux网络配置的基本方法
  7. Android Weekly Notes Issue #218
  8. QLCDNumber设置背景色和显示数字颜色【转载】
  9. 康众平板探测器_2020-2025年数字化X线探测器行业市场深度调研及投资前景预测分析报告 数字化设备成为市场主流...
  10. C语言——指针篇(四)多维数组和多维指针(内含数组指针和指针数组笔记)
  11. [原创]Android SDK下载(Linux下载SDK最新教程2020.11.26)
  12. 最近在校园内发现暴风一号病毒(俗称1kb病毒),普及一下查杀和修复的方法
  13. 将iTunes音乐传输到USB驱动器以在汽车中收听
  14. 公众号网页授权php,微信公众号里的PHP网站进行网页授权
  15. 一块自制自行车码表从B站火到GitHub,稚晖君点赞,网友催量产
  16. 数据库实验7---数据库的备份与恢复
  17. 华为开发者大会2022,发布鸿蒙开发套件
  18. 计算机英语感想1500,英语教学的心得体会1500字
  19. java发送邮件问题
  20. 分布式事务讲解 -消息队列+定时任务+本地事件表

热门文章

  1. 计算机本科管理信息系统论文,本科软件工程专业毕业论文 计算机信息管理系统.doc...
  2. 职场情感录:办公室人际问题化解大法
  3. 解决SQL设置主键时报错:ORA-02437无法验证-违反主键
  4. STC89S52和AT89S52功能一样吗?STC89S52可以替换AT89S52吗?
  5. 有必要看考研英语外刊吗?
  6. 【最新】整理了CVPR 2023论文代码合集!
  7. vnc远程桌面,超好用的5款vnc远程桌面软件
  8. Mysql数据库复习大纲
  9. 1688推广工具_1688怎么进行商品推广?
  10. objection常见用法