打字游戏的设计报告
姓名:赵香俊
班级:中北11级.net
专业:软件设计
日期:20##-10-25
目录
简介 2
目的 2
范围 2
参考资料 2
概述 3
定义1 3
2.1排行版: 3
2.2自由模式: 3
2.3 计时赛: 4
2.4 生存模式: 4
2.5难度选择: 5
2.6 游戏帮助: 5
定义2: 6
简介
将本系统中所涉及的词汇(术语)进行详细、准确的描述。
目的
1.1.1在描述的过程中让开发人员了解、熟悉业务过程。
1.1.2 为用例描述、用例建模、架构设计提供术语解释。
1.1.3 为实体建模、数据库设计提供术语解释。
范围
主界面模块,自由游戏模块,生存模式模块,计时赛模块,排行版模块
参考资料
概述
定义1
2.1主页面
在主页面上有排行版,自由练习,计时赛,生存模式以及难度的选择。
Label1 Label2 Label3 Label4 Label5 Label6,上字体的颜色可以不断地变化。
在难度中可以让用户选择,可以把选项放在一个panel中,让他隐藏来,当用户点难度的时候可以选择难易程度。
在接下来介绍的三种模式当中都可以把他们放在同一个界面上
2.2自由模式:
你点击开始-游戏开始 游戏开始后会从屏幕的上方掉下字,每次落下 来的字的颜色都不同,速度也不同,并且不可以让字飘到屏幕以外的地方。如果你在没有落到屏幕的底方的时候把字给消除了,加10分,否则就扣10分。同时成绩也会记录到数据库中,在排行版中可以查询。
2.3计时赛:
1. 用户点击开始,开始的按钮上会显示出暂停,这两个功能可以在同一个按钮上切换,点击开始,音乐响起,随之字母会从屏幕的最上方落下来,每次的颜色不同,速度不同,字母也不同,当你在字母没有落到屏幕的最低端的时候你把字母给消除了你就可以加10分,否则减10分。在计时赛这个模块中有时间限制,如果到了规定的时间内,系统就会停止工作。
2.
2.4 生存模式
1. 用户点击开始,开始的按钮上会显示出暂停,这两个功能可以在同一个按钮上切换,点击开始,音乐响起,随之字母会从屏幕的最上方落下来,每次的颜色不同,速度不同,字母也不同,当你在字母没有落到屏幕的最低端的时候你把字母给消除了你就可以加10分,否则减10分。在生存模式这个模块中有分数限制,如果到了规定的分数内,系统就会停止工作。
2.5排行版
排行版就需要和数据库连接起来了,你每一次的成绩都会记录在数据库中,当你打开查询你的成绩的时候,就会体现在排行版中
定义2:
3.1 SRS:
软件需求规格说明书SoftWare Requirement Specification
3.2项目概述:
本游戏适合初学电脑者,可以锻炼你的打字速度
3.3系统流程图(System Flowchart):
用图形各符号等简单直观的形式描绘软件系统中每个部件之间(程序,文件,数据库,表格,人工过程等),表达功能流程信息在各个部件之间流动情况。
3.4用例图:
由用户,用例已经他们之间的关系构成的软件模型的动态架构图。
3.5业务流程图:
描述系统内各单位,人员之间的业务关系,作业顺序和管理信息的流向的图标。是一种全面描述信息系统逻辑模型的主要工具,手机有关资料,用计算机紧系信息管理,为下一步分析做好准备。
3.6数据流程图:
表示求解某一问题的数据通路,同时规定了处理主要阶段和所用的各种数据媒体。
3.7客户端(Client):
为客户提供本地服务的程序,即手机端应用软件。
3.8服务器端:
为android客户端提供服务响应。
3.9硬件接口:
装机时可以接入设备的接口。
3.10软件接口:
描述该软件产品与其有关软件的接口关系,并指出这些外部软件或组件的名字和版本号。比如运行在什么操作系统上,访问何种类型的数据库,使用什么数据库连接组件,和什么商业软件共享数据等。
3.11通信接口:
遵循http的数据传输协议。
3.12功能图:
全面描述信息系统逻辑模型的主要工具,它可以用少数几种符号综合的反映出信息在系统中的流动,处理和存储情况。
3.13数据字典:
定义和管理数据库文件(库表)的有组织的的系统,提目的是方便数据库的存取和控制,加强系统的数据管理。
3.14需求提供者:
对项目提出需求的用户。
3.15图例说明:
描述系统内各单位,人员之间的业务关系,作业顺续,和管理信息流向的图表,利用它可以帮助人员找出业务流程中的不合理流向。
3.16数据存储:
深入挖掘用户需求,得出数据分析的存储工程,是对整个中间结果以及最终结果的存储。
3.17数据传递:
数处于整个规定了的所有数据媒体的中间产物的传递。
3.18运行环境:
描述软件的运行环境,包括硬件平台、硬件要求、操作系统和版本,以及其他的软件或与其他共存的应用程序。
3.19故障处理:
对可能的软件、硬件故障以及对各项性能而言所产生的后果进行处理。
3.20数据精确度:
软件系统中输出结果的精度。
3.21时间特性:
指的是系统运行相关的时间描述,包括响应时间,更新处理时 间,数据转换与传输时间,运行时间等。
3.22 静态数据:
意味着它为该类的所有实例所共享,由系统自动分配内存或由程序员自主分配的数据资源的信息情况。
3.23 动态数据:
整个过程中动态流动的数据,包括用户端要获取的数据,输入数据和输出数据。
3.24 数据库描述:
对数据库的名称,类型的描述。
3.25数据采集(DAQ):
是指从传感器和其它待测设备等模拟和数字被测单元中自动采集信息的过程。包括数据有关的机构,设备,人员,以及数据输入输出的手段,介质和设备。
第二篇:912101500310 打字游戏 课程设计报告
Visual Basic
课 程 设 计 报 告
所属课程名称:Visual Basic程序设计 课程设计题号:29
课程设计题目:打字游戏
课程设计难度:3星
课程设计时间:2013.3.1 ~ 4.17
学 号:912101500310
姓 名: 石博博
自评成绩:90分
南京理工大学机械工程学院
二〇一三年三月
一、 程序功能
功能要求:
(1)程序开始时是输入姓名,选择难度和速度以及进入游戏的界面.
(2)进入游戏界面后,字母从屏幕上方下落,打中一个字母加一分,打错一个减一分,若字母落到底部都一直未击中,则减十分.
(3)打字过程中,若想停止游戏,按ESC键,出现返回打字设置窗口的提示信息.;按F1键,出现键盘
(4)打字过程中,分数和时间显示在屏幕顶部,有音乐为伴,音乐停止,游戏结束;每打中一次就产生一次爆炸声及爆炸效果
(5)单击查看成绩按钮可以查询到历史记录。. 知识点:
1.控件数组;
2.声音的播放;
3.键盘事件的处理;
4.文本文件的读写;
5.多模块程序设计;
6.随机值得产生。
二、 课程设计的详细设计
1、总体设计思路
设计思路:在Frmmain中设置相关的属性后按下“开始练习”按钮,程序跳出Frmzjm(主界面),打字游戏就此开始,游戏结果会进行记录,单击“查看结果”按钮就能查看游戏结果。过程中按下F1弹出键盘布局窗口,按下Esc按钮就会提示是否退出游戏,选择“是”就会退出并保存。
结构框图:
2、界面设计
窗体界面截图:
Frmjp:包含的控件有:图片框。主要用于显示键盘布局,按下F1时出现此界面。
Frmmain:包含的控件有:按钮,文本框,标签,框架。外观通过设置各个控件的相关属性得到。用于对游戏相关参数的设置,如输入游戏者姓名、选择游戏难度、速度、开始和结束游戏,以及对结果的查看。
Frmscore:包含的控件有:按钮,列表框。外观通过
设置各个控件的相关属性得到。用于显示结果,包括游戏者姓名、得分、事件。按下“查看成绩”按钮时出现
Frmzjm:包含的控件有:标签,图片框,计时器和
MMControl控件。外观通过设置各个控件的相关属性得到。
程序运行时的效果图:
3、功能模块设计
主要功能及实现算法:
1. Frmmain:包含姓名输入框、难度和速度选择按钮,单
击开始按钮就可以进行游戏了。若未输入姓名就单击“开始练习”按钮或“查看成绩”按钮,则提示用户输入姓名
2. Frmzjm:进入游戏后,根据难度和速度的选择,屏幕上随机产生并落下各种字符,根据用户对键盘的敲击而进行判断并进行计分。该过程的时间长度有背景音乐控制,“BackMusic.mid”文件长约70秒,音乐停止,游戏结束,保存结果。过程中按下F1弹出键盘布局窗口,按下Esc按钮就会提示是否退出游戏,选择“是”就会退出并保存。
3.Frmscore:分数查询窗口,单击“返回”退出Frmscore,弹出Frmmain.
4.Frmjp:键盘布局窗口
三、 设计中遇到的问题与解决办法
【问题1】:速度和难度的选择
【解决办法】:通过将速度选择的三个按钮和难度选择的三个按钮设置为控件数组而实现这个功能
【问题2】:游戏时间的设置,即Lbltime的计时事件
【解决办法】:通过代码实现:
Private Sub Timer2_Timer() '用于控制打字时间 Static m As Integer, s As Integer
s = s + 1
If s >= 60 Then
m = s \ 60
s = 0
End If
Lbltime.Caption = m & ":" & s
End Sub
【问题3】:背景音乐的播放
【解决办法】:通过掌握对MMControl控件的使用方法,实现了游戏一开始就会播放背景音乐的效果。代码如下:
MMControl1.FileName = App.Path & "\BackMusic.mid" MMControl1.Command = "open"
MMControl1.Command = "play"
当背景音乐停止时,游戏结束,弹出提示框。代码如下: Private Sub MMControl1_Done(NotifyCode As Integer) '控制音乐
MMControl1.Command = "close"
If MsgBox(Frmmain.Textname.Text & ",本次练习您的成绩是" & score & "分。游戏结束,继续吗?", vbYesNo, "打字练习") = vbNo Then
Unload Frmzjm
Frmmain.Show
Open App.Path & "\Score.txt" For Append As #1
Print #1, "您的姓名是:" & Frmmain.Textname.Text
& " 得分是:" & score & "分 时间是:" & Now()
Close 1
End If
End Sub
【问题4】:字符的产生、运动及重新产生。
【解决办法】:定义两个函数sc和csc ,分别用于生成和重新生成各种字符,在适当的时候调用函数,达到预计的效果。
【问题5】:分数统计方法
【解决办法】:在字符的生成函数中加入计分的方法,例如score = score + 1。这样就可以实现这个功能。
【问题6】:文件的读入与读出
【解决办法】:通过下面的代码将游戏结果写入到Score.txt中
Open App.Path & "\Score.txt" For Append As #1
Print #1, "您的姓名是:" & Frmmain.Textname.Text & " 得分是:" & score & "分 时间是:" & Now()
Close 1
通过下面的代码将Score.txt中的条目添加到列表框(先进行适当的判断)
If Dir(App.Path & "\Score.txt") = "" Then
MsgBox "你找的文件不存在!", 48, "成绩" Exit Sub
Else
Open App.Path & "\Score.txt" For Input As #1 Do While Not EOF(1)
Line Input #1, tm
Frmscore.List1.AddItem tm
Loop
Close #1
End If
四、 更上一层楼
改进之处:
样例程序中的打字窗口背景很单调,我为他挑选了一张精美的图片
五、 课程设计总结
程序不足之处:
未实现爆炸效果,打击声音和扣分的相关效果 心得体会:
打字游戏虽然设计的时候很难,但是看书查资料,自己动手编写程序的乐趣是非常宝贵的。VB的程序设计不仅锻炼了我的VB语言的运用能力也培养了我思维上的严谨性,周密性,以及多方面考虑问题的本领。我学到了很多,但是我知道我还有很多地方都是需要继续学习的。完成这次作业之后,我会保持着学习的态度继续了解VB方面的内容,并且把这次做作业时养成的严谨的态度运用到其他方面。
六、 源程序代码
Frmscore源代码:
Private Sub Cmdreturn_Click()
Frmmain.Show
Frmscore.Hide
End Sub
Frmmain源代码:
Option Explicit '强制变量声明
Private Sub Cmdstart_Click() '开始游戏 If Textname.Text = "" Then
MsgBox "您还没有输入姓名.", 32, "打字设置" Else
Frmzjm.Show
Frmmain.Hide
End If
End Sub
Private Sub Cmdsee_Click()
Dim tm As String '查看成绩
If Textname.Text = "" Then
MsgBox "您还没有输入姓名.", 32, "打字设置" Else
Frmscore.Show
Frmmain.Hide
If Dir(App.Path & "\Score.txt") = "" Then '判断文件是否存在
MsgBox "你找的文件不存在!", 48, "成绩"
Exit Sub
Else
Open App.Path & "\Score.txt" For Input As #1 '将文件读入到列表框中
Do While Not EOF(1)
Line Input #1, tm
Frmscore.List1.AddItem tm
Loop
Close #1
End If
End If
End Sub
Private Sub Cmdexit_Click() '退出 End
End Sub
Frmzjm源代码:
Dim i, speed, score As Integer
Private Sub Form_Load() '窗体加载事件 MMControl1.FileName
"\BackMusic.mid" = App.Path &
MMControl1.Command = "open"
MMControl1.Command = "play"
Lblname.Caption = Frmmain.Textname.Text & "," Lblscore.Caption = "你现在的得分是:分" Call sc '函数的调用
End Sub
Private Sub MMControl1_Done(NotifyCode As Integer) '控
制音乐
MMControl1.Command = "close"
If MsgBox(Frmmain.Textname.Text & ",本次练习您的成绩是" & score & "分。游戏结束,继续吗?", vbYesNo, "打字练习") = vbNo Then Unload Frmzjm
Frmmain.Show
Open App.Path & "\Score.txt" For Append As #1 '文件的写入
Print #1, "您的姓名是:" & Frmmain.Textname.Text & " 得分是:" & score & "分 时间是:" & Now() Close 1
End If
End Sub
Private Sub Timer2_Timer() '用于控制打字时间
Static m As Integer, s As Integer
s = s + 1
If s >= 60 Then
m = s \ 60
s = 0
End If
Lbltime.Caption = m & ":" & s
End Sub
Private Sub Timer1_Timer() '用于控制字符的下落
For i = 1 To 10
Lblzm(i).Top = Lblzm(i).Top + speed
If Lblzm(i).Top > Frmzjm.Height - Picture1.Height Then
Call csc
End If
Next
End Sub
Private Sub Form_keydown(keycode As Integer, shift As Integer) '键盘事件
If keycode = 27 Then
If MsgBox("真的要退出吗?", vbYesNo, "打字练习") = vbYes Then
Unload Frmzjm
Frmmain.Show
Open App.Path & "\Score.txt" For Append As #1
Print #1, "您的姓名是:" & Frmmain.Textname.Text & " 得分是:" & score & "分 时间是:" & Now() Close 1
End If
ElseIf keycode = 112 Then
Frmjp.Show
End If
End Sub
Private Sub Form_keypress(keyascii As Integer) '敲击键盘
For i = 1 To 10
If keyascii = Asc(Lblzm(i).Caption) Then
Call csc
Lblscore.Caption = "你现在的得分是:" & score & "分"
End If
Next
End Sub
Public Function sc() '函数过程,生成各种字符
Dim sj As Integer
sj = Rnd * 10 '利用这个方法使得产生混合字母
For i = 1 To 10
Lblzm(i).Top = 0
If Frmmain.Option1(0) Then
If Frmmain.Option2(0) Then
Lblzm(i).Caption = Chr(Int(Rnd * 26 +
97))
Lblzm(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 100
ElseIf Frmmain.Option2(1) Then
If sj Mod 2 <> 0 Then
Lblzm(i).Caption = Chr(Int(Rnd * 26 + 65)) '大写字母
Else
Lblzm(i).Caption = Chr(Int(Rnd * 26 + 97)) '小写字母
End If
Lblzm(i).ForeColor RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 100
Else
Lblzm(i).Caption = Chr(Rnd * 79 + 48) = Lblzm(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 100
End If
ElseIf Frmmain.Option1(1) Then
If Frmmain.Option2(0) Then
Lblzm(i).Caption = Chr(Int(Rnd * 26 +
97))
Lblzm(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 200
ElseIf Frmmain.Option2(1) Then
If sj Mod 2 <> 0 Then
Lblzm(i).Caption = Chr(Int(Rnd * 26 + 65)) '大写字母
Else
Lblzm(i).Caption = Chr(Int(Rnd * 26 + 97)) '小写字母
End If
Lblzm(i).ForeColor RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 200
Else
Lblzm(i).Caption = Chr(Rnd * 79 + 48) = Lblzm(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 200
End If
Else
If Frmmain.Option2(0) Then
Lblzm(i).Caption = Chr(Int(Rnd * 26 +
97))
Lblzm(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 400
ElseIf Frmmain.Option2(1) Then
If sj Mod 2 <> 0 Then
Lblzm(i).Caption = Chr(Int(Rnd * 26 + 65)) '大写字母
Else
Lblzm(i).Caption Chr(Int(Rnd * 26 + 97)) '小写字母 =
End If
Lblzm(i).ForeColor RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 400
Else
Lblzm(i).Caption = Chr(Rnd * 79 + 48) = Lblzm(i).ForeColor = RGB(Rnd * 255,
Rnd * 255, Rnd * 255)
speed = 400
End If
End If
Next
End Function
Public Function csc() '函数过程,重新生成各种字符
Lblzm(i).Top = 0
If Frmmain.Option1(0) Then
If Frmmain.Option2(0) Then
Lblzm(i).Caption = Chr(Int(Rnd * 26 +
97))
Lblzm(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 100
score = score + 1
ElseIf Frmmain.Option2(1) Then
If sj Mod 2 <> 0 Then
Lblzm(i).Caption = Chr(Int(Rnd * 26 + 65)) '大写字母
Else
Lblzm(i).Caption Chr(Int(Rnd * 26 + 97)) '小写字母 =
End If
Lblzm(i).ForeColor RGB(Rnd * 255, Rnd * 255, Rnd * 255) =
speed = 100 score = score + 2
Else
Lblzm(i).Caption = Chr(Rnd * 79 + 48) Lblzm(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 100
score = score + 3
End If
ElseIf Frmmain.Option1(1) Then
If Frmmain.Option2(0) Then
Lblzm(i).Caption = Chr(Int(Rnd * 26 +
97))
Lblzm(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 200
score = score + 4
ElseIf Frmmain.Option2(1) Then
If sj Mod 2 <> 0 Then
Lblzm(i).Caption = Chr(Int(Rnd * 26 + 65)) '大写字母
Else
Lblzm(i).Caption Chr(Int(Rnd * 26 + 97)) '小写字母 =
End If
Lblzm(i).ForeColor RGB(Rnd * 255, Rnd * 255, Rnd * 255) =
speed = 200
score = score + 5
Else
Lblzm(i).Caption = Chr(Rnd * 79 + 48) Lblzm(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 200
score = score + 6
End If
Else
If Frmmain.Option2(0) Then
Lblzm(i).Caption = Chr(Int(Rnd * 26 +
97))
Lblzm(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 400
score = score + 7
ElseIf Frmmain.Option2(1) Then
If sj Mod 2 <> 0 Then
Lblzm(i).Caption = Chr(Int(Rnd * 26 + 65)) '大写字母
Else
Lblzm(i).Caption Chr(Int(Rnd * 26 + 97)) '小写字母 =
End If
Lblzm(i).ForeColor RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 400
score = score + 8
Else
Lblzm(i).Caption = Chr(Rnd * 79 + 48) =
Lblzm(i).ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
speed = 400
score = score + 9
End If
End If
End Function