最近几天,学校的网络都好卡啊~~

好,不说了,说说今天的事情。

下午没有课了,看看股市,发现证券交易,真的只是一个投机市场,看了一会,电脑就没电了,真够气人的,也就一年,电池就不行了,一个半小时不到。

来电之后上poj看看题,郁闷的是,随便点击去的一题看上去简单,做却发现WA,而且,一看解题报告,居然设计黄金分割,没看明白。

折腾到四点半左右,想起VB,决定做一个快速开发,又做一个小游戏,这次真的很快,一小时四十分钟后,就全部做好了,后来,花点时间,大概二十分钟吧,把注释也写了。

这里是代码:

Const Mx As Integer = 6 '横下个数
Const My As Integer = 6 '纵向个数
Const Max As Integer = Mx * My '计算总的个数,也就是图片下标最大值
Const ImgNum As Integer = 9 '一共有多少图片
Const Border As Integer = 30 '边界宽度,用于布局
Const Path As String = "img" '图片目录,修改为工程目录,例如:D:KaginuxDesktopVBmemoryimg,生成exe改成"img"
'全局变量声明,依次是:答案数组,保存的是图片值,也就是文件名;是否可以点击图片,防止过度点击;下一次是不是第一次点击;第一次点击的图片下标;第二次点击的图片下标;分数,记分规则:点一次减一分,开始100分;已经打开的图片数目,用于标识游戏结束。
Dim Ans(Mx * My) As Integer, ClickAble As Boolean, FirstClick As Boolean, FirItm As Integer, SecItm As Integer, Score As Integer, Opened As Integer

Function GetUnsetAns() '获得一个没有生成的答案的图片下标
    Do
        GetUnsetAns = Int(Rnd * Max)
    Loop Until Ans(GetUnsetAns) = -1
End Function

Private Sub Begin_Click() '开始游戏,初始化
    Dim i As Integer, tmp As Integer
    For i = 0 To Max - 1 '答案全部赋值-1
        Ans(i) = -1
    Next
    For i = 0 To Max  2 - 1 '随机生成答案
        tmp = GetUnsetAns()
        Ans(tmp) = Int(Rnd * ImgNum)
        Ans(GetUnsetAns()) = Ans(tmp)
    Next
    For i = 0 To Max - 1 '全部掩盖图片
        Itm(i).Picture = LoadPicture(Path & "cover.gif")
    Next
    ClickAble = True '可以点击图片
    FirstClick = True '下一次是第一次点击
    FirItm = -1 '第一次点击的值不存在
    Score = 100 '初始分数100
    Opened = 0 '已经打开0个图片
    Memory.Caption = "记忆力游戏 - 当前得分:" & Score '标题显示分数
End Sub

Private Sub CloseFir_Timer() '如果第一次点击2秒后,没有点击第二次,玩家犹豫了,就把第一次点击的图片也覆盖回来
    CloseFir.Enabled = False '这次计时完成,不需要下次了,计时器关闭
    FirstClick = True '下一次变回第一次点击
    Itm(FirItm).Picture = LoadPicture(Path & "cover.gif") '覆盖回来
    FirItm = -1 '第一次点击的值不存在
End Sub

Private Sub ClosePic_Timer() '当打开两个图片之后,没有配对,500ms之后将二者覆盖回来,其中,这段时间不允许点击,所以,还要恢复可以点击
    ClosePic.Enabled = False '计时器不需要再工作了
    Itm(FirItm).Picture = LoadPicture(Path & "cover.gif") '覆盖第一个图片
    Itm(SecItm).Picture = LoadPicture(Path & "cover.gif") '覆盖第二个图片
    FirItm = -1 '第一次点击的值不存在
    ClickAble = True '下次可以点击了
End Sub

Private Sub Form_Load() '程序装载初始化
    Randomize '随机变量初始化
    ClickAble = False '还不可以点击
    Dim i As Integer
    Itm(0).Top = 200 '初始化第一个图片位置
    Itm(0).Left = 200
    Memory.Width = Mx * (Border + Itm(0).Width) + 500 '窗体大小调整
    Memory.Height = My * (Border + Itm(0).Height) + Border * 2 + 1300
    For i = 1 To Max - 1 '加载图片
        Load Itm(i)
        Itm(i).Top = Itm(0).Top + (Itm(0).Height + Border) * (i  Mx) '计算图片位置
        Itm(i).Left = Itm(0).Left + (Itm(0).Width + Border) * (i Mod Mx)
        Itm(i).Visible = True '图片可见
    Next
    Begin.Top = Itm(0).Top + (Itm(0).Height + Border) * My + 100 '调整开始按钮的位置,最后一个按钮下方
    Begin.Left = Itm(0).Left + (Itm(0).Width + Border) * (Mx - 1)
End Sub

Private Sub Itm_Click(Index As Integer) '图片被点击事件
    If Not ClickAble Or Ans(Index) = -1 Or Index = FirItm Then
        '不满足点击的处理条件,不处理,直接退出:当前不允许点击 或者 点击的图片已经打开了(打开后标记为-1) 或者 点击的是第一次一样的
        Exit Sub
    End If
    Score = Score - 1 '点击一次,减一分
    Itm(Index).Picture = LoadPicture(Path & Ans(Index) & ".gif") '显示这个图片
    If FirstClick Then '第一次点击
        FirstClick = False '下一次就不是第一次点击了
        FirItm = Index '记录第一次点击的图片下标
        CloseFir.Enabled = True '关闭第一次点击的计时器开始工作,如果2秒后没有第二次点击(取消这个计时器),这次点击被取消
    Else '第二次点击
        CloseFir.Enabled = False '取消第一次点击的计时器
        FirstClick = True '下一次,不管这次有没有对,都变回第一次点击了
        If Ans(FirItm) = Ans(Index) Then '配对成功
            Ans(FirItm) = -1 '标记这个已经被打开了
            Ans(Index) = -1
            Opened = Opened + 2 '一次打开了两个
            FirItm = -1 '第一次点击的值不存在了
            If Opened >= Max Then '全部打开了,提示游戏结束
                MsgBox "恭喜你完成了游戏!你的得分是:" & Score, vbOKOnly, "记忆力游戏" '提示分数
                Memory.Caption = "记忆力游戏" '恢复标题
                ClickAble = False '在下次游戏初始化之前,不可以再点击图片了
                Exit Sub '退出过程了,等待下一次开始
            End If
        Else '配对失败
            ClickAble = False '在500ms后覆盖回两个图片之前,不允许点击
            SecItm = Index '记录第二次点击的图片下标,以便覆盖回来
            ClosePic.Enabled = True '覆盖图片的计时器开始工作
        End If
    End If
    Memory.Caption = "记忆力游戏 - 当前得分:" & Score '每次点击后,都在标题显示分数
End Sub

有些时候,我也不知道怎么说好,高一学到一些VB基础,到现在,还是最常用的技术之一,从网页开发,我就还没脱离过ASP,自然地,写写这里Visual Basic东西,也不是什么难度事情。呵呵。随便,让它拙劣去吧。