上课玩扫雷被抓,然后自己写了一个出来。自动扫雷脚本还没实现……

#include <bits/stdc++.h>
#include <cstring>
#define UNREVAL -1
#define FLAGED 10
using namespace std;
const int N = 10;
int g[N+1][N+1];
int o[N+1][N+1];
int surf[N+1][N+1];
int score;
int gcd(int a,int b)
{int i=max(a,b);while(i>0){if(a%i==0&&b%i==0){break;}i--;}return i;
}
struct Node
{int x,y;
};
bool check(int x,int y)
{if(x>N||y>N||x<=0||y<=0){return 0;}return 1;
}
int dx[8] = {0,1,0,-1,1,1,-1,-1};
int dy[8] = {1,0,-1,0,-1,1,1,-1};
void generate_new_map(int num)
{int x=0,y=0;memset(g,0,sizeof(g));memset(o,0,sizeof(o));memset(surf,0,sizeof(surf));for(int i=0; i<num; i++){x = 1+rand()%N;y = 1+rand()%N;//cout<<x<<" "<<y<<endl;if(g[x][y] == -1){i--;continue;}g[x][y] = -1;}x=0;y=0;for(int i=1; i<=N; i++){for(int j=1; j<=N; j++){if(g[i][j] == -1) continue;for(int k=0; k<8; k++){x = i+dx[k];y = j+dy[k];if(check(x,y)&&g[x][y] == -1){g[i][j] += 1;}}}}
}
void show_map()
{cout<<"x  ";for(int i=1; i<=N; i++){cout<<i;}cout<<endl;for(int i=1; i<=N; i++){printf("%-3d",i);for(int j=1; j<=N; j++){if(o[i][j] == 0){cout<<'*';surf[i][j] = UNREVAL;}else if (o[i][j] == 1){//cout<<'.';if(g[i][j] == 0){cout<<".";surf[i][j] = 0;}else{cout<<g[i][j];surf[i][j] = g[i][j];}}else{surf[i][j] = FLAGED;cout<<'T';}}cout<<endl;}
}
void expand(int x,int y)
{Node a,next;a.x = x;a.y = y;int vis[N+1][N+1];memset(vis,0,sizeof(vis));vis[x][y] =1;queue<Node> q;q.push(a);while(!q.empty()){a = q.front();q.pop();for(int i=0; i<8; i++){int nx = a.x+dx[i];int ny = a.y + dy[i];if(check(nx,ny)&&g[nx][ny]!= -1&&vis[nx][ny] == 0){//cout<<nx<<" "<<ny<<endl;o[nx][ny] = 1;if(g[nx][ny] >= 1){continue;}else{vis[nx][ny] = 1;next.x = nx;next.y = ny;q.push(next);}}}}
}
int reveal(int x,int y)
{if(g[x][y] == -1){return 0;}else{o[x][y] = 1;if(g[x][y] == 0){expand(x,y);}return 1;}}
void show_mines()
{for(int i=1; i<=N; i++){for(int j =1; j<=N; j++){cout<<g[i][j]<<"  ";}cout<<endl;}
}
void flag(int x,int y)
{o[x][y] = 2;if(g[x][y] == -1){score++;}
}
void AI(int x,int y)
{int cnt = 0;for(int i=0; i<8; i++){int xx = x + dx[i];int yy = y + dy[i];if(check(xx,yy)&&surf[xx][yy] == UNREVAL){cnt++;}}int num = surf[x][y];if(num<cnt){for(int i=0; i<8; i++){int xx = x + dx[i];int yy = y + dy[i];if(check(xx,yy)&&surf[xx][yy] == UNREVAL){reveal(xx,yy);}}}else{for(int i=0; i<8; i++){int xx = x + dx[i];int yy = y + dy[i];if(check(xx,yy)&&surf[xx][yy] == UNREVAL){flag(xx,yy);}}}
}
int main()
{cout<<gcd(1,6);srand(time(0));generate_new_map(10);show_map();//show_mines();int x,y,op;score = 0;int left = 10;while(cin>>op){if(left == 0){cout<<"win!"<<endl;}if(op == 0) break;cin>>x>>y;if(op ==1){if(!reveal(x,y)){cout<<"gameover"<<endl;cout<<"score: "<<score<<endl;break;}else{cout<<"no mines"<<endl;show_map();}}if(op == 2){flag(x,y);cout<<"flag!"<<endl;show_map();}if(op == 3){AI(x,y);show_map();}}return 0;
}

随便写的扫雷程序.cpp相关推荐

  1. 手把手教你写个扫雷程序自己玩

    目录 前言 一.扫雷是什么? 二.代码详解(模块化) 1.创建文件 2.test.c 3.game.c 4.game.h 总结 test.c game.c game.h 前言 相信大家过年玩游戏玩王者 ...

  2. c语言坐标扫雷程序,用C语言写一个扫雷程序

    #includeint Menu(){ printf("1.开始游戏\n"); printf("0.结束游戏\n"); printf("请输入您的选择 ...

  3. 第十、十一周项目-阅读程序,写出这些程序的运行结果(1)

    <pre name="code" class="cpp">/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All righ ...

  4. 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装

    在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...

  5. 在C++ Builder中用socket api来写网络通讯程序(同时支持TCP和UDP协议)

    原标题:在C++ Builder中用socket api来写网络通讯程序(同时支持TCP和UDP协议) 原文:  http://www.csdn.net/develop/read_article.as ...

  6. 在实时操作系统里随便写代码都能硬实时吗?

    这是转发宋老师写的文章,我也是刚知道,宋老师跟我一样也是养娃的人了,国庆期间,看看文章,看看升升国旗. 很久没有写技术文章了,做码农难,做养娃的码农更难,趁着娃看动画片的机会,受着王菲童鞋<我和 ...

  7. 公司注册地址可以随便写吗,如何注册企业工商营业执照

    近些年,在国家政策的大力支持下,越来越多的人走上了创业的道路,而创业就需要办理企业工商营业执照,注册公司成为他们创业的必要环节.然而,有些人由于某些原因或者条件限制的缘故,在注册公司时使用虚假地址.公 ...

  8. 不要困在自己建造的盒子里——写给.NET程序员(附精彩评论)

    此文章的主旨是希望过于专注.NET程序员在做好工作.写好.NET程序的同时,能分拨出一点时间接触一下.NET之外的东西(例如10%-20%的时间),而不是鼓动大家什么都去学最后什么都学不精,更不是说. ...

  9. springboot配置类中的bean名字能不能随便写

    spring-boot推荐的编程思想是约定优于配置,这些固定名字的bean名字,就是这种编程思想的体理.必须叫这些约定俗成的名字.如果你改成别的名字,程序就无法成功运行. 1.如果是给框架使用的就要用 ...

最新文章

  1. 计算MySQL的内存峰值公式
  2. html5实现圆圈里带一个三角形,HTML5 Canvas圆圈里面的三角形变换动画
  3. java程序测试总结_Java测试总结(ATM)
  4. java 单例 性能_java程序性能优化之设计优化---单例pk
  5. dedecms备份mysql数据库文件_dedecms备份的数据库文件在哪里
  6. 浅谈Hybrid技术的设计与实现【转】
  7. Spring Security示例教程
  8. domain or business logic
  9. 搭建Linux的基础命令符---bc
  10. 操作系统 - 王道 - 第五章 I/O
  11. 什么是商业智能BI,谈谈商业智能BI的定义与作用
  12. 《新撰组异闻录——铁》启示录
  13. Fault Description Based Attribute Transfer for Zero-Sample Industrial Fault Diagnosis
  14. 产生按指数分布的随机数----摘自csdn
  15. 旺店通·企业奇门与用友BIP旺店通销售出库单对接销售订单
  16. 接口测试 | 接口测试入门
  17. 程序员别再迷茫,赚钱,方法比你想的更多
  18. mysql的粒度_mysql锁粒度是什么
  19. 北斗/GPS授时原理
  20. Error Calling Method of a PBNI object 的问题现象及解决方案

热门文章

  1. 2021全新零距离泛目录+锚文本锁定+小说模板+多个调用
  2. 6主机规划与磁盘分区
  3. 融入动画技术的交互应用
  4. 直播购物商城APP开发,开启直播新模式。
  5. ILSSI认证|六西格玛绿带、黑带证书|优思学院
  6. Codevs 抄书问题123
  7. jemter web端录制
  8. SAS 二元逻辑回归 预测下月是否会消费
  9. 英伟达账号为什么登录不了_英伟达无法登陆怎么办_nvidia登不进去的修复方法-系统城...
  10. 基于Cython编译整个Python项目并保留原项目结构