用c语言写扫雷游戏倒计时代码,课内资源 - 基于VS2013实现的扫雷小游戏
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实现的扫雷小游戏相关推荐
- 基于linux下QT象棋,课内资源 - 基于QT实现的网络象棋游戏
1.功能说明 1.1 初始界面 初始界面中包含一个菜单栏,菜单栏中有一个建立连接选项,可以用来与其他程序建立连接. 1.2 建立连接 单击建立连接后,会弹出一个对话框以配置连接的相关信息,包括创建服务 ...
- c语言全民飞机游戏代码,课内资源 - 基于VC++和OpenCV实现的全民飞机大战游戏
摘要功能:利用C++语言完成了一个小游戏项目-全民飞机大战,该游戏首先能够给用户提供注册,登录功能:提供了菜单栏及两种游戏模式,一种是无尽模式,另一种是一般模式:一般模式中用户通过控制玩家飞机攻击敌方 ...
- c语言机票座位预定系统_课内资源 - 基于C语言的飞机票预订系统
1 解题思路 本题需要综合使用数据结构的知识.以此,将航班数据设计成链表形式即定义结构体,其中包含飞机序号,登机口作为数据域,next作为指针域,将此结构体称为Node.将乘客信息设计成特殊的结构体, ...
- c语言文字冒险类游戏,课内资源 - 基于C语言和easyx实现的巧虎划船大冒险游戏...
1 需求分析 1.1 功能需求 游戏性:通过键盘方向键的←.→.↑.↓来控制巧虎(船)的移动,躲避暗礁,碰撞宝物(特殊宝物),来增加积分,在倒计时结束前(到达终点前)争取得到更多分数.为提高可玩性,宝 ...
- python迷宫小游戏代码_课内资源 - 基于python实现的迷宫游戏
一.项目概述与编译环境 本次大作业选题为题目2,即小兔子找胡萝卜的迷宫问题,最终完成开发的游戏名为Caveman and Treasure(穴居人寻宝),游戏整体界面如下: 该项目在windows下编 ...
- cmd上写的java简单代码_用cmd编辑一个超级简单的小游戏,求代码
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贪吃蛇: import java.awt.*; import java.util.LinkedList; import java.util.Scanner ...
- C语言编程求解圆盘的汉诺塔,课内资源 - 基于80x86汇编的汉诺塔
一.软件背景介绍 我们今天要陈述的应用叫做汉诺塔,大家可能小时候都接触过类似于鲁班锁,九连环的益智玩具,我们要说的汉诺塔其实也可以说是益智玩具的一种. 下面我们具体介绍一下汉诺塔.汉诺塔有三根杆子A, ...
- c语言外卖程序,课内资源 - 基于C语言的外卖派单模拟系统
一.课题任务概述 你运行一家外卖快递服务店,负责一个区域内的外卖订单接收和餐食快递.你有一笔启动资金,可以招募外卖骑手帮你送餐,来赚取快递费.但你也会面临风险,本区域的订单你都有义务接收,不能拒绝,若 ...
- 餐厅管理程序c语言源代码,课内资源 - 基于C++的餐厅管理程序的设计与实现
摘 要 随着计算机应用技术的快速发展和日益普及,网络也遍及到我们生活的每个角落,为我们的学习和工作带来极大的方便.很多人都使用过传统的文字,纸张管理手段,与之不同的另外一种管理方式就是利用电脑程序管理 ...
最新文章
- 国民技术芯片相关产业研发
- 如何入门Go语言?这个开源项目赶紧收藏!
- 用了5年的Git,你竟然还不晓得它的实现原理!
- MYSQL不能从远程连接的解决方法
- C#实现水晶报表绑定数据并实现打印
- 从实例入手Shiro并实现HellloWorld
- PHP实现一个ip(如:127.0.0.1)和多个域名(虚拟主机)的绑定
- 清华大学人工智能研究院成立基础理论研究中心
- java小编程----三数之和
- Windows消息机制详解-5
- 搭建接口自动化测试框架详细过程
- LM2596、LM2576
- matlab:圆形的图像识别(二)
- 软件工程-软件结构图、层次图、层次方框图的关系
- 关于c++产生string subscript out of range问题的自己的经历与解决方案
- 三国志2017服务器维护时间,《三国志2017》版本更新公告
- HRBUST1313 火影忍者之~静音
- 微信客户管理方式及如何微信客户管理
- 接口加密(TokenSpringCloud项目中进行token认证)
- 管理的本质是协调还是决策?看看孙权是怎么做到的。
热门文章
- php和python哪个好-PHP和Python语言选择哪个好
- python画饼图-python matplotlib画饼图
- python装饰器-如何理解Python装饰器?
- python写入文件-Python写入文件(write和writelines)详解
- python自动化办公都能做什么菜-python接口自动化
- python开源代码-这7个开源的Python库,让你轻松代码分析
- python100个必背知识-python学习必备知识汇总
- python基础语法第10关作业-Python基础作业一
- python条件语句-Python中条件判断语句的简单使用方法
- python对文件的读操作有哪些方法-Python之文件操作:文件的读写