-VB课程设计报告

时间:2024.4.20

                     

                                                                                                                 

                      

   南京工程学院

课程设计报告(论文)

        目:        打字练习             

  称:   Visual Basic  课程设计    

  院(系、部、中心):能源与动力工程学院 

  专       业:      火电厂集控运行                    

  班       级        集控111                   

  学 生 姓 名:         周依琳           

  学       号:        207110408                

  设 计 地 点:       图书馆A304         

  指 导 教 师:        黄 陈 蓉          

设计起止时间: 20## 年 6月06 至 20## 年 6月 12

 

一、设计任务..................... 3

二、系统总计设计方案............. 4

三、程序整体框图................. 5

四、系统的调试................... 5

五、收获体会..................... 6

六、示例截图..................... 8

七、源代码...................... 10

八、主要参考资料................ 16

一、设计任务

    1.在计算机及其他数码产品日益普及的今天,人们使用键盘应向用笔写字一样熟练。本题目要求编制一个打字练习游戏程序,使用户在游戏过程中进行指法练习。

2.程序开始时显示“打字设置”窗口,在“您的名字”文本框输入用户名。若未输入姓名就单击“开始练习”或“查看成绩”按钮,则提示用户输入姓名。

3.然后选择速度和难度之后,单击“开始练习”按钮,以全屏方式显示。根据难度的设置,屏幕上随机产生并落下各种字符。若用户在字符落到屏幕之前敲击了相应的键盘键,则该字符被击中然后消失,击中时在字符位置上显示一个爆炸的效果。程序根据速度和难度的设置自动进行记分,分数实时地显示在窗口的顶部。计分标准如下:

① 慢速+小写字母:打中一个1分

② 慢速+大写字母:打中一个2分

③ 慢速+混合字符:打中一个3分

④ 中速+小写字母:打中一个4分

⑤ 中速+大写字母:打中一个5分

⑥ 中速+混合字符:打中一个6分

⑦ 高速+小写字母:打中一个7分

⑧ 高速+大写字母:打中一个8分

⑨ 高速+所有字符:打中一个9分      

所有字符包括大小写字母,数字和符号字符.

 

    4.为了增加游戏的趣味性,可增加背景音乐和打中时的打击声。

5.在打字过程中,可以按Esc键终止游戏,返回打字设置窗口。若按F1键,则弹出键盘布局窗口且游戏暂停,关闭窗口游戏继续。打字练习过程中,屏幕的顶部显示已用的时间和当前的分数。

6,在打字设置窗口中,单击查看成绩按钮,弹出成绩对话框,显示当前用户每次练习的时间与成绩。

7,要求程序在不同分辨率的计算机上都能正确地显示。应在程序运行时检测屏幕的高和宽,将各个字符均匀地分布占满屏幕宽度。

二、系统总计设计方案

 1、整个打字练习分为4个窗体1个模块。窗体1为打字设置,窗体2为游戏主界面,窗体3为成绩显示,窗体4为键盘布局。模块用于存放窗体间共用的全局变量声明。

  2、游戏背景音乐和打击声用多媒体MMControl控件实现。

  3、用Keypress事件检测键入的字符,用Keydown事件判断Esc和F1键。

4、.屏幕上随机产生的字符用以标签控件数组,用定时器控件控制字符的下落的速度。

三、程序整体框图

              

 

四、系统的调试

问题1:窗体1设计时,不能同时选择2个单选按钮

    解决:先建立框架,再在其中建立单选按钮且不使用工具的自动方式,而是先单击工具箱上的工具,出现“+”指针,在框架中拖拉出适当大小的控件。

问题2:背景音乐打不开

解决:将音频文件用MMControl控件的DeviceType属性取值:

MMControl1.DeviceType = "Sequencer"

MMControl2.DeviceType = "WaveAudio"

问题3:打字的时间长度不能受音乐背景长度的控制。

解决:用mmcontrol的done 事件控制:

Private Sub MMControl1_Done(NotifyCode As Integer)

    If NotifyCode <> 1 Then Exit Sub

    Dim cj As data

    cj.name = Form1.text1.Text

    cj.score = totalscore

    cj.time = Now

    Open App.Path & "\score.txt" For Append As #1                             

        Write #1, cj.name, cj.score, cj.time

    Close 1

问题4:程序要根据所选择的速度和难度自动进行记分,选项较多,若要一一例举,则程序太长,容易出错。

     解决:用模板先定义全局变量,然后自定义函数,在编写代码过程中再调用子程序。

五、收获体会

   第一次做课程设计,一开始做时只是照着书上将窗体先设计好,但是,写代码时却无从下手。后来,在图书馆中查找资料,才有了一些头绪。

在编写代码前,将设计时用到的控件梳理一下,然后有针对性的复习、查找资料。另外,老师课上讲解了程序设计的注意事项,让我了解到编程时要注意代码简洁,同时又要注意结构合理。课本上的基础知识既要熟练掌握,也要学会融会贯通运用到实际操作中。

在设计过程中,我意识到了自己平时学习的不扎实,有的相关问题老师讲的时候总学的似是而非,自己还为自己的学习方法沾沾自喜,觉的无所谓,等到真正运用的时候才发现了问题,平时掌握的似是而非的问题,运用时不是出错就是达不到想要的状态,没办法只好临时抱着书死啃。这时才后悔平时没有多下点功夫把知识掌握牢靠了,否则就不会出现现在临时抱佛脚的尴尬局面。自己这种学习状态要是带到走上工作岗位,恐怕是要砸饭碗啦。而且对程序的删改也比较随意,有时根本没有考虑清楚,就把大段的代码删掉,经常是删掉以后才发现原来的考虑不周全,这时却叫天不应,叫地地不灵,没办法只好长叹一声又无耐的把代码重新搞一遍,吸取教训后,对代码的删改不再那么随意了,有时候觉得真的要删了也是先注释一下,然后等运行几遍,确实没有问题了才可以删掉。

    程序设计是一门语言,看似学起来困难。其实不然,它和我们所学的高数、大物等科目一样,一样需要认真学习、及时巩固、勤动脑、多思考,只要有了投入,就会有收获。在这次课程设计中,我不仅学到了一些程序设计的方法,而且也体会到做成功一件事是多么不容易,代码编写所需要的不仅仅是对VB课程知识的掌握,还需要十足的耐心及永不言弃的精神。当遇到阻碍时,不要一味的在这条路上硬闯,我们应该尝试寻找另外一条路。因为,当上帝关上门时,他往往会给你留下一扇窗。是积极寻找另一条出路,还是留在原地消极等待,只在我们的一念之间。

最后,经过一系列调试,程序终于能够正常运行了。看着那彩色的字符飘落,听着点击时的爆炸声,我的内心充斥着感动与惊喜。虽然设计过程中有很多困难,但是珍贵的正是过程中的点点滴滴,结果固然重要,但过程中的体会更加宝贵。

六、示例截图

     

               (窗体1)

          (窗体2)

(窗体3)

           (键盘布局)

七、源代码

窗体1:

Private Sub Command1_Click()

     If Text1.Text = "" Then

      i = MsgBox("亲,你还没有输入姓名!", 0 + vbQuestion, "打字设置")

        If i = 0 Then

        Form1.Show

        End If

     Else

        Form2.Show

     End If

End Sub

Private Sub Command2_Click()

     End

End Sub

Private Sub Command3_Click()

     If Text1.Text = "" Then

      i = MsgBox("亲,你还没有输入姓名!", 0 + vbQuestion, "打字设置")

     Else

        Form3.Show

     End If

 Dim InputDate As String * 1

     Form3.Text1.Text = ""

     Open "D:\UserData\lenovo\桌面\我的打字\score.txt " For Input As #1

     Do While Not EOF(1)               ‘读取文件

        InputDate = Input(1, #1)       ‘inputdate 只取得#1的 1 个字节

        Form3.Text1.Text = Form3.Text1.Text + InputDate

     Loop

     Close #1

 End Sub

 

窗体2

Option Explicit          ‘Option Explicit要求程序中所有出现的变量或常量都要声明和定义,不然会报错

Dim i As Integer, j As Integer, k As Integer, h As Integer, n As Integer, second As Integer

Private Sub Form_Load()

    

     MMControl1.DeviceType = "Sequencer"     ‘打开背景音乐

     MMControl1.Visible = False

     MMControl1.FileName = App.Path & "\BackMusic.mid"

     MMControl1.Command = "open"

     MMControl1.Command = "play"

     MMControl2.DeviceType = "WaveAudio"

     MMControl2.Visible = False

     MMControl2.FileName = App.Path & "\GUNSHOT.WAV"

     Image1.Visible = False

     Form2.Height = Screen.Height      ‘全屏显示

     Form2.Width = Screen.Width

     For i = 0 To 9

        Label1.Item(i).Top = 0        

‘item是用在控件数组中的一个属性,控件数组的建立可以通过复制一个控件后粘贴

        Label1.Item(i).Left = Screen.Width / 12 * (i + 2)  

 ‘确定字母产生的位置

        Timer1.Enabled = True

     Next i

     For i = 0 To 9

        letter (i)

     Next                              ‘子过程的调用

   

End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

     If KeyCode = vbKeyF1 Then         ‘用户按了F1

        Timer1.Enabled = False

        MMControl1.Command = "Pause"

        Form4.Show 1

        MMControl1.Command = "Play"

        Timer1.Enabled = True

      End If

   End Sub

Private Sub Timer1_Timer()           ‘控制字母下落

     Dim i As Integer

     For i = 0 To 9

        Randomize

        speed (n)                    ‘调用定义的速度子过程                                                               

     Next

        Label2.Caption = Form1.Text1.Text & ",你现在的得分是:" & totalscore & "分"

End Sub

Private Sub Timer2_Timer()           ‘控制爆炸图片

     Image1.Visible = False

     Timer2.Enabled = False

End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)

     Dim shootnum As Integer, m As Integer, n1 As Integer

     Dim shooted() As Integer

     For i = 0 To 9

        If Chr(KeyAscii) = Label1.Item(i).Caption Then

        shootnum = shootnum + 1

     ReDim Preserve shooted(1 To shootnum)

        shooted(shootnum) = i

        End If

     Next

     If shootnum > 0 Then                      ‘如果被击中的字符正确

        MMControl2.Command = "close"

        MMControl2.Command = "Open"

        MMControl2.Command = "play"

     m = 1

     n1 = Label1(shooted(m)).Top

     For i = 2 To shootnum

        If n1 < Label1(shooted(i)).Top Then

            m = i

            n1 = Label1(shooted(m)).Top

        End If

     Next

        result

        Image1.Left = Label1(shooted(m)).Left

        Image1.Top = Label1(shooted(m)).Top

        Image1.Visible = True

        Timer2.Enabled = True

        Label1.Item(shooted(m)).Top = 0

        letter (shooted(m))

        Label2.Caption = Form1.Text1.Text & ",您现在的得分是:" & totalscore & "分"

        Exit Sub

    End If

   

totalscore = totalscore – 1         

    Label2.Caption = Form1.Text1.Text & ", 你现在的得分是:" & totalscore & "分"

If KeyAscii = 27 Then                            ‘用户按了Esc

If MsgBox("真的要结束练习吗?", vbYesNo + vbQuestion, "打字练习") = vbYes Then

          Form1.Show

          Form2.Hide

   End If

End If

End Sub

MMControl1的Done事件:

Private Sub MMControl1_Done(NotifyCode As Integer)

     

If NotifyCode <> 1 Then Exit Sub

   'NotifyCode的返回值为1时表示命令成功执行

Dim cj As data

    cj.name = Form1.Text1.Text

    cj.score = totalscore

    cj.time = Now

    Open App.Path & "\score.txt" For Append As #1                               '音乐停止成绩写入score文件

        Write #1, cj.name, cj.score, cj.time

    Close 1

    If MsgBox(Form1.Text1.Text & ",本次练习的得分是:" & totalscore & "分。" & Chr(13) & Chr(10) & "游戏结束,继续吗?", 36, "打字练习") = vbYes Then

        totalscore = 0

        Label2.Caption = Form1.Text1.Text & ",你现在的得分是:" & totalscore & "分"

        MMControl1.Visible = False

        MMControl1.FileName = App.Path & "\BackMusic.mid"

        MMControl2.Visible = False

        MMControl2.FileName = App.Path & "\GUNSHOT.WAV"

        Label2.Caption = "Welcome, " & Form1.Text1.Text & ", 您现在的得分是:" & totalscore & "分"

        Image1.Visible = False

        For i = 0 To 9

          Label1.Item(i).Top = 500

         Next

        MMControl1.Command = "close"

        MMControl1.Command = "open"

        MMControl1.Command = "play"

        For i = 0 To 9

           Randomize

            letter (n)

        Next

        Else

          Form1.Show

    End If

End Sub

Private Sub Timer3_Timer()

    second = second + 1

    Label3 = second \ 60 & ":" & second Mod 60

End Sub

窗体3:

Private Sub Command1_Click()

    Form1.Show

End Sub

模块:

Public totalscore As Integer

Public Type data

    name As String

    score As String

    time As String

End Type

Public Sub letter(n As Integer)          '确定下降的字符                                         

    Randomize

    If Form1.Option4.Value Then         

            h = Int(Rnd * 26 + 97)          '小写字母

        ElseIf Form1.Option5.Value Then

            If i Mod 2 = 0 Then

              h = Int(Rnd * 26 + 65)        '大小写字母

            Else

                h = Int(Rnd * 26 + 97)      '所有字符 

        End If

        ElseIf Form1.Option6.Value Then

             h = Int(Rnd * 79 + 48)

    End If

        Form2.Label1.Item(n).Caption = Chr(h)

        Form2.Label1.Item(1).ForeColor = vbRed

        Form2.Label1.Item(2).ForeColor = vbBlue

        Form2.Label1.Item(3).ForeColor = vbGreen

        Form2.Label1.Item(4).ForeColor = vbBlue

        Form2.Label1.Item(5).ForeColor = vbBlack

        Form2.Label1.Item(6).ForeColor = vbRed

        Form2.Label1.Item(7).ForeColor = vbGreen

        Form2.Label1.Item(8).ForeColor = vbYellow

        Form2.Label1.Item(9).ForeColor = vbGreen

        Form2.Label1.Item(0).ForeColor = vbRed

  End Sub

Public Sub speed(i As Integer)        '下降的速度                                               

    For i = 0 To 9

        If Form1.Option1.Value Then

            Form2.Label1.Item(i).Top = Form2.Label1.Item(i).Top + 5

        ElseIf Form1.Option2.Value Then

            Form2.Label1.Item(i).Top = Form2.Label1.Item(i).Top + 10

        ElseIf Form1.Option3.Value Then

            Form2.Label1.Item(i).Top = Form2.Label1.Item(i).Top + 15

        End If

  If Form2.Label1.Item(i).Top > Form2.Height Then'到达底端对分数的影响                          

        Form2.Label1.Item(i).Top = 0

        totalscore = totalscore - 10

        letter (i)

    End If

    Next

End Sub

Public Sub result()      '加分的结果统计                                                 

    If Form1.Option1.Value And Form1.Option4.Value Then

        totalscore = totalscore + 1

    ElseIf Form1.Option1.Value And Form1.Option5.Value Then

        totalscore = totalscore + 2

    ElseIf Form1.Option1.Value And Form1.Option6.Value Then

        totalscore = totalscore + 3

    ElseIf Form1.Option2.Value And Form1.Option4.Value Then

        totalscore = totalscore + 4

    ElseIf Form1.Option2.Value And Form1.Option5.Value Then

        totalscore = totalscore + 5

    ElseIf Form1.Option2.Value And Form1.Option6.Value Then

        totalscore = totalscore + 6

    ElseIf Form1.Option3.Value And Form1.Option4.Value Then

        totalscore = totalscore + 7

    ElseIf Form1.Option3.Value And Form1.Option5.Value Then

        totalscore = totalscore + 8

    ElseIf Form1.Option3.Value And Form1.Option6.Value Then

        totalscore = totalscore + 9

    End If

End Sub

八、主要参考资料

1、Visual Basic 课程设计;王栋主编;清华大学出版社

2、Visual Basic游戏编程导学;杨正华,周荣彪,尹兵编著;清华大学出版社

3、Visual Basic6编程宝典;电子工业出版社

更多相关推荐:
课程设计报告

1课程设计目的课程设计是船舶设计原理课程重要的实践性教学环节是培养学生掌握船舶设计基本原理和能力的技术基础主尺度论证与总布置设计是船舶总体设计的重要组成部分通过课程设计的训练力求使学生实现从学生到船舶设计师的角...

课程设计报告内容

一设计目的1强化上机动手能力在理论和实践的基础上进一步巩固数据结构课程学习的内容掌握工程化软件设计的基本方法2掌握图的创建和应用3掌握迪杰斯特拉以及Prim等基本算法思想4掌握if语句及switch语句的运用方...

课程设计报告

中国计量学院信息工程学院课程设计报告课程设计名称系统设计与仿真课程计二级学院信息工程学院专业班级10电信2班学姓成绩号名1000301232廖壁波指导老师20xx年12月13日中国计量学院信息工程学院课程设计报...

课程设计报告模板

信息科学与工程学院高级语言程序设计课程设计报告学生成绩管理系统学科专业计算机科学与技术班级1301学号指导教师唐郑熠讲师学生二零年月目录目录1设计任务12需求分析121基础功能122扩展功能13系统概要设计13...

课程设计报告

扬州大学数据结构课程设计报告课题名称姓名学院系科班级指导老师日期自来水管架设问题广陵学院陈宏建1一课程设计的题目自来水管理架设问题问题描述若要在扬州大学的八个居民区A区B区C区D区E区F区G区H区之间架设自来水...

课程设计报告

系统软件课程设计时钟中断与进程调度学号姓名指导教师11070319许明秀金雪云20xx年12月一报告摘要进程调度是操作系统十分重要的一个部分在操作系统的设计过程中进程调度和时钟中断形成了密不可分的关系系统时钟定...

课程设计报告

计算机高级语言课程设计报告班级学号姓名蔡路日期学生成绩管理系统19xx3120xx100031020xx年1月18日一课程设计题目与要求实习题目学生成绩管理系统实习内容C语言面向对象的分析与设计基本要求学生成绩...

网页课程设计与报告

华东交通大学理工学院课程设计报告书所属课程名称网页设计与制作课程设计题目网站首页分院电信分院专业班级信息管理与信息系统1班学号20xx02104501XX学生姓名何XX指导教师程志平20xx年12月24日华东交...

简易温度控制系统(课设报告)

长安大学单片机课程设计-简易温度控制系统-专业:电气工程及其自动化学号:姓名:指导老师:时间:20##.12.30摘要随着科技的不断进步,在工业生产中温度是常用的被控参数,而采用单片机来对这些被控参数进行控制已…

Java课程设计报告模板

Java程序设计课程设计报告20xx20xx年度第1学期Hannio塔专业学生姓名班级学号指导教师完成日期计算机科学技术网络工程马千里B计算机1021010704213徐森20xx年1月8日Hannoi塔目录目...

计算机网络课程设计报告

计算机网络课程设计报告一.课程设计的题目、目的及要求.........................................................2二.课程设计的内容(分析和设计).....…

软件课程设计报告

任务书北京信息科技大学计算机软件基础课程设计题目从某个源点到其余各顶点的最短路径学院专业学生姓名班级学号指导老师起止时间任务书1摘要摘要本次课程设计的问题假设西安北京沈阳武汉4个城市构成小型交通网4个城市表示图...

课程设计报告(33篇)