翻牌记忆游戏设计和算法说明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.2 时间输入对话框布局设计 时间输入对话框用于游戏者输入估计的时间开销。 创建一个新的窗体,命名为 inputTimeCostDialog,在左上方放置一个
Label 控件,将其 Text 属性改为“翻出全部牌面估计共耗时(秒):”。在 Label 控件的右边并排摆放一个 TextBox 控件,命名为 tbTimeCost。在窗体的下方 摆放一个按钮,命名为 btnOK,并将其 Text 属性设置为“确定&O”。
翻牌记忆游戏设计和算法说明
1 功能概述
显示 12 张扑克牌,其中两两成对,共 6 种花色,游戏者需要在 5 秒之内 记住每一对的位置。5 秒之后,扑克牌翻至背面。这是游戏者凭记忆点击扑克 牌,找出成对的牌。系统测量游戏者找出全部成对的牌所花费的时间,并于 游戏者估计的时间相对比,按照既定的规则给出测量结果。
在主窗体上任选一个 pictureBox 控件,双击后产生 pictureBox_Click 事件处理子程序;然后在主窗体上选中所有的 pictureBox 控件,并在控件属 性页的 Click 事件属性处设置为 pictureBox_Click。 5.4.2 模块任务和处理方法
翻开被点中的扑克牌: a) 被点中的扑克牌对应的 pictureBox 控件(该模块的 sender 形参指 示了被点中的 pictureBox 控件对象)的 Tag 属性里记录了其对应 的 pokersInfo 元 素 , 以 该 元 素 的 Value 属 性 作 为 下 标 , 从 imageList.Images 属性中找到对应的扑克牌正面图像,赋值给该 牌的 Image 属性。VB 的代码大概应该是:
5.3 主窗体游戏计时定时器事件处理模块 5.3.1 创建事件处理子程序
双击主窗体编辑器的 constTimer 控件,系统会自动创建 constTimer 的
点击事件处理子程序 costTimer_Tick。 5.3.2 模块任务和处理方法
读秒计时累加: 将 timeCost 加 1
5.4 主窗体扑克牌点击事件处理模块 5.4.1 创建事件处理子程序
5.2 主窗体 5 秒计时定时器事件处理模块 5.2.1 创建处理子程序
双击主窗体编辑器的 timer5s 控件,系统会自动创建 timer5s 的点击事 件处理子程序 timer5s_Tick。 5.2.2 模块任务和处理方法
将所有扑克牌翻到背面: a) 令 pokerIndex 从 1 变 到 12 , 对 于 每 一 个 pokerIndex , 另 pokers(pokerIndex)元素的 Image 属性设置为 imageList 控件的 Images(1)属性。
b) 用代码将 btnStop 的 Enabled 属性设置为 True。 屏幕显示三行四列共 12 张扑克牌,其中两两相同:
a) 调用随机数生成子程序生成 6 个 1~54 的随机数保存到数组 pokerValues(6) 中 。 令 valueIndex 从 1 变 到 6 , 对 于 每 一 个 pokerValues(valueIndex),将其复制给 pokersInfo 数组中任选的 两个尚未设置面值的元素的 Value 成员。
4.2.3 MainForm.timeCost 变量 位于 MainForm 中。全局变量 timeCost 用于存放游戏者翻开所有扑克牌
的时间开销,单位为“秒”。
4.2.4 MainForm.lastPokerIndex 变量 全局变量 lastPokerIndex 位于 MainForm 中,用于存放上一次点击的扑
定义一个结构体 PokerInfo,用于存放扑克牌的信息,成员如下: Value:存放扑克牌的面值,取值为 0、1、2、3……54。当取值为 0
时,说明该扑克牌尚未指定面值;1~13 代表红桃 A~K,14~26 代表 黑桃 A~K,27~39 代表方片 A~K,40~52 代表草花 A~K,53 为大 王,54 为小王。Value 成员的初始化值为 0。 isHide:存放扑克牌的摆放方式,True 代表反面,False 代表正面。 isHide 成员的初始化值为 True。
时间评价对话框的布局如下图所示:
图 3 时间评价对话框布局
3 隐含控件设计 3.1 5s 计时器
在窗体的任意处摆放一个 Timer 控件,命名为 timer5s。这个定时器控件 用于进行 5 秒计时。 3.2 游戏计时器
在窗体的任意处摆放一个 Timer 控件,命名为 costTimer。这个定时器控 件用于对游戏者的操作进行计时。 3.3 图片清单
b) 令 pokerIndex 从 1 变 到 12 , 对 于 每 一 个 pokerIndex , 根 据 pokersInfo(pokerIndex) 元 素 的 Value 属 性 , 从 imageList 的 Images 属性中找到 Value 对应的图片,赋值给 pokerIndex 对应的
2 窗体布局设计 2.1 主窗体布局设计
创建 VisualBasic 的 project 时,VisualStudio 会自动创建主窗体,将 其改名为 mainForm。主窗体内分为两个区域:按钮区和扑克牌区。
右边是扑克牌区,以三行四列的方式摆放 12 张扑克牌(矩形方块,可以 使用 PictureBox 控件,分别命名为 pictureBox1~12,其 Tag 属性分别设置 为 1~12.程序刚启动时用指定的图片填充为背景)。
左边为按钮区,摆放“开始”和“结束”两个按钮(使用 Button 控件, 分别起名为 btnStart 和 btnStop)。其中,“结束”按钮在程序初次启动时为“禁 用”状态(按钮文字为灰色,使 btnStop 按钮的 Enable 属性设置为”false”)。
主窗体布局如下图所示:
图 1 主窗体布局
pokers(pokerIndex) 元 素 的 Image 属 性 ( VB 的 语 法 大 概 是 “pokers(pokerIndex).Image = imageList.Images(pokersInfo(pokerIndex).Value)”?), 并设置 pokersInfo(pokerIndex)的 isHide 成员为 False。 c) 此时屏幕上应该显示出 12 张两两相同的扑克牌。 启动定时器控件 timer5s,开始 5 秒计时: a) 将 timer5s 控件的 Interval 属性设置为 5000ms; b) 将 timer5s 控件的 Tick 事件处理程序挂接到 timer5s_Tick 子程 序(后面会讲到这个子程序的创建方法)上; c) 调用 timer5s 控件的 Start()子程序以启动定时器。
处理模块
游戏者连续点击两张扑克牌。若两张扑克牌相同, 5.4 主窗体扑克牌点击事件处理
则这两张牌始终处于正面;否则,再次翻转为背面。 模块
当游戏者找出全部 12 张牌后,程序停止计时。
5.4 主窗体扑克牌点击事件处理
模块
程序弹出对话框,游戏者输入自己估计的找出全部 5.4 主窗体扑克牌点击事件处理
扑克牌的时间开销。
详细功能清单如下:
序号 1. 2. 3. 4. 5. 6. 7. 8.
9.
10. 11.
功能说明
设计应对
程序显示三行四列共 12 张扑克牌的背面,显示“开
始”按钮和“结束”按钮。此时“结束”按钮处于 2.1 主窗体布局设计
“禁用”状态。
按下“开始”按钮,该按钮变成“禁止”状态,“结 5.1 主窗体“开始”按钮点击事件
模块
5.7 时间评价对话框“确定”按
钮点击事件处理模块
游戏过程中,游戏者可以随时按下“结束”按钮停 5.5 主窗体“结束”按钮点击事件
止游戏。
处理模块
时间评价规则 1:设游戏者估计时间与计时器误差为T1,则: 若T1 < 2s,提示信息为“时间观念强”;
否则,若T1 < 5s,提示信息为“时间观念尚可”; 否则,提示信息为“时间观念差”。 时间评价规则 2:设游戏者所画时间开销为T2,则: 若T2 < 10s,提示信息为“你的记忆力很好”; 否则,若T2 < 15,提示信息为“你的记忆力尚可”; 否则,提示信息为“你的记忆力较差”。
启动游戏者能力评估定时器: a) 调用 timer5s 控件的 Stop()子程序以停止定时器; b) 将 timeCost 变量初始化为 0; c) 将 costTimer 控件的 Interval 属性设置为 1000ms; d) 将 costTimer 控件的 Tick 事件处理程序挂接到 costTimer_Tick 子程序(后面会讲到这个子程序的创建方法)上; e) 调用 costTimer 控件的 Start()子程序以启动定时器。
束”按钮处于“可用”状态。
处理模块
屏幕显示三行四列共 12 张扑克牌,其中两两相同。 5.1 主窗体“开始”按钮点击事件
处理模块
扑克牌的正面显示 5 秒钟。
5.1 主窗体“开始”按钮点击事件
处理模块
5 秒钟后,扑克牌自动翻至背面,同时程序开始计时。 5.2 主窗体 5 秒计时定时器事件
处理模块
5.3 主窗体游戏计时定时器事件
估计时间。访问类型为公有(Public)。
5 模块设计 5.1 主窗体“开始”按钮点击事件处理模块 5.1.1 创建处理子程序
双击窗体设计器中主窗体的“开始”按钮(btnStart 控件),在代码编辑框 中会生成 btnStart_Click 子程序。
5.1.2 模块任务和处理方法 该模块实现的任务和处理方法如下: 将“开始”按钮变成“禁止”状态,“结束”按钮处于“可用”状态: a) 用代码将 btnStart 的 Enabled 属性设置为 False;
克牌的下标。用于判断两次点击的扑克牌的牌面是否相同。取值为 0 时表示 尚未有奇数个被翻开的扑克。初始值为 0.
4.2.5 MainForm.finishedCount 变量 全局变量 finishedCount 位于 MainForm 中,用于存放当前已找到多少对
扑克,初始值为 0。
4.2.6 InputTimeCostDialog.evalTime 变量 全局变量 evalTime 位于 inputTimeCostDialog 中,用于存放用户输入的
4.2 全局数据设计 4.2.1 MainForm.pokersInfo 数组
位 于 MainForm 中 。 定 义 一 个 包 含 12 个 PokerInfo 元 素 的 数 组 pokersInfo(12),用于存放 12 张扑克牌的信息。 4.2.2 MainForm.pokers 数组
位于 MainForm 中。定义一个包含 12 个 PictureBox 类型元素的扑克牌控 件全局数组 pokers(12),分别保存 pictureBox1~pictureBox12。
模块
5.6 时间输入对话框“确定”按
钮事件处理模块
程序将游戏者输入的时间与程序自身的计时相对 比,按照既定规则(时间评价规则 1)给出相应的时 5.4 主窗体扑克牌点击事件处理
模块
间观念评价信息。
程序按照既定的规则(时间评价规则 2),对游戏者 5.4 主窗体扑克牌点击事件处理
wenku.baidu.com
的时间开销进行评价,并给出评价信息。
在窗体的任意处摆放一个图片清单控件(ImageList 控件),命名为 imageList。为 imageList 的 Images 属性添加 55 张图片,其中第 1 张为背景 图片,为 12 个 pictureBox 控件共用;另外 54 张分别为红桃/黑桃/方片/草 花 A、1、2……J、Q、K 和大/小王等牌面的正面。 4 数据结构设计 4.1 结构化数据类型设计 4.1.1 MainForm.PokerInfo 结构
时间输入对话框布局如下图所示:
图 2 时间输入对话框布局
2.3 时间评价对话框布局设计 时间评价对话框用于向游戏者显示对于游戏者的时间观念和游戏能力的
评价信息。 创建一个新的窗体,命名为 timeEvalDialog,在上方放置一个 Label 控
件,命名为 lbTimeFeeling,并将其 Text 属性设置为“你的时间观念:”;在 其下方放置一个 Label 控件,命名为 lbAbility,并将其 Text 属性设置为“您 的记忆力:”。在窗体的下方放置一个 Button 控件,命名为 btnOK,并将其 Text 属性设置为“确定(&O)”。
相关文档
最新文档