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 © ...
随机推荐
- Microsoft Dynamics CRM 2011 面向Internet部署 (IFD) CRM 登录出现会话超时的解决办法
一.IFD 登录的时候,过了一段时间,会马上出现“您的会话已过期”,怎么解决这个问题呢,可以通过改变这个时间.具体图如二 Link to Dynamics CRM Wiki Home Page 二.S ...
- 重置SQL Server sa密码
查询分析器,连接时,身份验证使用"使用windows身份验证" 然后,执行: EXEC sp_password NULL, '新密码', 'Sa'
- 异步FIFO格雷码与空满
在传递读写时钟域的指针使用格雷码来传递,如何把二进制转换为格雷码,格雷码是如何判断读空写满呢? 二进制码转换成二进制格雷码,其法则是保留二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高 ...
- 神奇的null和undefined
在JavaScript中,有两个特殊的类型存在,它们都只有一个值,分别null和undefined,之所以将它们放在一块,是因为在使用方面它们有很多相似之处. 相同点 在JavaScript中,nul ...
- windows任务计划程序 坑
- PHP简单查询界面
<html> <style type='text/css'> table {border-collapse:collapse;} td {border:solid 1px #d ...
- VBA 对比两行数据
Sub DB_Row() Dim i, j As Integer Dim row1, row2 As Integer row1 = ' 对比第 3 行 row2 = ' 和第 4 行 For i = ...
- Linux性能分析 vmstat基本语法
vmstat vmstat 统计虚拟内存信息,可以对操作系统的proc.memory.CPU.IO等信息进行统计以呈现给用户. 根据操作系统的不同,vmstat的输出结果会有不同.大家可 ...
- Hadoop2.0的基本构成总览
Hadoop1.x和Hadoop2.0构成图对比 Hadoop1.x构成: HDFS.MapReduce(资源管理和任务调度):运行时环境为JobTracker和TaskTracker: Hadoop ...
- python输出格式化及函数format
格式 描述%% 百分号标记%c 字符及其ASCII码%s 字符串%d 有符号整数(十进制)%u 无符号整数(十进制)%o 无符号整数(八进制)%x ...