大家來找碴

這個星期六,花了點時間做了一個VB的小遊戲

其中用到的物件很簡單,包含了基本的Label,Button,Timer,跟Shape

下載原始檔 下載.EXE檔

我開發的環境是Visual Basic 6.0

這個程式說穿了也沒啥利害的地方,只是用一些很簡單的方式將效果呈現出來,

專案Project中包含了五個form,分別為

1.Start.frm : 開始畫面

2.game_1 : 第一關遊戲畫面

3.game_2 : 第二關遊戲畫面

4.game_over : 遊戲結束畫面

5.game_end : 遊戲破關畫面

關於這五個frm的說明如下

1.Start.frm

這個畫面只有放置一個按鈕,主要用來進入遊戲使用

可以在這個畫面內加上一些圖片,例如歡迎畫面之類的東西

功能:點擊 開始遊戲 鈕之後進入game_1.frm 第一關遊戲畫面

Source code:

Private Sub Command1_Click()

    game_1.Show     '顯示game_1第一關遊戲畫面

    Start.Hide      '隱藏起始畫面

End Sub

Private Sub Form_Unload(Cancel As Integer)

    End

End Sub

2.game_1.frm與game_2.frm

這個form應該就是這次程式主的腳了,因為幾乎所有功能都在這邊執行

在玩大家來找碴的時候,大家應該都有經驗,就是找到相關的不同處時

點擊之後畫面會用一個圈圈把錯誤的地方圈起來,來告訴使用者

這個部分呢,紅色的圈圈使用shape物件來做

但是不知道為什麼,vb中的shape不可以加入code也就是說

我沒有辦法寫 如果當shape被點擊之後,我要做什麼的功能

所以 我就利用了一點小小的手腳

就是把Label設為透明,然後沒有文字,使他跟shape重疊

然後將程式碼寫Label上,在去控制shape的隱藏或顯示...嘿嘿!

這應該算是一種折衷的小技巧吧!未達目的而不擇手段

功能:點擊開始鈕之後會開始進入畫面,Timer1會開始計時,

預設遊戲時間為100秒,遊戲開始後就對照兩邊的圖片找出異常點

使用滑鼠點擊,點擊正確的話,畫面會以紅圈表示,並在下方會有訊息提示

如果點擊錯誤的話系統將把遊戲時間扣除五秒,每誤點一次,即扣除五秒

直到遊戲時間小於等於0為止,另外遊戲時間如結束,未找出所有問題點

系統會已Msgbox方式提示,並以綠色圖圈,顯示未找到問題點的地方

測試功能,遊戲時間可以在遊戲開始前調整,調整方式則使用滑鼠

連續點擊兩下遊戲畫面中空白的form部分,則會顯示一Inputbox視窗

依照提示輸入秒數之後,按下確定,遊戲將停止並回到初始畫面,並將時間改為

使用者輸入之時間,game_1中遊戲在時間內完成,則觸發致能"前進下一關吧"的按鈕

以讓使用者可以進入到game_2中

Dim game_time, game_value As Integer
Dim time_value As String

Private Sub Command1_Click()

    Command1.Visible = False        '將command1隱藏

    Timer1.Enabled = True           '啟動Timer1計時

End Sub

Private Sub exit_cmd_Click()

    End                             '離開表單

End Sub

Private Sub Form_DblClick()

    Call check_password(password_tmp)       '呼叫check_password函式(in module1)

    set_game_time.Visible = password_tmp    '依照回傳Password_tmp值設定set_game_time command是否顯示

End Sub

Private Sub Form_Load()

    Timer1.Enabled = False                  '停止Timer1計時

    Command1.Visible = True                 '顯示command1按鈕

    If Val(time_value) = 0 Then             '如果使用者設定值為0則使用初始值100秒

    game_time = 100

    Else

    game_time = Val(time_value)             '如果初始值不為0,則使用使用者設定值

    End If

    game_time_sec = game_time               '將game_time_sec label設定為game_time顯示時間

    game_value = 3                          '設定遊戲疑點總數,做訊息顯示計數用

    Shape1(0).Visible = False               '初始所有shape為隱藏
    Shape1(1).Visible = False
    Shape2(0).Visible = False
    Shape2(1).Visible = False
    Shape3(0).Visible = False
    Shape3(1).Visible = False

    Label1(0).BackStyle = 0                 '設定所有label為透明背景
    Label1(1).BackStyle = 0
    Label2(0).BackStyle = 0
    Label2(1).BackStyle = 0
    Label3(0).BackStyle = 0
    Label3(1).BackStyle = 0

    Label1(0).Caption = ""                  '設定所有label無文字
    Label1(1).Caption = ""
    Label2(0).Caption = ""
    Label2(1).Caption = ""
    Label3(0).Caption = ""
    Label3(1).Caption = ""

    Label1(0).Visible = True                   '設定所有label顯示
    Label1(1).Visible = True
    Label2(0).Visible = True
    Label2(1).Visible = True
    Label3(0).Visible = True
    Label3(1).Visible = True

    next_game_cmd.Enabled = False           '令前進下一關按鈕失效

    set_game_time.Visible = False           '隱藏遊戲時間設定按鈕

    game_msg.Caption = ""                   '清除遊戲訊息字串

End Sub

Private Sub Label1_Click(index As Integer)

    Shape1(0).Visible = True            '當label1被按下時,則顯示對應shape1(兩邊)
    Shape1(1).Visible = True            '並同時將Label1隱藏,以避免重複按下
    Label1(0).Visible = False
    Label1(1).Visible = False
    game_value = game_value - 1         '將遊戲疑點數量-1

    Call game_value_check               '並呼叫game_value_check函式檢查數值,顯示對應值

End Sub

Private Sub Label2_Click(index As Integer)

    Shape2(0).Visible = True            '同Label1
    Shape2(1).Visible = True
    Label2(0).Visible = False
    Label2(1).Visible = False
    game_value = game_value - 1

    Call game_value_check

End Sub

Private Sub Label3_Click(index As Integer)

    Shape3(0).Visible = True            '同Label1
    Shape3(1).Visible = True
    Label3(0).Visible = False
    Label3(1).Visible = False
    game_value = game_value - 1

    Call game_value_check

End Sub

Private Sub next_game_cmd_Click()

    game_2.Show             '顯示game_2

    game_1.Hide             '隱藏game_1
    game_1.rest_victor      '並將game_1重置

End Sub

Private Sub Picture1_Click(index As Integer)

    If Timer1.Enabled = True Then       '如果Timer1執行時,代表遊戲進行中

    game_time = game_time - 5           '因為沒有選到任何疑點,擊為誤點

    game_time_sec = game_time           '則將遊戲時間-5秒,並顯示於game_time_sec label上

    End If

End Sub

Private Sub Picture2_Click()

    If Timer1.Enabled = True Then       '同Picture1

    game_time = game_time - 5

    game_time_sec = game_time

    End If

End Sub

Private Sub set_game_time_Click()

    time_value = InputBox("請輸入設定遊戲時間(秒):")      '顯示Inputbox提示使用者輸入遊戲時間,並將設定值儲存於time_value中

    Call Form_Load                                         '輸入完畢後重新呼叫Form_load還原初始狀態

End Sub

Private Sub Timer1_Timer()

    If game_time <= 0 Then                              '如果game_time小於等於0時,代表遊戲已經結束

        Timer1.Enabled = False                          '則停止Timer1計時

            If Shape1(0).Visible = False Then           '並開始檢查有哪些shape未被找到

                Shape1(0).BorderColor = &HFF00&         '將未顯示之shape顯示,然後並改為綠色
                Shape1(1).BorderColor = &HFF00&
                Shape1(0).Visible = True
                Shape1(1).Visible = True

            End If

            If Shape2(0).Visible = False Then           '同上

                Shape2(0).BorderColor = &HFF00&
                Shape2(1).BorderColor = &HFF00&
                Shape2(0).Visible = True
                Shape2(1).Visible = True

            End If

            If Shape3(0).Visible = False Then           '同上

                Shape3(0).BorderColor = &HFF00&
                Shape3(1).BorderColor = &HFF00&
                Shape3(0).Visible = True
                Shape3(1).Visible = True

            End If

                MsgBox "糟糕!時間到了"                 '完成上述動作後顯示Msgbox告知使用者遊戲時間已到

                game_over.Show                          '顯示Game Over 畫面
                game_1.Hide                             '將game_1隱藏
                game_1.rest_victor                      '重置Game1
    Else

        game_time = game_time - 1                       '時間為結束,將game_time-1

        game_time_sec = game_time                       '顯示在game_time_sec上

    End If

End Sub

Sub game_value_check()

    Select Case game_value                              '依照game_value值選擇對應訊息顯示

        Case 0
            game_msg.Caption = "恭喜遊戲過關"

            Timer1.Enabled = False

            next_game_cmd.Enabled = True
        Case 1
            game_msg.Caption = "還剩下1個囉!加油..."

        Case 2
            game_msg.Caption = "還有2個唷,在找找...."

    End Select

End Sub

Sub rest_victor()

    Call Form_Load

End Sub

Private Sub Form_Unload(Cancel As Integer)

    End

End Sub

3.game_over & game_end

用來顯示遊戲結束與過關畫面而用,參考原始檔內容

下載原始檔 下載.EXE檔

4 thoughts on “大家來找碴

  1. 上學期其中一門選修課就是VB...很 莫名其妙的課程跟我主修毫不相關, 但就是被逼著硬學. 學的夠痛苦!

  2. 牙醫,VB= =?的確很不相干...哈xd

    我也不知道該說些什麼...的確很囧

    不過對你來說應該不難吧..之前也玩過程式

    基本的東西應該觀念都一樣,就當成主修課程外的一點休閒吧...

    這星期六或日你哪天有空阿?

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料