




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
翻牌记忆游戏设计和算法说明1 功能概述显示12张扑克牌,其中两两成对,共6种花色,游戏者需要在5秒之内记住每一对的位置。5秒之后,扑克牌翻至背面。这是游戏者凭记忆点击扑克牌,找出成对的牌。系统测量游戏者找出全部成对的牌所花费的时间,并于游戏者估计的时间相对比,按照既定的规则给出测量结果。详细功能清单如下:序号功能说明设计应对1.程序显示三行四列共12张扑克牌的背面,显示“开始”按钮和“结束”按钮。此时“结束”按钮处于“禁用”状态。2.1主窗体布局设计2.按下“开始”按钮,该按钮变成“禁止”状态,“结束”按钮处于“可用”状态。5.1主窗体“开始”按钮点击事件处理模块3.屏幕显示三行四列共12张扑克牌,其中两两相同。5.1主窗体“开始”按钮点击事件处理模块4.扑克牌的正面显示5秒钟。5.1主窗体“开始”按钮点击事件处理模块5.5秒钟后,扑克牌自动翻至背面,同时程序开始计时。5.2主窗体5秒计时定时器事件处理模块5.3主窗体游戏计时定时器事件处理模块6.游戏者连续点击两张扑克牌。若两张扑克牌相同,则这两张牌始终处于正面;否则,再次翻转为背面。5.4主窗体扑克牌点击事件处理模块7.当游戏者找出全部12张牌后,程序停止计时。5.4主窗体扑克牌点击事件处理模块8.程序弹出对话框,游戏者输入自己估计的找出全部扑克牌的时间开销。5.4主窗体扑克牌点击事件处理模块5.6时间输入对话框“确定”按钮事件处理模块9.程序将游戏者输入的时间与程序自身的计时相对比,按照既定规则(时间评价规则1)给出相应的时间观念评价信息。5.4主窗体扑克牌点击事件处理模块10.程序按照既定的规则(时间评价规则2),对游戏者的时间开销进行评价,并给出评价信息。5.4主窗体扑克牌点击事件处理模块5.7时间评价对话框“确定”按钮点击事件处理模块11.游戏过程中,游戏者可以随时按下“结束”按钮停止游戏。5.5主窗体“结束”按钮点击事件处理模块时间评价规则1:设游戏者估计时间与计时器误差为DT1,则:l 若DT1 2s,提示信息为“时间观念强”;l 否则,若DT1 5s,提示信息为“时间观念尚可”;l 否则,提示信息为“时间观念差”。时间评价规则2:设游戏者所画时间开销为DT2,则:l 若DT2 10s,提示信息为“你的记忆力很好”;l 否则,若DT2 15,提示信息为“你的记忆力尚可”;l 否则,提示信息为“你的记忆力较差”。2 窗体布局设计2.1 主窗体布局设计创建VisualBasic的project时,VisualStudio会自动创建主窗体,将其改名为mainForm。主窗体内分为两个区域:按钮区和扑克牌区。右边是扑克牌区,以三行四列的方式摆放12张扑克牌(矩形方块,可以使用PictureBox控件,分别命名为pictureBox112,其Tag属性分别设置为112.程序刚启动时用指定的图片填充为背景)。左边为按钮区,摆放“开始”和“结束”两个按钮(使用Button控件,分别起名为btnStart和btnStop)。其中,“结束”按钮在程序初次启动时为“禁用”状态(按钮文字为灰色,使btnStop按钮的Enable属性设置为”false”)。主窗体布局如下图所示:图1 主窗体布局2.2 时间输入对话框布局设计时间输入对话框用于游戏者输入估计的时间开销。创建一个新的窗体,命名为inputTimeCostDialog,在左上方放置一个Label控件,将其Text属性改为“翻出全部牌面估计共耗时(秒):”。在Label控件的右边并排摆放一个TextBox控件,命名为tbTimeCost。在窗体的下方摆放一个按钮,命名为btnOK,并将其Text属性设置为“确定&O”。时间输入对话框布局如下图所示:图2 时间输入对话框布局2.3 时间评价对话框布局设计时间评价对话框用于向游戏者显示对于游戏者的时间观念和游戏能力的评价信息。创建一个新的窗体,命名为timeEvalDialog,在上方放置一个Label控件,命名为lbTimeFeeling,并将其Text属性设置为“你的时间观念:”;在其下方放置一个Label控件,命名为lbAbility,并将其Text属性设置为“您的记忆力:”。在窗体的下方放置一个Button控件,命名为btnOK,并将其Text属性设置为“确定(&O)”。时间评价对话框的布局如下图所示:图3 时间评价对话框布局3 隐含控件设计3.1 5s计时器在窗体的任意处摆放一个Timer控件,命名为timer5s。这个定时器控件用于进行5秒计时。3.2 游戏计时器在窗体的任意处摆放一个Timer控件,命名为costTimer。这个定时器控件用于对游戏者的操作进行计时。3.3 图片清单在窗体的任意处摆放一个图片清单控件(ImageList控件),命名为imageList。为imageList的Images属性添加55张图片,其中第1张为背景图片,为12个pictureBox控件共用;另外54张分别为红桃/黑桃/方片/草花A、1、2J、Q、K和大/小王等牌面的正面。4 数据结构设计4.1 结构化数据类型设计4.1.1 MainForm.PokerInfo结构定义一个结构体PokerInfo,用于存放扑克牌的信息,成员如下:l Value:存放扑克牌的面值,取值为0、1、2、354。当取值为0时,说明该扑克牌尚未指定面值;113代表红桃AK,1426代表黑桃AK,2739代表方片AK,4052代表草花AK,53为大王,54为小王。Value成员的初始化值为0。l isHide:存放扑克牌的摆放方式,True代表反面,False代表正面。isHide成员的初始化值为True。4.2 全局数据设计4.2.1 MainForm.pokersInfo数组位于MainForm中。定义一个包含12个PokerInfo元素的数组pokersInfo(12),用于存放12张扑克牌的信息。4.2.2 MainForm.pokers数组位于MainForm中。定义一个包含12个PictureBox类型元素的扑克牌控件全局数组pokers(12),分别保存pictureBox1pictureBox12。4.2.3 MainForm.timeCost变量位于MainForm中。全局变量timeCost用于存放游戏者翻开所有扑克牌的时间开销,单位为“秒”。4.2.4 MainForm.lastPokerIndex变量全局变量lastPokerIndex位于MainForm中,用于存放上一次点击的扑克牌的下标。用于判断两次点击的扑克牌的牌面是否相同。取值为0时表示尚未有奇数个被翻开的扑克。初始值为0.4.2.5 MainForm.finishedCount变量全局变量finishedCount位于MainForm中,用于存放当前已找到多少对扑克,初始值为0。4.2.6 InputTimeCostDialog.evalTime变量全局变量evalTime位于inputTimeCostDialog中,用于存放用户输入的估计时间。访问类型为公有(Public)。5 模块设计5.1 主窗体“开始”按钮点击事件处理模块5.1.1 创建处理子程序双击窗体设计器中主窗体的“开始”按钮(btnStart控件),在代码编辑框中会生成btnStart_Click子程序。5.1.2 模块任务和处理方法该模块实现的任务和处理方法如下:l 将“开始”按钮变成“禁止”状态,“结束”按钮处于“可用”状态:a) 用代码将btnStart的Enabled属性设置为False;b) 用代码将btnStop的Enabled属性设置为True。l 屏幕显示三行四列共12张扑克牌,其中两两相同:a) 调用随机数生成子程序生成6个154的随机数保存到数组pokerValues(6)中。令valueIndex从1变到6,对于每一个pokerValues(valueIndex),将其复制给pokersInfo数组中任选的两个尚未设置面值的元素的Value成员。b) 令pokerIndex从1变到12,对于每一个pokerIndex,根据pokersInfo(pokerIndex)元素的Value属性,从imageList的Images属性中找到Value对应的图片,赋值给pokerIndex对应的pokers(pokerIndex)元素的Image属性(VB的语法大概是“pokers(pokerIndex).Image = imageList.Images(pokersInfo(pokerIndex).Value)”?),并设置pokersInfo(pokerIndex)的isHide成员为False。c) 此时屏幕上应该显示出12张两两相同的扑克牌。l 启动定时器控件timer5s,开始5秒计时:a) 将timer5s控件的Interval属性设置为5000ms;b) 将timer5s控件的Tick事件处理程序挂接到timer5s_Tick子程序(后面会讲到这个子程序的创建方法)上;c) 调用timer5s控件的Start()子程序以启动定时器。5.2 主窗体5秒计时定时器事件处理模块5.2.1 创建处理子程序双击主窗体编辑器的timer5s控件,系统会自动创建timer5s的点击事件处理子程序timer5s_Tick。5.2.2 模块任务和处理方法l 将所有扑克牌翻到背面:a) 令pokerIndex从1变到12,对于每一个pokerIndex,另pokers(pokerIndex)元素的Image属性设置为imageList控件的Images(1)属性。l 启动游戏者能力评估定时器:a) 调用timer5s控件的Stop()子程序以停止定时器;b) 将timeCost变量初始化为0;c) 将costTimer控件的Interval属性设置为1000ms;d) 将costTimer控件的Tick事件处理程序挂接到costTimer_Tick子程序(后面会讲到这个子程序的创建方法)上;e) 调用costTimer控件的Start()子程序以启动定时器。5.3 主窗体游戏计时定时器事件处理模块5.3.1 创建事件处理子程序双击主窗体编辑器的constTimer控件,系统会自动创建constTimer的点击事件处理子程序costTimer_Tick。5.3.2 模块任务和处理方法l 读秒计时累加:n 将timeCost加15.4 主窗体扑克牌点击事件处理模块5.4.1 创建事件处理子程序在主窗体上任选一个pictureBox控件,双击后产生pictureBox_Click事件处理子程序;然后在主窗体上选中所有的pictureBox控件,并在控件属性页的Click事件属性处设置为pictureBox_Click。5.4.2 模块任务和处理方法l 翻开被点中的扑克牌:a) 被点中的扑克牌对应的pictureBox控件(该模块的sender形参指示了被点中的pictureBox控件对象)的Tag属性里记录了其对应的pokersInfo元素,以该元素的Value属性作为下标,从imageList.Images属性中找到对应的扑克牌正面图像,赋值给该牌的Image属性。VB的代码大概应该是:sender.Image = imageList.Image(pokersInfo(sender.Tag).Value)b) 将该扑克牌对应的pokersInfo数组元素的isHide设置为False。l 判断当前的扑克牌与上一个被翻开的扑克牌是否相同:a) 若lastPoker为0,则将lastPoker设置为当前扑克牌控件的Tag属性值;b) 否则,比较pokersInfo中下标为lastPoker和当前扑克牌控件Tag属性的两个元素的Value值;i. 若二者Value值相同,则说明这时找到了一对面值相同的扑克,将finishedCount变量加1;ii. 否则,将lastPoker对应的扑克牌和当前被点中的扑克牌均设置为背面;iii. 将lastPoker清0。l 若所有扑克牌均已翻开,则结束:a) 若finishedCount为6,则:i. 调用constTimer的Stop函数停止计时;ii. 弹出“输入游戏计时对话框”,游戏者输入估计的时间,点击“确定”按钮;iii. 从inputTimeCostDialog对象中的evalTime变量获取游戏者输入的时间值,并与timeCost相减得到deltaTime;iv. 若deltaTime 2,则设置“时间评价对话框(timeEvalDialog对象)”的lbTimeFeeling控件的Text属性为“您的时间观念:很好!”;v. 否则,若deltaTime 5,则设置“时间评价对话框”的lbTimeFeeling控件的Text属性为“您的时间观念:尚可。”;vi. 否则,设置“时间评价对话框”的lbTimeFeeling控件的Text属性为“您的时间观念:较差。”;vii. 若timeCost 10,则设置“时间评价对话框”的lbAbility控件的Text属性为“您的记忆力:很好!”;viii. 否则,若timeCost 15,则设置“时间评价对话框”的lbAbility控件的Text属性为“您的记忆力:尚可!”;ix. 否则,设置“时间评价对话框”的lbAbility控件的Text属性为“您的记忆力:较差!”;x. 弹出时间评价对话框;xi. 用户点击“时间评价对话框”的“确定”按钮;xii. 将所有扑克牌设置为背面;xiii. 将“开始”按钮控件的Enabled属性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025云南玉溪市儿童医院招聘博士研究生2人笔试备考题库及答案解析
- 2025福建漳州市常山中学编外教师招聘3人笔试参考题库附答案解析
- 2025西安太白学校招聘考试模拟试题及答案解析
- 2025年湖北体育职业学院面向社会公开招聘26名工作人员考试参考题库附答案解析
- 2025甘肃平凉静宁县城区医疗卫生机构选调工作人员20人笔试参考题库附答案解析
- 2025年通榆县事业单位面向社会公开招聘工作人员(2)号(5人)考试模拟试题及答案解析
- 2025四川绵阳市梓潼县财政投资评审中心招聘一级造价工程师1人考试参考题库附答案解析
- 2025中国建筑一局(集团)有限公司基础设施事业部商务管理岗招聘2人笔试模拟试题及答案解析
- 2025下半年陕西咸阳市事业单位招聘209人笔试备考试题及答案解析
- 2025年宣城广德市大学生乡村医生专项计划招聘3名笔试参考题库附答案解析
- 订单评审培训
- 健康体检服务投标方案投标文件(技术方案)
- 某市公交线路特许经营权协议
- 汽车涂装培训课件
- 2025至2030中国路亚用品市场销售模式与竞争前景分析报告
- 医疗应急演练培训课件
- 2025至2030SMA树脂行业深度研究及发展前景投资评估分析
- 信贷业务操作风险防控手册
- JG/T 317-2011混凝土用粒化电炉磷渣粉
- 中学生自残课件
- 缺血性脑血管病护理
评论
0/150
提交评论