C语言-扫雷游戏
头文件
#ifndef __MINE_H__
#define __MINE_H__#define LINE 10
#define LIST 10
#define ROWS 6
#define COWS 6int game(char UserBoard[LINE+2][LIST+2], char PlayerBoard[LINE][LIST]);
void PrintBoard(char Playerboard[LINE][LIST]);
void MineLay(char UserBoard[LINE + 2][LIST + 2]);
void PrintUser(char UserBoard[LINE + 2][LIST + 2]);
int MineClear(char UserBoard[LINE + 2][LIST + 2], char PlayerBoard[LINE][LIST]);
void Blast(char UserBoard[LINE + 2][LIST + 2], char PlayerBoard[LINE][LIST]);
int Counter(char UserBoard[LINE + 2][LIST + 2], char PlayerBoard[LINE][LIST], int x, int y);#endif //mine.h
函数文件
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include"mine.h"void MineLay(char UserBoard[LINE + 2][LIST + 2])
{int x = 0, y = 0,i = 0,j = 0;char m = '0';printf("**************************\n");printf("******* a: 十个雷 ********\n");printf("******* b: 二十雷 ********\n");printf("**************************\n");printf("请选择难度>:");fflush(stdin);scanf("%c",&m);printf("\n");if ('a' == m){j = 10;}elsej = 20;while (i < j){x = rand() % 10 + 1;y = rand() % 10 + 1;if ('0' == UserBoard[x][y]){UserBoard[x][y] = '1';i++;}}}void Blast(char UserBoard[LINE + 2][LIST + 2], char PlayerBoard[LINE][LIST])//全局输了
{int i = 0, j = 0;for (i = 1; i <=LINE; i++){for (j = 1; j <= LIST; j++){if ('1' == UserBoard[i][j]){PlayerBoard[i - 1][j - 1] = '#';}if ('*' == PlayerBoard[i - 1][j - 1]) //{ //PlayerBoard[i - 1][j - 1] = ' '; //} //}}
}void PrintBoard(char Playerboard[LINE][LIST])
{int i = 0, j = 0;printf(" 0 1 2 3 4 5 6 7 8 9 10\n");printf("------------------------\n");for (i = 0; i < LINE; i++){printf("%2d| ",i+1);for (j = 0; j < LIST; j++){printf("%c ",Playerboard[i][j]);}printf("\n");}printf("\n");
}int MineClear(char UserBoard[LINE + 2][LIST + 2], char PlayerBoard[LINE][LIST])
{int x = 0, y = 0,num = 0,win = 0,i =0,j = 0,m = 0,n = 0,p = 0,q = 0,a = 0,b = 0;while (1){printf("请输入扫雷坐标>:");scanf("%d%d", &x, &y);a = x;b = y;i = x;j = y;m = x;n = y;p = x;q = y;if ((x > 0 && x <= 10) && (y > 0 && y <= 10)){if ('1' == UserBoard[x][y]){PlayerBoard[x-1][y-1] = '#';Blast(UserBoard, PlayerBoard);PrintBoard(PlayerBoard);printf("啊!!!!你被炸死啦!!!!\n");return 0;}if ('0' == UserBoard[x][y]){for (a = x; a >= 1; a--,b = y)//向上向左{if (0 != Counter(UserBoard, PlayerBoard, a, b))break;for (b = y; b >= 1; b--) 自加自减和for循环的初值一定要注意哦,我一开始的代码是 for (a = x; a >= 1 && '0' == UserBoard[a][b]; a--)for(; b >= 1 && '0' == UserBoard[a][b]; b--)此时{ //此时,当a--时,b的值已经是上次的0了,所以下面的每次都不执行,因为判断条件是b>=1if (0 != Counter(UserBoard, PlayerBoard, a, b))break;}}for (i = x; i >= 1; i--,j = y)//向上向右数{if (0 != Counter(UserBoard, PlayerBoard, i, j))break;for (j = y; j <= LIST; j++) //for循环里面尽量不要既执行又判断{if (0 != Counter(UserBoard, PlayerBoard, i, j))break;}}for (m = x; m <= LINE; m++,n = y)//向下向左{if (0 != Counter(UserBoard, PlayerBoard, m, n))break;for (n = y; n >= 1; n--){if (0 != Counter(UserBoard, PlayerBoard, m, n))break;} }for (p = x; p <= LINE; p++,q = y)//向下向右{if (0 != Counter(UserBoard, PlayerBoard, p, q))break;for (q = y; q <= 4; q++){if (0 != Counter(UserBoard, PlayerBoard, p, q))break;} }PrintBoard(PlayerBoard);//PrintUser(UserBoard); win = 0; //一开始的时候这个地方没有写win = 0;这样就出现了一个问题,就是,上次输入一个坐标循环的时候win已经有大于0的值,导致循环完的最终结果不能小于3for (x = 0; x < LINE; x++){for (y = 0; y < LIST;y++)if ('*' == PlayerBoard[x][y]){win++; }}if (win <= 3){for (x = 0; x < LINE; x++){for (y = 0; y < LIST; y++)if ('*' == PlayerBoard[x][y]){PlayerBoard[x][y] = '#';}}printf("扫雷成功,你赢了!!!\n");return 0;}}}}
}int Counter(char UserBoard[LINE + 2][LIST + 2], char PlayerBoard[LINE][LIST], int x, int y)
{int num = 0;num = (UserBoard[x - 1][y - 1] - '0') +(UserBoard[x - 1][y] - '0') +(UserBoard[x - 1][y + 1] - '0') +(UserBoard[x][y - 1] - '0') +(UserBoard[x][y + 1] - '0') +(UserBoard[x + 1][y - 1] - '0') +(UserBoard[x + 1][y] - '0') +(UserBoard[x + 1][y + 1] - '0');if (0 == num){PlayerBoard[x - 1][y - 1] = '0';}else{PlayerBoard[x - 1][y - 1] = num + '0';}return num;
}int game(char UserBoard[LINE+2][LIST+2], char PlayerBoard[LINE][LIST])
{/*int x = 0, y = 0;int i = 0, j = 0;*///PrintBoard(PlayerBoard);MineLay(UserBoard);PrintBoard(PlayerBoard);//PrintUser(UserBoard); ///return MineClear(UserBoard, PlayerBoard);return 0;
}void PrintUser(char UserBoard[LINE + 2][LIST + 2])
{int i = 0, j = 0;printf(" 0 1 2 3 4 5 6 7 8 9 10\n");for (i = 0; i < LINE + 2; i++){printf("%2d ", i );for (j = 0; j < LIST + 2; j++){printf("%c ", UserBoard[i][j]);}printf("\n");}printf("\n");
}
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<windows.h>
#include"mine.h"
//1.第一次扫雷,扫一大片2.玩家选择难度3.插标记void menu()
{printf("***********************\n");printf("****** 1.play *******\n");printf("****** 0.exit *******\n");printf("***********************\n");printf("请选择相应的数字>:");
}int main()
{char PlayerBoard[LINE][LIST];char UserBoard[LINE + 2][LIST + 2];int input = 1, a = 0;srand((unsigned int)time(NULL));while (input){memset(PlayerBoard, '*', sizeof(char)*LINE*LIST);memset(UserBoard, '0', sizeof(char)*(LINE+2)*(LIST+2));menu();scanf("%d", &input);printf("\n");switch (input){case 1:a = game(UserBoard, PlayerBoard);break;case 0:break; //此处break的作用是结束switchdefault:printf("你的输入不符合要求,请重新输入>:"); break;}if (0 == input){break; //此处break的作用是跳出while循环,即结束游戏}}printf("游戏结束,欢迎再次使用!!!\n");system("pause");return 0;
}
相关文章:

PHP的命令行脚本调用
1.使用PHP命令调用php脚本接受键盘输入然后输出 1 <?php 2 fwrite(STDOUT, "Please input your name:\t"); 3 $name trim(fgets(STDIN)); 4 fwrite(STDOUT, Hello . $name); 5 ?> 2.使用PHP命令调用php脚本并接受参数 1 <?php2 if($ar…

控制输入框只能输入数字
1.将input的属性type改为number 2.这时的输入框会有小箭头, 去掉小箭头的方法,给input添加样式 input::-webkit-outer-spin-button,input::-webkit-inner-spin-button { -webkit-appearance: none;}input[type"number"] { -moz-appearan…
main函数参数,在VS中向命令行添加参数的方法
问题描述 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例…

2.monotouch 控件的使用
1.我们打开一个xib 右下角会看到如下图所示: 这一部分包含了界面和各种各样的控件。选取一个控件,使用鼠标拖动到界面上即可使用。 2.选中一个控件,该控件的相关信息会在右边进行显示。做出相关设置即可。 3.设置控件属性和绑定控件事件。 首…

python视频延迟严重_【Python】改善 VideoCapture 的影像延迟
许多的范例程序大多仅介绍该如何用 VideoCapture 撷取摄影机的画面,却没有充分说明其隐含的问题。以下示范一个最基本的影像撷取程序。# -*- coding: utf-8 -*-import cv2# ip camera 的撷取路径URL "rtsp://admin:admin192.168.1.1/video.h264"# 建立 V…

CentOS 6.0配置pptp ××× Client和Squid透明网关
目的: 构建一台单网卡Linux网关(透明代理),该网关拨入某海外服务器,客户端设定该网关后,网络出口则为海外服务器,实现加速访问一些网站的目的。 环境信息: 硬件:DELL机器…

mysql汉字转拼音函数
-- 创建汉字拼音对照临时表 CREATE TABLE IF NOT EXISTS t_base_pinyin (pin_yin_ varchar(255) CHARACTER SET gbk NOT NULL,code_ int(11) NOT NULL,PRIMARY KEY (code_) ) ENGINEInnoDB DEFAULT CHARSETlatin1;-- 插入数据 INSERT INTO t_base_pinyin (pin_yin_,code_) VAL…

数据挖掘的一些经典算法
数据挖掘能做以下七种不同事情(分析方法):数据挖掘能做以下七种不同事情 分类 (Classification) 估计(Estimation) 预测(Prediction) 相关性分组或关联规则(…

python cx oracle安装_python3.6的安装及cx_oracle安装
一、创建所需目录mkdir -p /home/用户名/software/python3.6.1mkdir -p /home/用户名/priv/bydmkdir -p /home/用户名/priv/byd/src/pythonmkdir -p /home/用户名/priv/byd/org二、修改byd目录的权限cd /home/用户名/priv/llchmod 777 byd/ll三、将安装包放到byd中,…

opencv 无法找到tbb_debug.dll
本人环境:vs 2010 在opencv(你的opencv install 路径)\build\common\tbb\ia32\vc10下,将tbb.dll 拷贝一份,改名为tbb_debug.dll. 并将此路径加入到系统环境变量中即可。转载于:https://blog.51cto.com/danielllf/871369

【天命奇御】成就进度62/71的通关攻略(1·开篇前言)
天命奇御于2018.8.9号在wegame上发售 先是一周目记录: 可以说一周目是熟悉最终boss技能后,靠技术过的...... 然后是二周目记录: 开篇前言: 转载于:https://www.cnblogs.com/wuduojia/p/9494700.html
使用git上传代码到github
1. github上创建项目 github是一个服务器托管商,我们写好的代码可以上传到github上面去 登录github的官方网站:http://github.com/ 注册一个自己的用户 新建一个项目,我这里有我自己的一个github账号,我直接登录上去了&am…

gpg加密命令 linux_用 PGP 保护代码完整性(五):将子密钥移到一个硬件设备中 | Linux 中国...
在这个系列教程中,将为你提供使用 PGP 和保护你的私钥的最佳体验。-- Konstantin Ryabitsev致谢译自 | linux.com 作者 | Konstantin Ryabitsev译者 | LCTT / qhwdw在这个系列教程中,将为你提供使用 PGP 和保护你的私钥的最佳体验。在本系列教程中&#…

在Android使用XML文件控制按钮文字在各种状态下的颜色
最近在项目中遇到新的需求,就是在按钮在选按的时候需要将文字变为白色,但android默认的按钮颜色为黑色,之前也没有考虑过类似的问题。 通过doc文档,发现按钮文字的处理方式和背景的处理方式很相似,同样可以用一份selec…

人人网 6.0 版申请页面随着滚动条拖动背景图片滚动出现的原理
第一步是考虑静态实现。整个页面分成几大块,比如: <div class"section" id"topic-a"></div> <div class"section" id"topic-b"></div> <div class"section" id"topi…

Python内部类,内部类调用外部类属性,方法
一 Python中内部类 典型定义: class MyOuter:age18def __init__(self,name):self.namenameclass MyInner:def __init__(self,inner_name):self.inner_nameinner_nameoutMyOuter(lqz) innerout.MyInner(lqz_inner) print(inner.inner_name) 二 内部类调用外部类的类属…

POJ 2528 Mayor's posters(线段树)
题目大意 贴海报。每张海报的高度都是一样的,唯独宽度不一样。每张海报只能占用整数倍的单位线段长度,贴了 n(n<10000) 张海报之后,有几张能够看见(有一个角能看见这张海报也算被看见了)?海报的宽度最大…

xmind 模板_xmind模板打包下载
500套xmind模板【分类整合】好东西分享啦!~百度网盘下载链接:https://pan.baidu.com/s/1pCf8aqM8R8m4U4oWZUfOUA提取码:xt1j 微云盘下载连接: https://share.weiyun.com/5c3vehsXMind中的思维导图结构包含一个中心根主题ÿ…
Pycharm的运行和简单调试
我这里已经简单的创建了一个文件,为了浅显易懂,这里程序写的比较简单 1. 运行程序 首先,找到编辑窗口上面有一个向下方向的灰色箭头,点击它 点击之后,选择第一个选项edit Configurations,然后在弹出…

为什么百度只收录我的网站首页?
在我们做SEO的时候,经常碰到一个常见的问题,百度只收录网站的首页或者是一夜之间网站的收录变成了只剩首页。出现这种情况的原因很多,我们需要去检查自己的问题,然后去解决,让自己的网站重新获得更多页面的收录&#x…

Python3.5 学习十二 数据库介绍
MYSQL介绍: 主流三种数据库:Oracle、Mysql、Sqlserver Mysql安装和启动: windows 1安装 2启动服务 3进入bin目录,打开命令行 4 mysqladmin -u root password ******* 设置密码 5 mysql -u root -p 使用密码登录 显示所有数据…
github上删除一个仓库
首先进入到你需要删除的仓库,在这个页面的左侧或者上部找到”settings”选项 点击进入”settings”,然后一直往下拉,直到看到一个红色的横条区域,下面有一个”Delet this respository”,点击删除即可

两个线程同时访问一个变量_百战程序员:Java多线程对象及变量的并发访问
在开发多线程程序时,如果每个多线程处理的事情都不一样,每个线程都互不相关,这样开发的过程就非常轻松。但是很多时候,多线程程序是需要同时访问同一个对象,或者变量的。这样,一个对象同时被多个线程访问&a…

AE 9.3代码 升级到AE10.0
下载的代码是AE 9.3,本机配置是AE 10.0 ,程序打不开,运行不了,提示找不到ESRI.ArcGIS.Controls.AxMapCongrol等等AE 控件。 具体解决方法: (1) 在引用中,重新添加ArcGIS引用…

mysql数据库主从同步过程详述(三)
续mysql数据库主从同步过程详述(二)在此说明下:在最后试验过程中,当查看从库状态的时候,IO_Running显示为no,从error_log中看到如下报错提示:120523 0:55:31 [Note] Slave I/O thread: connected to master rep192.168.1.5:3306, replication started in log mysql-bin.0000…

[No0000160]常用C# 正则表达式大全
正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串。正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法。Regex 类表示不可变(只读)的正则表达式。它还包含各种静态方法ÿ…

在VS中,如何新建项目,如何添加类库
学习了C#基础后就自己做了一个小小的qq空间,感觉挺好的。之后,由于团队需要被分配到测试方面去了,虽然测试时会看C#代码,但终究不是自己写的,没有那种深究的热情,尽管师兄说,看代码是最快提升的…
Python中requests包的安装
在使用pycharm开发的时候,我们经常需要导入一些包,但是这些包,我们事先并没有安装,一个显著的现象就是我们在pycharm中导入一个包时,系统提示不存在,那就是我们没有安装这个包。举一个例子,我在…

python fft库有哪些_Python图像处理库PIL中快速傅里叶变换FFT的实现(一)
离散傅里叶变换(discrete Fouriertransform)傅里叶分析方法是信号分析的最基本方法,傅里叶变换是傅里叶分析的核心,通过它把信号从时间域变换到频率域,进而研究信号的频谱结构和变化规律。FFT是一种DFT的高效算法,称为快速傅立叶变…

转: Android ListView 滑动背景为黑色的解决办法
2019独角兽企业重金招聘Python工程师标准>>> 在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然…