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的到的结果通过我的程序实现鼠 ...
随机推荐
- Git 几个常用操作
git init -- 初始化仓库, git clone -- 从远端克隆仓库到本地 git status -- 查看git仓库的状态 git log ...
- Python 安装beautifulsoup4遇到No module named setuptools问题解决方法
背景说明: 电脑win7-32 在Python 3.3.5下安装beautifulsoup4 4.6.0(下载链接https://pypi.org/project/beautifulsoup4/#fi ...
- 基于 debian 操作系统的 docker 镜像,安装 vim
基于 debian 操作系统的 docker 镜像,安装 vim,步骤: apt-get update apt-get install vim 注意: 直接运行步骤2,可能会报错: Reading p ...
- DEX: Deep EXpectation of apparent age from a single image 论文阅读
来自:IMDB-WIKI - 500k+ face images with age and gender labels https://data.vision.ee.ethz.ch/cvl/rrot ...
- JQuery操作属性、样式、风格(attr、class、css)
样式操作 <p class="myclass" title="选择喜欢的水果">你最喜欢的水果是?</p> 在上面代码中,class也是 ...
- Unity 3D入门简介
最近在刚开始学习Unity 3D,在这里记录一下学习心得和学习笔记,边学边写,可能会比较零散.好了,废话不多说,今天从Unity 3D入门写起,主要简要介绍一下Unity 3D的和一些学习资料.以下如 ...
- ajax高级操作
$('#ajax_submit').click(function () { $.ajax({ 'url':'/app_ajax', 'type':'post', 'data':$("#f1& ...
- Day11字符串 title
一.title 二.join------将字符串中的每一个元素按照指定分隔符进行拼接. 三.ljust rjust center 左.右.中间填充 四.lower islower uppe ...
- 如何使用linux+xvfb+python+rfs+firefox+jenkins实现UI自动化
首先说一下背景,在项目中使用windows执行机进行rfs脚本运行时,遇到两个问题: 1.Jenkins的多个slave节点和master的连接通过windows插件去建立,如果出现slave断连,无 ...
- os常用模块,json,pickle,shelve模块,正则表达式(实现运算符分离),logging模块,配置模块,路径叠加,哈希算法
一.os常用模块 显示当前工作目录 print(os.getcwd()) 返回上一层目录 os.chdir("..") 创建文件包 os.makedirs('python2/bin ...