@Dmaxiya
2020-12-15T23:21:02.000000Z
字数 4408
阅读 2812
作品
| CSDN 博客 | W3Cschool | 包图网 | 在线流程图 | 软件设计文档 |
本网页主要内容为扫雷小游戏,游戏开始界面主要采用来自 “包图网”的素材:
游戏界面主要采用 Win 7 版扫雷游戏界面:
网页包含排行榜、难度选择、游戏帮助、主游戏这四项功能。
主游戏部分,除 win 7 扫雷上的基本功能,考虑到只有触板(没有鼠标)的笔记本玩家,另增加了 Ctrl + 鼠标左击功能,在不同情况下,可以代替右击、双击提示功能,使游戏更加流畅。
1) 作为打开网页的初始界面,显示“统计”、“选项”以及“帮助”三个主要功能菜单。
2) 中心区域用于显示“新游戏”、排行榜、难度选择、游戏结束提示等内容。
3) 中心区域在显示排行榜、难度选择情况下,再点击一次,即可返回开始界面。
类型 | id | class | alt/type |
---|---|---|---|
img | start_background | absolute | start_background |
img | statistics | menu absolute | statistics |
img | option | menu absolute | option |
img | help | menu absolute | help |
img | new_game | menu absolute | new game |
id | 事件 | 功能 |
---|---|---|
statistics | click | 隐藏其他label,显示排行榜 |
option | click | 隐藏其他label,显示难度等级选择 |
new_game | click | 主菜单界面上滑,显示主游戏界面 |
1) 点击“统计”菜单时,显示三个难度等级的最高分。
2) 三个等级的最高分都初始化为:“999 秒 匿名”。
3) 当玩家成功完成某一难度等级游戏时,若所消耗时间小于排行榜上对应等级的时间,则出现输入玩家姓名界面,待玩家输入姓名,点击“确认”或“回车”,更新排行榜。
4) 姓名栏为空时,输入框背景显示“英雄留名”。
5) 为保证排行榜美观,姓名栏最多允许输入 3 个字符。
6) 若玩家破纪录但输入姓名栏为空,则默认为“匿名”玩家,若之前已经输入过一次姓名,则默认填入上一次输入的玩家姓名。
7) 在查看排行榜状态下,点击排行榜数据,则返回到“新游戏”主菜单界面。
8) 重新打开网页时,排行榜仍然保留。
数据类型 | 变量名 | 含义 | 取值范围 |
---|---|---|---|
整型 | level | 难度等级 | |
字符串数组 | board | 排行榜 | |
字符串数组 | localStorage.board | 排行榜的本地储存 |
类型 | id | class | alt/type |
---|---|---|---|
img | statistics | menu absolute | statistics |
label | statistics_data | menu absolute | |
label | hero_message | absolute | |
input | hero_name | absolute | text |
img | submit | nemu absolute | submit |
label | success_message | absolute | |
img | confirm | menu absolute | confirm |
id | 事件 | 功能 |
---|---|---|
statistics | click | 隐藏其他label,显示排行榜 |
statistics_data | click | 隐藏排行榜,显示主菜单界面 |
hero_name | keydown | 输入回车时,相当于触发 submit 的 click 事件 |
submit | click | 玩家输入名字后提交玩家纪录,若字段为空则玩家名为“匿名” |
confirm | click | 确认并退回到主菜单界面 |
1) 点击“选项”菜单时,显示“初级”、“中级”、“高级”三个难度等级的单选按钮。
2) 最初选择难度等级为“初级”,且每次重新打开页面,难度等级都被重置为“初级”。
3) 若未选择即退出,则认为按原难度等级。
4) 选择难度等级后,界面退回到主菜单界面。
5) “初级”对应“9×9 10 个雷”,“中级”对应“16×16 40 个雷”,“高级”对应“16×30 99 个雷”。
数据类型 | 变量名 | 含义 | 取值范围 |
---|---|---|---|
整型数组 | row_list | 不同难度对应的行数 | |
整型数组 | col_list | 不同难度对应的列数 | |
整型数组 | mine_cnt_list | 不同难度对应的雷数 | |
整型 | level | 不同等级 |
类型 | id | class | name | alt/type |
---|---|---|---|---|
img | option | menu absolute | option | |
input | easy | menu absolute | difficulty | radio |
input | normal | menu absolute | difficulty | radio |
input | hard | menu absolute | difficulty | radio |
id | 事件 | 功能 |
---|---|---|
option | click | 隐藏其他label,显示难度等级选择 |
easy | click | 选择“初级”难度 |
normal | click | 选择“中级”难 |
hard | click | 选择“高级”难度 |
点击“帮助”菜单时,跳转到新页面帮助。
类型 | id | class | alt/type |
---|---|---|---|
img | help | menu absolute | help |
在主游戏界面,雷区内不同的方格有不同的状态,如:翻开、插旗等,为方便后面说明,在此先对方格内所有状态进行说明,以下都采用该说明。
游戏中:
- 未翻开:
- 提示:
- 疑惑:
- 插旗:
- 空白/翻开:
- 数字 n/翻开:
游戏失败结束:
- 成功插旗:
- 未插旗:
- 爆炸:
1) 点击“新游戏”时,主菜单界面上滑,主游戏界面淡出。
2) 雷区大小以及地雷个数,由难度等级确定。
3) 刚进入游戏时,计时器显示为 0,计数器个数为地雷个数,雷区未确定,所有方格状态为未翻开。
4) 雷区中第一次左击鼠标时,开始设置雷区,设雷保证在第一次点击到的方格中没有地雷,计时器开始按秒计时,进入正常游戏流程,计时器到 999 停止。
5) 正常游戏流程:
a) 左击未翻开/疑问方格,若为雷,则游戏失败结束,停止计时,翻开当前方格为爆炸,以及其他成功插旗与未插旗方格,点击雷区退回到主菜单界面;若不为雷,则进行宽度优先搜索,停止进入宽搜队列条件为:方格状态为数字 n,判断翻开的方格数量是否等于(总方格数-总地雷数),若等于,则游戏成功结束,点击雷区后,若成绩小于对应难度等级纪录,则退回到破纪录输入玩家姓名界面,否则退回到游戏成功提示界面。
b) 右击未翻开方格:当计数器非零时,当前方格变为插旗状态,计数器减一。
c) 右击插旗方格:当前方格变为疑惑状态,计数器加一。
d) 右击疑惑方格:当前方格变为未翻开状态。
e) 双击数字 n 方格:判断周围 8 个方格插旗状态方格数量是否等于 n,若等于,则对周围 8 个方格中未翻开/疑惑方格进行宽搜点击;若不等于,则对周围 8 个方格中未翻开方格进行提示。
f) Ctrl + 左击未翻开/插旗/疑惑:等效于右击该方格。
g) Ctrl + 左击数字 n 方格:等效于双击该方格。
h) 其他情况不做响应。
6) 无论何时,点击返回按钮可以立即结束游戏以及所有结算,返回主菜单界面。
数据类型 | 变量名 | 取值范围 | 含义 |
---|---|---|---|
整型 | mine_cnt | 剩余的旗子数量 | |
整型 | row | 雷区的行数 | |
整型 | col | 雷区的列数 | |
整型 | pack_remain | 剩余非雷数量 | |
整型 | clock_time | 从第一次左击到当前游戏时间 | |
计时句柄 | time_out | 用于控制开始/结束计时器 | |
整型 | playing | 游戏未开始 | |
整型 | playing | 游戏开始 | |
整型 | playing | 成功结束 | |
整型 | playing | 失败结束 | |
整型 | click_flag | 鼠标未点击 | |
整型 | click_flag | 鼠标左击 | |
整型 | click_flag | 鼠标右击 | |
整型 | click_flag | 鼠标双击 | |
整型数组 | pack_data | 当前格为雷 | |
整型数组 | pack_data | 当前格附近8个方格中雷的数量 | |
整形数组 | pack_open | 当前格状态为未翻开 | |
整形数组 | pack_open | 当前格状态为插旗 | |
整形数组 | pack_open | 当前个状态为疑惑 | |
整形数组 | pack_open | 当前个状态为翻开 |
类型 | id | class | alt/type |
---|---|---|---|
label | pack button | ||
label | pack prompt | ||
label | pack doubt | ||
label | pack flag | ||
label | pack none | ||
label | pack [one-eight] | ||
label | pack boom | ||
label | pack failflag | ||
label | pack failed | ||
img | clock_icon | absolute | clock |
img | clock_label | absolute | label |
label | clock_num | absolute word | |
img | mine_cnt_icon | absolute | mine |
img | mine_cnt_label | absolute | label |
label | mine_cnt_num | absolute | |
img | back_label | absolute | back |
status | 事件 | 功能 |
---|---|---|
未翻开 | left_click | 若为雷,则游戏失败,否则点开宽搜 |
未翻开 | right_click | 状态变为插旗,计数器减一 |
疑惑 | left_click | 若为雷,则游戏失败,否则点开宽搜 |
疑惑 | right_click | 状态变为未翻开 |
插旗 | right_click | 状态变为疑惑,计数器加一 |
数字 n | double_click | 判断周围插旗数量是否等于 n,若等于,则 left_click 周围未翻开/疑惑,否则周围未翻开状态变为提示 |