1.任务概述

1.1 系统总体目标

本项目的目的在于开发一个扫雷软件,该软件面向游戏玩家用户,具有进行扫雷游戏的功能。游戏玩家将使用系统中的如下功能:

进行游戏

使用自定义游戏规格功能

使用计时器功能

使用高分榜功能

2.2 运行环境需求操作系统:Windows 10

开发环境:VS2013

2.数据需求与概要设计

2.1 数据描述

本系统涉及的对象包括方格中是否有方格状态(是否有雷)(fangge[X][Y]),产雷(lei[k]),方格是否打开(Click[X][Y]),方格内数字(number[X][Y]),是否被红旗标记(Flag[X][Y]),是否被左右键点下(LeftClick[X][Y]、RightClick[X][Y]),周围红旗标记数(flagnumber[X][Y]),游戏是否胜利(win_or_lose)等。(X、Y代表方格坐标)

对于特定的方格:

方格附近的雷数决定方格显示的数字是多少

方格是否被打开(方格状态)决定是否显示雷或数字

左右键点下同时标记数等于雷数以后打开未被标记的方格

方格中有雷被打开为游戏失败

雷是否全被找出(雷状态)决定游戏是否胜利

然后给出每类对象的详细属性列表,如:

雷:位置(随机函数布雷)(lei[k]=0~X*Y)

方格是否有雷:有/无(fangge[X][Y]=1/0)

方格状态:点开/未被点开(Click[X][Y]=1/0)

红旗:被标记/未被标记(flag[X][Y]=1/0)

方格内数字:0~8不等(number[X][Y]=0~8)

雷状态:被排完/未被点到/被点到(win_or_lose=1/0/-1)

周围红旗数:0~8不等(flagnumber[X][Y]=0~8)

2.2 数据字典

本系统将游戏数据分别装在View类和其他类中描述,游戏所具有的数据项的详细定义见表X。

数据项

名称

类型

长度精度

能否为空

编码规划或定义域说明

备注

fangge[50][50]

整数数组

50*50

NO

有:1 无:0

记录是否有雷

Click[50][50]

整数数组

50*50

NO

点开:1 无:0

记录是否被点开

number[50][50]

整数数组

50*50

NO

0~8

记录方框内数字

flag[50][50]

整数数组

50*50

NO

是:1 否:0

记录是否被红旗标记

LeftClick[50][50]

整数数组

50*50

NO

是:1 否:0

记录左键是否点下

RightClick[50][50] flagnumber[50][50]

整数数组 整数数组

5050 5050

NO NO

是:1 否:0 0~8

记录右键是否点下 记录周围红旗数

i j k

坐标 坐标 雷

整数 整数 整数

1 1 1

NO NO NO

0~X 0~Y 0~雷数

横坐标 纵坐标 雷循环变量(布雷)

lei[50]

整数数组

50

NO

产雷上限50

X

整数

1

NO

0~50

游戏界面长

Y

整数

1

NO

0~50

游戏界面宽

Mine_number

整数

1

NO

0~50

雷数

win_or_lose

整数

1

NO

胜:1 未结束:0 败:-1

是否胜利

Time second

时间

整数 整数

1 1

NO NO

未:0 开始:1 0~游戏时间

开始计时标志 计时

a _x _y set_mine

规格

对象 整数 整数 整数

1 1 1

NO NO NO NO

通过对话框控制游戏规格 0~最大规格 0~最大规格 已进行布雷:1 未进行布雷:0

全局变量( GAMESIZE) 记录鼠标点击横方格 记录鼠标点击纵方格 是否布雷

win

胜利

整数

1

NO

胜利:1 未胜利:0

全局变量记录是否胜利

game_time

时间

整数

1

NO

值:second

全局变量 记录游戏时间

2.3 数据内外部存储

2.3.1 游戏数据的内外存存储

游戏数据在内存中以数组形式保存,游戏玩家姓名数据在外存中保存成数据文件,文件格式定义如下:highscore.txt。

2.4 数据流说明

在此处说明各类数据的大致处理流程,可以用数据流图或文字进行说明,数据流图的画法请自己参考相关文档。

高分榜处理流程:

由用户输入名字,存储到相应文件中

用户打开高分榜

打开相应文件,进行读取和显示

3.功能需求与概要设计

总体功能:进行扫雷游戏

3.1功能划分

本软件的功能划分成如下几个模块:

设置游戏规格

记录玩家姓名

进行扫雷游戏

游戏内计时器

玩家高分榜

3.2 功能描述

3.2.1 设置游戏规格

进入游戏前,弹出对话框,进行设置游戏界面规格,可设置游戏区域长、宽、雷数。

实现过程

定义全局变量,在游戏开始后输入行数、列数、雷数,传递给CSaoLeiView进行变量初始化(初始化为10/10/10)。

3.2.2 记录玩家姓名(SetName)

弹出对话框,要求玩家输入玩家姓名,便于之后记录游戏数据(高分榜)。若游戏胜利且时间少于高分榜上玩家,则添加游戏记录。

实现过程

定义全局变量,在游戏开始后储存玩家姓名(m_name),之后等待是否需要被传递。

3.2.3 进行扫雷游戏(CSaoLeiView)

左键单击界面开始游戏,若为空格(实际为数字0)则展开至周围全为数字,数字则显示数字,右键可标记雷,左右键同时点击可进行排雷(周围红旗数等于雷数使打开未被标记的方格)。全部雷被排以后显示游戏胜利(笑脸),有雷被点开显示游戏失败(哭脸)。

实现过程

对于单个的方格显示:首先判断是否被点开,若被点开则判断是否有红旗标记,若有标记显示红旗,无则显示未点开;若被点开,则判断该方格是否有雷,若有则显示雷,同时游戏失败,显示哭脸。无则打开方格,显示数字;若数字为0,则打开附近的方格;若游戏进行到所有雷都被排出,或者只剩下雷未被点开,则游戏胜利,显示笑脸。

布雷(SetMine()):调用随机函数(非伪随机)产生0~X*Y的数字,分别放到相应的方格中(布雷),若重复,则再次布雷。

展开(SetClick()):判断方格是否为空(0)且处于打开状态,则打开周围八格;之后遍历每格,进行打开方格。

计算数字(SetNumber()):通过对方格不同位置的讨论,如顶点,边,中心,进行方格数字的计算。

计算红旗(SetFlagNumber()):基本计算方法同上,计算周围红旗的数目。

右键标记:由右键函数对相应数组进行操作,点下后该位置记为1,未点下则记为0。

左右键排雷:由左键函数和右键函数对相应数组进行操作,当两数组同时为1则进行判断:周围红旗数是否等于雷数,若相等则打开未被标记的方格。

判断游戏结果:仅剩所有雷未被点开,即可获得游戏胜利。

构造函数:初始化各类变量(基本为0),接受设置窗口传来的游戏规格变量。

OnCreate():设立计时器SetTimer()。

OnDraw():首先进行布雷,计算方格中的数字,计算周围的红旗数(用于左右键),点击结算操作。之后输出方格、游戏界面(显示方法见上)、计时器(分三数字展示),判断是否胜利(游戏结束后关闭计时器)。

OnIDGaofen():将高分榜添加到游戏界面上(定义高分榜的全局变量,将参数值传递过来)。

OnLButtonUp():点下后开始计时,若游戏未结束,对点击位置进行计算,判断位于哪个方格,记录点击,调用OnDraw()。

OnRButtonUp():同上(添加再次点击取消小红旗功能)。

OnTimer():与之前设立的计时器相连,游戏开始后开始计时,每1s重画一次计时器区域。

3.2.4 游戏内计时器

左键点击游戏界面以后开始计时,游戏结束以后停止计时。

实现过程

之前设置SetTimer函数,在OnTimer中进行计时操作。首先判断游戏是否开始(由单一变量Time记录),左键点下以后开始计时,并以三位数的形式显示在游戏区域左上方;之后判断游戏是否结束(win_or_lose),结束后停止计时,储存在全局变量中,等待是否传递给高分榜。

3.2.5 玩家高分榜

游戏胜利后,若游戏时间比之前高分榜上游戏玩家用时少,则记录新的游戏记录和玩家,下次打开游戏使用高分榜功能时也能够看到本次记录。高分榜记录前三名用时最少的历史玩家。

实现过程

开启一个字符数组用于存放用户名,整数数组用于存放游戏时间(长度均为3,记录前三名玩家)。使用全局变量,传递游戏时间和用户名;定义文件指针进行读写。按一定格式对文件内容进行读取,调用Sort函数,进行排序;输出排序后的前三名到高分榜对话中,同时输出到文件中,覆盖之前的文件内容。

Sort():按时间进行排序,用时少的排在前面。

4.游戏截图

游戏参数设置

设置玩家昵称

游戏初始界面

游戏中

高分排行榜

用c语言写扫雷游戏倒计时代码,课内资源 - 基于VS2013实现的扫雷小游戏相关推荐

  1. 基于linux下QT象棋,课内资源 - 基于QT实现的网络象棋游戏

    1.功能说明 1.1 初始界面 初始界面中包含一个菜单栏,菜单栏中有一个建立连接选项,可以用来与其他程序建立连接. 1.2 建立连接 单击建立连接后,会弹出一个对话框以配置连接的相关信息,包括创建服务 ...

  2. c语言全民飞机游戏代码,课内资源 - 基于VC++和OpenCV实现的全民飞机大战游戏

    摘要功能:利用C++语言完成了一个小游戏项目-全民飞机大战,该游戏首先能够给用户提供注册,登录功能:提供了菜单栏及两种游戏模式,一种是无尽模式,另一种是一般模式:一般模式中用户通过控制玩家飞机攻击敌方 ...

  3. c语言机票座位预定系统_课内资源 - 基于C语言的飞机票预订系统

    1 解题思路 本题需要综合使用数据结构的知识.以此,将航班数据设计成链表形式即定义结构体,其中包含飞机序号,登机口作为数据域,next作为指针域,将此结构体称为Node.将乘客信息设计成特殊的结构体, ...

  4. c语言文字冒险类游戏,课内资源 - 基于C语言和easyx实现的巧虎划船大冒险游戏...

    1 需求分析 1.1 功能需求 游戏性:通过键盘方向键的←.→.↑.↓来控制巧虎(船)的移动,躲避暗礁,碰撞宝物(特殊宝物),来增加积分,在倒计时结束前(到达终点前)争取得到更多分数.为提高可玩性,宝 ...

  5. python迷宫小游戏代码_课内资源 - 基于python实现的迷宫游戏

    一.项目概述与编译环境 本次大作业选题为题目2,即小兔子找胡萝卜的迷宫问题,最终完成开发的游戏名为Caveman and Treasure(穴居人寻宝),游戏整体界面如下: 该项目在windows下编 ...

  6. cmd上写的java简单代码_用cmd编辑一个超级简单的小游戏,求代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贪吃蛇: import java.awt.*; import java.util.LinkedList; import java.util.Scanner ...

  7. C语言编程求解圆盘的汉诺塔,课内资源 - 基于80x86汇编的汉诺塔

    一.软件背景介绍 我们今天要陈述的应用叫做汉诺塔,大家可能小时候都接触过类似于鲁班锁,九连环的益智玩具,我们要说的汉诺塔其实也可以说是益智玩具的一种. 下面我们具体介绍一下汉诺塔.汉诺塔有三根杆子A, ...

  8. c语言外卖程序,课内资源 - 基于C语言的外卖派单模拟系统

    一.课题任务概述 你运行一家外卖快递服务店,负责一个区域内的外卖订单接收和餐食快递.你有一笔启动资金,可以招募外卖骑手帮你送餐,来赚取快递费.但你也会面临风险,本区域的订单你都有义务接收,不能拒绝,若 ...

  9. 餐厅管理程序c语言源代码,课内资源 - 基于C++的餐厅管理程序的设计与实现

    摘 要 随着计算机应用技术的快速发展和日益普及,网络也遍及到我们生活的每个角落,为我们的学习和工作带来极大的方便.很多人都使用过传统的文字,纸张管理手段,与之不同的另外一种管理方式就是利用电脑程序管理 ...

最新文章

  1. 国民技术芯片相关产业研发
  2. 如何入门Go语言?这个开源项目赶紧收藏!
  3. 用了5年的Git,你竟然还不晓得它的实现原理!
  4. MYSQL不能从远程连接的解决方法
  5. C#实现水晶报表绑定数据并实现打印
  6. 从实例入手Shiro并实现HellloWorld
  7. PHP实现一个ip(如:127.0.0.1)和多个域名(虚拟主机)的绑定
  8. 清华大学人工智能研究院成立基础理论研究中心
  9. java小编程----三数之和
  10. Windows消息机制详解-5
  11. 搭建接口自动化测试框架详细过程
  12. LM2596、LM2576
  13. matlab:圆形的图像识别(二)
  14. 软件工程-软件结构图、层次图、层次方框图的关系
  15. 关于c++产生string subscript out of range问题的自己的经历与解决方案
  16. 三国志2017服务器维护时间,《三国志2017》版本更新公告
  17. HRBUST1313 火影忍者之~静音
  18. 微信客户管理方式及如何微信客户管理
  19. 接口加密(TokenSpringCloud项目中进行token认证)
  20. 管理的本质是协调还是决策?看看孙权是怎么做到的。

热门文章

  1. php和python哪个好-PHP和Python语言选择哪个好
  2. python画饼图-python matplotlib画饼图
  3. python装饰器-如何理解Python装饰器?
  4. python写入文件-Python写入文件(write和writelines)详解
  5. python自动化办公都能做什么菜-python接口自动化
  6. python开源代码-这7个开源的Python库,让你轻松代码分析
  7. python100个必背知识-python学习必备知识汇总
  8. python基础语法第10关作业-Python基础作业一
  9. python条件语句-Python中条件判断语句的简单使用方法
  10. python对文件的读操作有哪些方法-Python之文件操作:文件的读写