C语言实现简易扫雷
首先,写代码之前要将整体思路写出来:
扫雷游戏:1.需要两个二维数组,一个用来展示,一个用来放雷;
2.整体骨架在代码中都有注释说明;
3.游戏难度比较简单,适合初学者观看,如果有大佬看明白,可以指点一二.
//使用二维数组来表示地图,此处需要2个二维数组,第一个二维数组表示地雷的雷阵,第二个二维数组表示用户看到的地图
//扫雷地图大小9*9;但是二维数组11*11
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MINE_COUNT 10
#define ROW 9
#define COL 9
char show_map[ROW + 2][COL + 2];
char mine_map[ROW + 2][COL + 2];
int Menu(){
int choice = -1;
printf("************************\n");
printf("* 欢迎来到扫雷游戏 *\n");
printf("* 请您选择 *\n");
printf("* 1.开始游戏 *\n");
printf("* 2.离开游戏 *\n");
printf("************************\n");
while (1){
scanf("%d", &choice);
if (choice == 1)
{
return 1;
break;
}
else if (choice == 2)
{
exit(2);
}
else
{
printf("输入非法,请重新输入!\n");
continue;
}
}
}
void Init(){ //初始化 布雷
srand(time(0));
memset(mine_map, '0', (ROW + 2)*(COL + 2));
memset(show_map, '*', (ROW + 2)*(COL + 2));
int count = MINE_COUNT;
int row = -1;
int col = -1;
while (count>=0){
row = rand() % ROW + 1;
col = rand() % COL + 1;
if (show_map[row][col] == '*')
{
mine_map[row][col] = '1';
count--;
continue;
}
}
}
void Print(){ // 1 2 3 4 5 6 7 8 9
printf(" "); // -----------------
for (int col = 1; col <= COL; col++) // 01 | | | | | | | | |
{ // -----------------
printf(" %d ", col);
}
printf("\n ---------------------------\n");
for (int row = 1; row <= ROW; row++)
{
printf("%02d ", row);
printf(" |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", show_map[row][1], show_map[row][2], show_map[row][3], show_map[row][4], show_map[row][5],
show_map[row][6], show_map[row][7], show_map[row][8], show_map[row][9]);
printf(" ---------------------------\n");
}
}
char MineBoom(){
printf(" ");
for (int col = 1; col <= COL; col++)
{
printf(" %d ", col);
}
printf("\n ---------------------------\n");
for (int row = 1; row <= ROW; row++)
{
printf("%02d ", row);
printf(" |%c |%c |%c |%c |%c |%c |%c |%c |%c |\n", mine_map[row][1], mine_map[row][2], mine_map[row][3], mine_map[row][4], mine_map[row][5],
mine_map[row][6], mine_map[row][7], mine_map[row][8], mine_map[row][9]);
printf(" ---------------------------\n");
}
}
char IsFull(){
int ful = COL*ROW - MINE_COUNT;
for (int row = 1; row <= ROW; row++){
for (int col = 1; col <= COL; col++){
{
if (show_map[row][col] == '1' || show_map[row][col] == '0')
{
ful--;
}
}
}
}
if (ful == 0)
{
return 'p';
}
}
char PlayerMove(char mine_map[ROW + 2][COL + 2], char show_map[ROW + 2][COL + 2]){
int row = -1;
int col = -1;
while (1)
{
printf("请玩家选的位置(输入格式:坐标 坐标):");
scanf("%d %d", &row, &col);
if (row < 1 || row>ROW || col>COL || col < 1)
{
printf("输入越界,请重新输入!\n");
continue;
}
if (row > 0 && row<10 && col>0 && col < 10)
{
if (show_map[row][col] == '*')
{
//1.有雷 显示雷区,结束游戏
if (mine_map[row][col] == '1')
{
MineBoom();
return 'n';
break;
}
//3.显示此位的周围一圈 是否有雷
else if (mine_map[row][col] == '0')
{
int count = '0';
if (mine_map[row - 1][col - 1] == '1')
{
count++;
}
if (mine_map[row - 1][col ] == '1')
{
count++;
}
if (mine_map[row - 1][col + 1] == '1')
{
count++;
}
if (mine_map[row ][col - 1] == '1')
{
count++;
}
if (mine_map[row][col + 1] == '1')
{
count++;
}
if (mine_map[row + 1][col - 1] == '1')
{
count++;
}
if (mine_map[row + 1][col ] == '1')
{
count++;
}
if (mine_map[row + 1][col + 1] == '1')
{
count++;
}
{
show_map[row][col] = count;
Print();
return 'k';
}
}
else{
printf("已经选过,请重新输入!\n");
continue;
}
}
else{
printf("输入非法,请重新输入!\n");
continue;
}
}
}
}
void Game(){
if (Menu() == 1)//1.选择菜单
{
Init();//2.初始化,布雷
Print(); //3.打印棋盘
while (1){
if (PlayerMove(mine_map,show_map) == 'n'){
printf("踩到雷啦,游戏结束!\n");
break;
}
else if (IsFull() == 'p'){
printf("恭喜玩家胜利!\n");
break;
}
else {
continue;
}
}
}
system("pause");
}
int main(){
Game();
return 0;
}
C语言实现简易扫雷的更多相关文章
- C语言之简易了解程序环境
C语言之简易了解程序环境 大纲: 程序的翻译环境 预编译 编译 汇编 链接 程序的运行环境 在ANSI C的任何一种实现中,存在两个不同的环境. 第1种是翻译环境,在这个环境中源代码被转换为可执行的机 ...
- C语言实现简易计算器(可作加减乘除)
C语言实现简易计算器(加减乘除) 计算器作为课设项目,已完成答辩,先将代码和思路(注释中)上传一篇博客 已增添.修改.整理至无错且可正常运行 虽使用了栈,但初学者可在初步了解栈和结构语法后理解代码 # ...
- c语言的简易日历
用c语言编写的简易日历,代码如下: #include <stdio.h> int main(int argc, const char * argv[]) { // insert code ...
- C语言新手写扫雷攻略1
工欲善其事,必先利其器,首先要准备好开发环境,既然是C语言,那就不是WinAPI的扫雷,就是纯的C语言开发,但是以前的C都是TC开发的,现在用肯定是过时很久了,但是也是有解决办法的,某些大神开发出Ea ...
- c语言小游戏-扫雷的完成
C语言-扫雷游戏 本文将对此游戏做一个大致的概述,此代码适合初学者,编写软件使用了vs2017. 该代码可以实现如下功能: 1.用户可以选择3个难度,分别布置不同个数的雷. 2.随机数设置雷的位置. ...
- Java 语言实现简易版扫码登录
基本介绍 相信大家对二维码都不陌生,生活中到处充斥着扫码登录的场景,如登录网页版微信.支付宝等.最近学习了一下扫码登录的原理,感觉蛮有趣的,于是自己实现了一个简易版扫码登录的 Demo,以此记录一下学 ...
- 网络编程:基于C语言的简易代理服务器实现(proxylab)
本文记录了一个基于c socket的简易代理服务器的实现.(CS:APP lab 10 proxy lab) 本代理服务器支持keep-alive连接,将访问记录保存在log文件. Github: h ...
- C语言实现简易2048小游戏
一直很喜欢玩这个小游戏,简单的游戏中包含运气与思考与策略,喜欢这种简约又不失内涵的游戏风格.于是萌生了用C语言实现一下的想法. 具体代码是模仿这个:https://www.cnblogs.com/ju ...
- c语言实现:扫雷
问题描述:相信大多数人都很熟悉扫雷游戏,在n*n的雷盘上随机埋上一些雷,玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格.游戏的目标是在不翻出任何地雷格的条件下,找出所有 ...
随机推荐
- mongodb 3.4 学习 (六)监控
mongostat mongotop db.currentOp db.serverStatus() db.stats() db.collection.stats() # 复制集监控 rs.status ...
- 如何在PB中调用 Microsoft WEB 浏览器 控件?
PB中使用Microsoft Web Browser控件步骤: 在pb的某窗口中加入OLE对象,选择Insert control(插入控件),然后选中"Microsoft WEB 浏览器&q ...
- CSS z-index的用法
理清 position及z-index的用法: static : 无特殊定位,对象遵循HTML定位规则absolute : 将对象从文档流中拖出,使用left,right,top,bottom等属 ...
- vue.js--基础事件定义,获取数据,执行方法传值
<template> <div id="app"> <h1>{{ msg }}</h1> <br> <button ...
- 命令式编程 vs 声明式编程
实际上我们绝大多数程序员都是在用命令式风格在编程, 这是和我们的冯诺依曼计算机机构密切相关的. (码农翻身注: 参见文章<冯诺依曼计算机的诞生>) 在一个冯诺依曼计算机中, 最核心的就是C ...
- python:正则模块
1,正则表达式 正则表达式是用来做字符串的匹配的,正则有他自己的规则,和python没有关系,一种匹配字符串的规则. 2,字符组 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表 ...
- ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(八)之 聊天记录入队(列)
本篇也算是个番外篇了,跟之前几篇关系不算大.之前一篇 RabbitMQ .NET Client 实战实验 里有介绍过今天要用的内容. 做了一下小更改,就是在用户聊天的时候,消息记录不直接进入数据库, ...
- euclidean loss
个人感觉相当于L2范式开平方,也相当于针对两个向量的欧氏距离开平方 说的更直白点就是两个向量对应位置相减得到每个位置的差,然后把每个位置的差开平方再相加 前向传播cpp代码: template < ...
- U盘安装centOS和下载地址
使用到的材料: 1.centos-6.2 i386 minimal 下载地址:http://mirrors.163.com/centos/6.2/isos/i386/CentOS-6.2-i386-m ...
- U盘安装CentOS7.3教程
0.准备工作: 一台没系统的普通电脑u盘一个(大于1G,最小安装的话不超过1G,根据选择系统大小匹配U盘即可)CentOS7.3 iso文件一个UltraISO工具 1.制作U盘 ①使用UltraIS ...