c语言实现:扫雷
问题描述:相信大多数人都很熟悉扫雷游戏,在n*n的雷盘上随机埋上一些雷,玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。
游戏设计:
在test.c里,完成了游戏的框架实现
首先,我们写一个test()函数测试我们写出的小游戏
void test()
{
int input = ;
do
{
menu();
srand((unsigned)time(NULL));
printf("请输入选项:");
scanf("%d",&input);
switch(input)
{
case :
game();
break;
case :
printf("退出游戏");
break;
default:
printf("输入错误,请重新输入:\n");
break;
}
}while(input);
}
接着就是菜单函数,辅助玩家选择
void menu()
{
printf("**********************\n");
printf("**** 1.play ********\n");
printf("**** 0.exit ********\n");
printf("**********************\n");
}
最后就是我们的游戏实现部分啦
void game()
{
int ret = ;
char mine[ROWS][COLS] = {};
char show[ROWS][COLS] = {};
InitBoard(mine,ROWS,COLS,'');
InitBoard(show,ROWS,COLS,'*');
DisplayBoard(show,ROWS,COLS);
printf("\n");
//DisplayBoard(mine,ROWS,COLS);
Setmine(mine,ROW,COL);
DisplayBoard(mine,ROWS,COLS);
while ()
{
int ret=FineMine(mine,show,ROW,COL);
if(ret==)
break;
else if(ret==)
{
printf("被雷炸死\n");
DisplayBoard(show,ROWS,COLS);
printf("\n");
DisplayBoard(mine,ROWS,COLS);
printf("\n");
break;
}
DisplayBoard(show,ROWS,COLS);
printf("\n");
}
}
接着我们就得实现游戏函数的主要细节实现:
1、函数声明部分
game.h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h> #define ROWS 10
#define COLS 10
#define ROW 8
#define COL 8
#define COUNT 5 void InitBoard(char board[ROWS][COLS],int rows,int cols, char c);
void DisplayBoard(char board[ROWS][COLS],int row,int col);
void Setmine(char board[ROWS][COLS],int row,int col);
int FineMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);
int count_show(char board[ROWS][COLS],int row ,int col);
2、函数的细节实现
game.c
首先利用memset函数初始化棋盘
void InitBoard(char board[ROWS][COLS],int rows,int cols, char c)
{
memset(board,c,rows*cols*sizeof(char)); }
打印棋盘实现
void DisplayBoard(char board[ROWS][COLS],int rows,int cols)
{
int i = ;
int j = ;
for (i = ; i <rows - ; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = ; i <rows - ; i++)
{
printf("%d ", i);
for (j = ; j < cols - ; j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
printf("%d ",rows-);
for (i = ; i < rows - ; i++)
{
printf("%c ", board[rows-][i]);
}
printf("\n");
}
利用rand()函数随机埋雷
void Setmine(char board[ROWS][COLS],int row,int col)
{
int x = ;
int y = ;
int count = COUNT;
while (count)
{
int x = rand() % row + ;
int y = rand() % row + ;
if (board[x][y] == '')
{
board[x][y] = '';
count--;
}
}
}
扫雷过程(判断输赢):
int FineMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
int x = ;
int y = ;
int count = ;
printf("输入坐标扫雷\n");
scanf("%d %d", &x, &y);
if ((x >= && x <= row) && (y >= && y <= row))
{
if (mine[x][y] == '')
{
char ch = count_mine(mine,x,y);
show[x][y] = ch+'';
open_mine(mine,show,x, y);
if (count_show(show,row,col) == COUNT)
{
DisplayBoard(show,ROWS,COLS);
printf("玩家赢!\n\n");
DisplayBoard(mine,ROWS,COLS);
printf("\n");
return ;
}
}
else if (mine[x][y]=='')
{
return ;
} }
else
{
printf("输入错误重新输入\n");
}
}
在扫雷函数中我们需要一些功能函数地辅助。
判断周围雷的个数
static char count_mine(char board[ROWS][COLS],int x, int y)
{
int count = ;
if (board[x - ][y - ] == '')
count++;
if (board[x - ][y] == '')
count++;
if (board[x - ][y + ] == '')
count++;
if (board[x][y - ] == '')
count++;
if (board[x][y + ] == '')
count++;
if (board[x + ][y - ] == '')
count++;
if (board[x + ][y] == '')
count++;
if (board[x + ][y + ] == '')
count++;
return count;
}
展开扫雷
static void open_mine(char mine[ROWS][COLS],char show[ROWS][COLS],int x, int y)
{
if (mine[x - ][y - ]== '')
{
show[x - ][y - ] = count_mine(mine,x - , y - ) + '';
}
if (mine[x - ][y] == '')
{
show[x - ][y] = count_mine(mine,x - , y) + '';
}
if (mine[x - ][y + ] == '')
{
show[x - ][y + ] = count_mine(mine,x - , y + ) + '';
}
if (mine[x][y - ] == '')
{
show[x][y - ] = count_mine(mine,x, y - ) + '';
}
if (mine[x][y + ] == '')
{
show[x][y + ] = count_mine(mine,x, y + ) + '';
}
if (mine[x + ][y - ] == '')
{
show[x + ][y - ] = count_mine(mine,x + , y - ) + '';
}
if (mine[x + ][y] == '')
{
show[x + ][y] = count_mine(mine,x + , y) + '';
}
if (mine[x + ][y + ] == '')
{
show[x + ][y + ] = count_mine(mine,x + , y + ) + '';
}
}
最后统计是否扫除雷外所有非雷格
int count_show(char board[ROWS][COLS],int row ,int col)
{
int count = ;
int i = ;
int j = ;
for (i = ; i <= row; i++)
{
for (j = ; j <= col; j++)
{
if (board[i][j] == '*')
{
count++;
}
} }
return count;
}
以上就是我关于扫雷写的一个简单的小程序,还很稚嫩,会持续更新改进的。
c语言实现:扫雷的更多相关文章
- C语言_扫雷代码
本文详细讲述了基于C语言实现的扫雷游戏代码,代码中备有比较详细的注释,便于读者阅读和理解.希望对学习游戏开发的朋友能有一点借鉴价值. 完整的实例代码如下: ? 1 2 3 4 5 6 7 8 9 10 ...
- C语言实现扫雷游戏(完整版)
头文件定义.函数声明 下面就是扫雷中使用到的所有函数,为了省事我把所有的代码都放在一个C文件中实现 宏定义中设置了游戏的界面布局,以及设置地雷的个数(这里默认的是10个地雷),界面是一个9*9的方格布 ...
- C语言可以开发哪些项目?
C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中--,这些迷茫也导致了我们在学习的过程 ...
- C语言可以开发哪些项目?(转)
原文地址:https://www.cnblogs.com/shiyanlou/p/6098661.html 知乎:https://www.zhihu.com/question/20564904 C语言 ...
- 17个C语言可以做的小案例项目
C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中……,这些迷茫也导致了我们在学习的过程 ...
- C 碎片十一 扫雷源码
// C语言版本扫雷 #include <stdio.h> #include <stdlib.h> /* 1(0,0) 1(0,1) 0(0,2) 1(0,3) 1(0,4) ...
- 用C语言开发的19个经典项目,你会第几个?
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:实验楼 C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多 ...
- C语言新手写扫雷攻略1
工欲善其事,必先利其器,首先要准备好开发环境,既然是C语言,那就不是WinAPI的扫雷,就是纯的C语言开发,但是以前的C都是TC开发的,现在用肯定是过时很久了,但是也是有解决办法的,某些大神开发出Ea ...
- c语言小游戏-扫雷的完成
C语言-扫雷游戏 本文将对此游戏做一个大致的概述,此代码适合初学者,编写软件使用了vs2017. 该代码可以实现如下功能: 1.用户可以选择3个难度,分别布置不同个数的雷. 2.随机数设置雷的位置. ...
- 用算法去扫雷(go语言)
最初的准备 首先得完成数据的录入,及从扫雷的程序读取界面数据成为我的算法可识别的数据 其次是设计扫雷的算法,及如何才能判断格子是雷或者可以点击鼠标左键和中键. 然后将步骤2的到的结果通过我的程序实现鼠 ...
随机推荐
- sed常用操作命令
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据进行替换.删除.新增.选取等特定工作. 命令格式: sed [OPTION]... {script-only-i ...
- Ubuntu使用总结二
Ubuntu使用 - 1.ubuntu怎么切换到root用户,切换到root账号方法 ubuntu怎么切换到root用户,我们都知道使用su root命令,去切换到root权限,此时会提示输入密码, ...
- tnsping无法ping通的问题,TNS-12535 TNS操作超时 (服务器环境:window server 2008R2 数据库环境:oracle 11 g)
今天新搭建一个测试用的数据库服务器,操作系统为WIN server 2008 r2 版本.系统内已安装oracle 11g database,数据库服务端已配置完毕,监听listener已开启. 我在 ...
- thinkphp5.0.22远程代码执行漏洞分析及复现
虽然网上已经有几篇公开的漏洞分析文章,但都是针对5.1版本的,而且看起来都比较抽象:我没有深入分析5.1版本,但看了下网上分析5.1版本漏洞的文章,发现虽然POC都是一样的,但它们的漏洞触发原因是不同 ...
- Android Studio学习NO.1 了解项目资源
2018.3.1 12:40:51 阅读书籍:第一行代码 1. res目录 drawable 图片 mipmap 图标 values 字符串.样式.颜色 layout 布局 2. 引用(可在Andro ...
- 使用python调用其他脚本
cmd = '<command line string>' print(cmd) p = subprocess.Popen(args=cmd, shell=True, stdout=sub ...
- Python(四) —— 函数
什么是函数? 把一堆代码放一起就叫函数 函数用来干什么? 不复写代码,提高代码重复利用程度 怎么定义以及调用函数: def fun1(): #定义函数 print('这是一个函数') #函数体,里面什 ...
- 部署JupyterLab和pyalgotrade搭建web策略回测环境
==========================================================================安装anaconda 3 64位版本cd /optm ...
- 谷歌浏览器添加JSON-handle插件
访问谷歌应用商店必须FQ,具体可安装谷歌访问助手:http://www.cnblogs.com/yangcx666/p/8783642.html 不想FQ的可以百度 "谷歌插件网" ...
- mysql 8.0 主从复制的优化
mysql 8.0复制改进一简介: 基于GTID下的并行复制,本文不考虑MGR架构二 主要特性 1 基于writeset的下的改进型并行复制 我在之前的一篇文章关于并行复制中详细的介绍了关 ...