快速配对游戏课程设计报告

发布时间:2020-05-19 14:58:58   来源:文档文库   
字号:

Visual Basic

所属课程名称:Visual Basic程序设

课程设计题目: 快速配对游戏

课程设计难度:两星

课程设计时间:2012.2.27 ~ 4.18

号:9121091601XX

名:XXX

南京理工大学机械工程学院

二〇一三年X

一、 程序功能

(1) 运行程序,显示如图1的开始界面,图片均为“背对”用户。单击“开始”按钮,图片显示1.5秒(如图2,图片均随机安排),然后翻过去。用户使用鼠标将图片翻起,如果连续单击的两个图片内容相同则会保持显示状态;如果两图片不同,两张图片0.5秒后自动翻过去。用户凭记忆在尽量短的时间内将8对图片全部“翻起”,游戏完成。

1

2

(2) 从用户第一次单击图片是,程序开始计时(以秒为单位),并在窗口的右上角显示已用时间。没击中一对图片,窗口中显示一个“笑脸”图标,否则显示一个“严肃的脸”图标(见图3)。

3

(3) 程序自动记录前三个最短完成时间,在游戏结束时一图4所示的消息框显示所用的时间,并请玩家输入名字。单击“排行榜”按钮时可以弹出“排行榜”窗体,如图5所示,显示前三名所用的时间。

4

5

(4) 在游戏中,窗口的“开始”和“排行榜”按钮成无效态,游戏完成后,“开始”按钮变为“重来”,单击该按钮可以从头再来一局。

二、 课程设计的详细设计

游戏主界面:(1)窗体的顶部要放置“开始”、“排行榜”和“退出”按钮。在放置一个两个重合的图像控件用来显示游戏中的“笑脸”和“严肃的脸”。再放置一个标签控件来显示用户所用的时间。加入三个定时器控件“Timershow”、“Timercompare”和“Timercounter”分别来控制展示图片的时间、点击不同图片后图片的展示时间和记录玩家的所用时间。

2)窗体的中部放置16个图像框控件数组“”来放置游戏中的图片。和一个放置“背面”图片的图像框控件“Imageback

在案安排游戏使用图片时使用的是随机函数Rnd随机的将“Imagepicture()”的Index值赋给数组,然后将这些选中的图片的“Picture”属性赋给“Imageshow()”

图像框达到随机安排图片的目的。

3)窗体的下部放置31个图像框控件“Imagepicture()”来放置31种不同的候选图片。

排行榜窗体:(1)加入12个标签控件用来显示“排行榜”。“LabelWanjia()”控件组显示玩家姓名,“LabelChengji()”控件组显示玩家成绩。

2 添加“返回”按钮,单击按钮时返回游戏主界面。

游戏加载时将“chengji”文件中的已存入的成绩和玩家姓名加载到“排行榜”窗体的相应位置上。

在游戏完成时用消息框提示你的成绩,如果你的成绩进入前三名则可以再“Inputbox”里面输入自己的姓名。

在游戏程序结束时将“排行榜”窗体上的内容存入成绩文件中。

全程序中使用控件数组和数组使程序的编写简单、明了。

三、 程序调试过程

【问题1】:在程序加载时要将31张图片中的8张随机的成对安排到游戏使用的图片中,但在加载时会出现4张相同的图片。

【解决办法】:在选出8张图片后判断是否有相同的图片,如果有则重新跳到“Rnd”函数重新选出8张不同的图片。

【问题2】:在游戏运行时会出现:如果点击一张已经翻开的图片和一张没翻开的图片时也会出现两张图片翻回显示背面的情况。

【解决办法】:在程序设计时用逻辑数组“Finishi()”判断图片是否翻开,如果是已经翻开则不记录点击的图片数。

【问题3】:当游戏再来一次时,可以连续点击两张以上的不同图片翻开对比。

【解决办法】:在游戏重新开始时将所有的“Imageshow()”图像框控件的“是否翻开”值“Finishi()”全部设置为“False”。

四、 更上一层楼

(1) 在游戏过程中使用的8对图片不是一直不变的,而是从候选的31张图片中随机选出8 张图片。

(2) 在玩家进入前三名时不仅可以记录玩家的成绩,而且还可以记录玩家的名字。

五、 课程设计总结

体会:自己动手设计程序可以提高我们的计算机技术,当自己设计的程序可以运行时有成就感,增加对编程的兴趣。同时在编程的过程中可以提高我们发现问题和解决问题的能力,能培养自己的创新能力。

不足:在点击“开始”按钮后到显示图片的时间间隔有点长。

六、 源程序代码

Option Explicit

Dim a(0 To 15) As Integer, b(1 To 2) As Integer, str(1 To 3) As String

Dim Finish(0 To 15) As Boolean, Order(1 To 3) As String, Q(1 To 3) As Integer

Dim y As Integer, Time1 As Integer

Private Sub CmdExit_Click() '退出

Dim i As Integer, k As Integer

Open App.Path & "\Chengji.txt" For Output As #2

For i = 1 To 3 '保存姓名和成绩

k = 15 - Len(str(i))

Print #2, str(i) & Space(k) & Q(i) & Space(5)

Next

Close

End

End Sub

Private Sub cmdPaihangbang_Click()

Dim i As Integer

FormZhujiemian.Hide

FormPaihangbang.Show

For i = 1 To 3

FormPaihangbang.LabelChengji(i).Caption = Q(i) '将已存的成绩和名字加载到排行榜页面

FormPaihangbang.LabelWanjia(i).Caption = str(i)

Next

End Sub

Private Sub cmdstart_Click()

Dim i As Integer

cmdstart.Enabled = False '游戏开始后只有退出按钮可用

cmdPaihangbang.Enabled = False

Timershow.Enabled = True '计时开始

For i = 0 To 15

Imageshow(i).Picture = Imageback.Picture '再次开始时图片先全部显示背面

Imageshow(i).Enabled = False

Finish(i) = False '游戏在开始时图片的属性为全部没翻开

Next

End Sub

Private Sub Form_Load()

Dim Index As Integer, u As Integer

FormZhujiemian.Width = 5655: FormZhujiemian.Height = 6660

For u = 0 To 15

Imageshow(u).Picture = Imageback.Picture '初始时全部显示背面且图片不可点击

Imageshow(u).Enabled = False

Next

Timershow.Enabled = False '计时器关闭状态

Timercompare.Enabled = False

Timercounter.Enabled = False

Dim w As Integer, j As Integer, p As Integer, i As Integer

Open App.Path & "\Chengji.txt" For Input As #1

w = 1

Do While Not EOF(1)

Input #1, Order(w) '打开文件

w = w + 1

Loop

For i = 1 To 3

Q(i) = Val(Trim(Mid(Order(i), 6, 18))) '取出成绩

str(i) = Trim(Mid(Order(i), 1, 6)) '取出名字

Next

Close

Dim m As Integer, c(0 To 7) As Integer, n As Integer, r As Integer, d(0 To 7) As Integer

For i = 0 To 7

c(i) = -1

Next

L1: Randomize

For i = 0 To 7

n = Int(Rnd * 31) '从候选图片中随机选出8张图片

c(i) = n

Next

For i = 0 To 7

For r = i + 1 To 7

If c(i) = c(r) Then GoTo L1 '如果有选出相同的图片择重新选择

Next

Next

For i = 0 To 15

a(i) = -1

Next

Randomize

For i = 0 To 7 '代表ImagepictureIndex属性

For j = 0 To 1 '2张相同图片

Do

m = Int(Rnd * 16) '代表ImageshowIndex属性

If a(m) = -1 Then

a(m) = c(i) '说明还没有赋予图片,就给其安排图片

Exit Do

End If

Loop

Next

Next

FormZhujiemian.Left = (Screen.Width - FormZhujiemian.Width) / 2 '打开窗体时窗体显示在屏幕的正中间

FormZhujiemian.Top = (Screen.Height - FormZhujiemian.Height) / 2

End Sub

Private Sub Imageshow_Click(Index As Integer) '图片的单击时间

Dim i As Integer

Imageshow(Index).Picture = Imagepicture(a(Index)).Picture

If Finish(Index) = True Then Imageshow(Index).Enabled = False

If Finish(Index) = False Then

y = y + 1 'y=2 表示已经翻开两张图片

b(y) = Index

Finish(Index) = True 'True代表图片已点击过了

If y = 2 Then

For i = 0 To 15

Imageshow(i).Enabled = False '如果已经点击了两张图片择不能再点击其他图片

Next

Timercompare.Enabled = True

Exit Sub

End If

End If

End Sub

Private Sub Timercompare_Timer() '对比图片

Static x As Integer, p As Integer: Dim i As Integer, s As String

If Timercompare.Enabled = True Then '调用期间图片不能点击

For i = 0 To 15

Imageshow(i).Enabled = False

Next

End If

If a(b(1)) <> a(b(2)) Then

Imageshow(b(1)).Picture = Imageback.Picture

Imageshow(b(2)).Picture = Imageback.Picture '图片不同择翻过去显示哭脸

Imagenosmile.Visible = True

Imagesmile.Visible = False

Finish(b(1)) = False: Finish(b(2)) = False

b(1) = -1: b(2) = -1

y = 0 '两图片翻过去之后其他图片可点击

Else

p = p + 1 '记录翻开的相同图片的对数

y = 0

Imagesmile.Visible = True '显示笑脸

Imagenosmile.Visible = False

If p = 8 Then

cmdPaihangbang.Enabled = True

CmdExit.Enabled = True

cmdstart.Enabled = True

cmdstart.Caption = "再来"

Time1 = lbtime.Caption

lbtime.Caption = ""

Timercounter.Enabled = False

Select Case Time1 '将玩家的成绩与已存入的成绩比较并存如相应的成绩和姓名

Case Is > Q(3)

MsgBox "抱歉,你的成绩是" & Time1 & "秒,你没有进入前三名", "64", "快速配对游戏"

Case Is < Q(1)

s = InputBox("恭喜你成为第一名 ,你的成绩是" & Time1 & "秒,请输入你的姓名: ", "快速配对游戏", "玩家1")

If s <> "" Then

Q(1) = Time1

str(1) = s

End If

Case Is < Q(2)

s = InputBox("恭喜你成为第二名, 你的成绩是" & Time1 & "秒,请输入你的姓名: ", "快速配对游戏", "玩家2")

If s <> "" Then

Q(2) = Time1

str(2) = s

End If

Case Is < Q(3)

s = InputBox("恭喜你成为第三名,你的成绩是" & Time1 & "秒,请输入你的姓名: ", "快速配对游戏", "玩家3")

If s <> "" Then

Q(3) = Time1

str(3) = s

End If

End Select

Call Bianhuan

b(1) = -1: b(2) = -1

y = 0 '其他图片可点击

p = 0

End If

End If

x = 0

For i = 0 To 15

Imageshow(i).Enabled = True '全部翻开后所有图片不可点击

Next

Timercompare.Enabled = False

End Sub

Private Sub Timercounter_Timer() '记录时间(秒)

lbtime.Caption = Val(lbtime.Caption) + Timercounter.Interval / 1000

End Sub

Private Sub Timershow_Timer() '展示全部图片

Dim i As Integer, j As Integer, m As Integer, Index As Integer

Static x As Integer

x = x + 1

If x = 2 Then '1.5秒后把图片翻过来

Timershow.Enabled = False

For Index = 0 To 15

Imageshow(Index).Picture = Imageback.Picture

Imageshow(Index).Enabled = True

Next

Timercounter.Enabled = True

x = 0

Exit Sub

End If

For m = 0 To 15

Imageshow(m).Picture = Imagepicture(a(m)).Picture

Next

End Sub

Private Sub Bianhuan() '定义一个过程用以在每一局游戏完成后重新随机安排游戏图片

Dim i As Integer, j As Integer, m As Integer, c(0 To 7) As Integer, n As Integer, r As Integer, d(0 To 7) As Integer

For i = 0 To 7

c(i) = -1

Next

L1: Randomize

For i = 0 To 7

n = Int(Rnd * 31)

c(i) = n

Next

For i = 0 To 7

For r = i + 1 To 7

If c(i) = c(r) Then GoTo L1

Next

Next

For i = 0 To 15

a(i) = -1

Next

Randomize

For i = 0 To 7

For j = 0 To 1

Do

m = Int(Rnd * 16)

If a(m) = -1 Then

a(m) = c(i)

Exit Do

End If

Loop

Next

Next

End Sub

本文来源:https://www.2haoxitong.net/k/doc/b221aa10824d2b160b4e767f5acfa1c7aa008208.html

《快速配对游戏课程设计报告.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式