c++实现扫雷(坐标)
昨天在观察贪食蛇的代码时,看到了有如何实现扫雷的c++代码,觉得挺有趣,今天便又试了一下
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
int map[][]; // 为避免边界的特殊处理,故将二维数组四周边界扩展1
int derection[] = { , , - }; //方向数组
int calculate ( int x, int y )
{
int counter = ;
for ( int i = ; i < ; i++ )
for ( int j = ; j < ; j++ )
if ( map[ x+derection[i]][ y+derection[j] ] == )
counter++; // 统计以(x,y)为中心的四周的雷数目
return counter;
}
void game ( int x, int y )
{
if ( calculate ( x, y ) == )
{
map[x][y] = ;
for ( int i = ; i < ; i++ )
{ // 模拟游戏过程,若点到一个空白,则系统自动向外扩展
for ( int j = ; j < ; j++ )
if ( x+derection[i] <= && y+derection[j] <= && x+derection[i] >= && y+derection[j] >=
&& !( derection[i] == && derection[j] == ) && map[x+derection[i]][y+derection[j]] == - )
game( x+derection[i], y+derection[j] ); // 条件比较多,一是不可以让两个方向坐标同时为0,否则 } //二是递归不能出界.三是要保证不返回调用。
}
else
map[x][y] = calculate(x,y);
}
void print ()
{
for ( int i = ; i < ; i++ )
{
for ( int j = ; j < ; j++ )
{
if ( map[i][j] == - || map[i][j] == )
cout << "#";
else
cout << map[i][j];
}
cout << endl;
}
}
bool check ()
{
int counter = ;
for ( int i = ; i < ; i++ )
for ( int j = ; j < ; j++ )
if ( map[i][j] != - )
counter++;
if ( counter == )
return true;
else
return false;
} int main ()
{ int i, j, x, y;
char ch;
srand ( time ( ) ); do
{
memset ( map, -, sizeof(map) ); // 将map全部初始化为-1,以后用-1表示未涉及的区域 for ( i = ; i < ; )
{
x = rand()% + ;
y = rand()% + ;
if ( map[x][y] != )
{
map[x][y] = ;
i++;
}
} for ( i = ; i < ; i++ )
{
for ( j = ; j < ; j++ )
cout << "#";
cout << "\n";
}
cout << "\n"; cout << "Please enter a coordinate: ";
while ( cin >> x >> y )
{
if ( map[x][y] == )
{
cout << "GAME OVER" << endl; //点中雷之后游戏结束,并且输出雷的位置
for ( i = ; i < ; i++ )
{
for ( j = ; j < ; j++ )
{
if ( map[i][j] == )
cout << "@";
else
cout << "#";
}
cout << endl;
}
break;
} game(x,y);
print(); if ( check () )
{
cout << "YOU WIN" << endl;
break;
}
cout << "\n\n";
} cout << "Do you want to play again, if true enter Y, or enter N" << endl;
cin >> ch;
cout << "\n\n";
} while ( ch == 'Y' ); return ;
}
程序截图:


界面有点简陋,并是通过坐标来排雷的,而且到现在还没搞懂他这个程序到底该怎样输入坐标,不过还是感谢作者吧
c++实现扫雷(坐标)的更多相关文章
- C#基础教程/适合初学者
C#基础教程 第一章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序.当 ...
- Java课程设计——扫雷(winmine)
因为是我的课程设计,要是有冲突就不好了,转载注明出处!!! 程序很简单,毕竟我是搞acm的,我就只介绍一下闪光点. 中心空白搜索的时候,我用的DFS: 有一点是要注意的,就是JFrame不支持重画,还 ...
- Client Window坐标 RECT相关函数
GetClientRect(HWND, RECT*) ---得到窗口的客户区大小,left,top总是0,bottom是客户区高度,right是客户区宽度 GetWindowRect(HWND, RE ...
- Java GUI编程-(项目代码_扫雷_弹钢琴)
--扫雷 package com;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionLis ...
- web版扫雷小游戏(四)
~~~接上篇,游戏的主体框架完成了,接下来我们对游戏中存在的两个主要实体进行分析,一个是雷点类BombObject(节点对象),一个是节点对象对应的图片对象BombImgObject,根据第一篇的介绍 ...
- web版扫雷小游戏(三)
~~~接上篇,上篇介绍了游戏实现过程中第一个比较繁琐的地方,现在展现在玩家面前的是一个有血有肉的棋盘,从某种意义上说玩家已经可以开始游戏了,但是不够人性化,玩家只能一个一个节点的点开,然后判断,然后标 ...
- web版扫雷小游戏(二)
接上篇~~第一次写这种技术博客,发现把自己做的东西介绍出来还是一件脑力活,不是那么轻松啊,好吧,想到哪写到哪,流水记录之,待完成之后再根据大家的意见进行修改吧. 游戏实现 根据对扫雷游戏的体验和分析, ...
- VB6之扫雷克星
很久之前,那时候我还不太会玩(现在也不厉害)扫雷这个游戏,同学总在我面前炫耀自己的技术有多叼.“高级,99颗雷,只需三分钟...”,如此这般.也许确实需要天赋,我总要排查个半天才敢点下左键,然后就BO ...
- ios扫雷
就这些代码敲了我两个小时...... // ViewController.m // 扫雷 // // Created by 晚起的蚂蚁 on 2017/3/22. // Copyright © ...
随机推荐
- bzoj 2784 [JLOI2012]时间流逝——树上高斯消元
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2784 一个状态可以加很多个能量圈,但减少能量圈的情况只有一种.所以可以用树来刻画. 然后就变 ...
- 栈的一个实例——Dijkstra的双栈算术表达式求值法
Dijkstra的双栈算术表达式求值法,即是计算算术表达式的值,如表达式(1 + ( (2+3) * (4*5) ) ). 该方法是 使用两个栈分别存储算术表达式的运算符与操作数 忽略左括号 遇到右括 ...
- ubuntu 14.04 安装Eclipse与配置环境变量
1. 安装JDK 1.1 源码包下载 首先到官网下载jdk,http://www.oracle.com/technetwork/java/javase/downloads/index.html,我下载 ...
- kibana 与 grafana
Kibana 和 Grafana 是两个开源工具,能可视化和推断大量日志数据内的趋势.Kibana 是一个分析和可视化平台,它可以让你浏览.可视化存储在Elasticsearch集群上排名靠前的日志数 ...
- NET中调用存储过程(Output、Input)
NET中调用存储过程(Output.Input) .NET中调用存储过程(Output.Input) 带输入输出参数的存储过程 带输入输出参数的存储过程 create procedure itemCo ...
- FPGA配置方式
FPGA有多种配置/加载方式.粗略可以分为主动和被动两种.主动加载是指由FPGA控制配置流程,被动加载是指FPGA仅仅被动接收配置数据. 最常见的被动配置模式就是JTAG下载bit文件.此模式下,主动 ...
- vmware linux NAT CON
NAT上网 vmware设置nat上网: 1.设置本地可提供上网网卡为共享方式到vmware 8(NAT)如下图: 2.设置本地虚拟网卡vmware8 IP地址如下图: 3.设置vmware网络设置启 ...
- bzxoj1090 字符串折叠
Description 折叠的定义如下: 1. 一个字符串可以看成它自身的折叠.记作S S 2. X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S) SSSS…S(X个S). ...
- Oracle学习操作(7)用户、权限、角色
一.oracle用户: 二.权限 1.系统权限: sys登陆创建c##test用户后,给用户c##test授权,并且带有传播性: SQL> create user c##test identif ...
- 基于HttpClient JSONObject与JSONArray的使用
package com.spring.utils; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.ap ...