自分だけのクイズ作成 - Quipha公開中

【#9】VBでゲームを作ろう【全ソースコード1】

VB
スポンサーリンク

メニュー画面

Public Class F_Menu

    ' 初級ボタンクリック
    Private Sub B_Syokyu_Click(sender As Object, e As EventArgs) Handles B_Syokyu.Click
        F_Main.Height = 400    ' フォームの高さ
        F_Main.Width = 400     ' フォームの幅
        F_Main.EnmTim = 1000   ' 敵の動く速度
        F_Main.Enms = 20       ' 敵の数
        F_Main.GmTim = 10000   ' 制限時間
        F_Main.FrmIni()        ' 難易度初期化
        F_Main.Show()
        Me.Hide()
    End Sub

    ' 中級ボタンクリック
    Private Sub B_Chukyu_Click(sender As Object, e As EventArgs) Handles B_Chukyu.Click
        F_Main.Height = 500    ' フォームの高さ
        F_Main.Width = 700     ' フォームの幅
        F_Main.EnmTim = 800    ' 敵の動く速度
        F_Main.Enms = 30       ' 敵の数
        F_Main.GmTim = 15000   ' 制限時間
        F_Main.FrmIni()        ' 難易度初期化
        F_Main.Show()
        Me.Hide()
    End Sub

    ' 上級ボタンクリック
    Private Sub B_Jyokyu_Click(sender As Object, e As EventArgs) Handles B_Jyokyu.Click
        F_Main.Height = 600    ' フォームの高さ
        F_Main.Width = 800     ' フォームの幅
        F_Main.EnmTim = 300    ' 敵の動く速度
        F_Main.Enms = 40       ' 敵の数
        F_Main.GmTim = 20000   ' 制限時間
        F_Main.FrmIni()        ' 難易度初期化
        F_Main.Show()
        Me.Hide()
    End Sub

    ' 終了ボタンクリック
    Private Sub B_Close_Click(sender As Object, e As EventArgs) Handles B_Close.Click
        ' メニュー画面を閉じる
        Me.Close()
    End Sub
End Class

メイン画面

Public Class F_Main

    Public Property Enms As Integer          ' 敵の数
    Public Property EnmTim As Integer        ' 敵の動くスピード(秒数)
    Public Property GmTim As Integer         ' 残り時間(秒数)

    Private _rnd As New System.Random    ' ランダム変数
    Private _enemies As New ArrayList()  ' 複数の敵を格納する変数

    ' 難易度初期化
    Public Sub FrmIni()

        ' フォームのサイズでコントロールを配置する
        P_Enemy.Height = Me.Height - P_Enemy.Top - 45
        P_Enemy.Width = Me.Width - 40

        ' 合計得点
        L_Sum.Text = "0"
        ' 敵の動くスピード
        T_Enemy.Interval = EnmTim
        ' 残り時間の初期化
        PG_Jikan.Maximum = (GmTim / 1000)
        PG_Jikan.Value = PG_Jikan.Maximum
    End Sub

    Private Sub F_Main_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
        ' メニュー画面の表示
        F_Menu.Show()
    End Sub

    ' スタートボタンクリック
    Private Sub B_Start_Click(sender As Object, e As EventArgs) Handles B_Start.Click
        ' スタートボタンを使えなくする
        B_Start.Enabled = False

        ' 敵の作成
        Dim i As Integer
        ' 敵を10体生成します
        For i = 0 To Enms - 1
            ' 配列に敵クラスを生成します。その際にオーナーのパネルとランダム変数を渡します。
            _enemies.Add(New CEnemy(Me.P_Enemy, _rnd))
            ' 敵のクリックイベント(倒すイベント)
            AddHandler CType(_enemies(i), CEnemy).OnClick, AddressOf EnmOnClick
            ' ループの中でDoEventsを呼んでおく
            System.Windows.Forms.Application.DoEvents()
        Next

        ' タイマーのスタート
        T_Enemy.Enabled = True
        T_Jikan.Enabled = True
    End Sub

    ' 敵を動かす
    Private Sub T_Enemy_Tick(sender As Object, e As EventArgs) Handles T_Enemy.Tick
        Dim i As Integer
        ' 敵の数だけループする
        For i = 0 To _enemies.Count() - 1
            ' 敵の移動イベントを呼ぶ
            CType(_enemies(i), CEnemy).MvEnm()
            ' ループの中でDoEventsを呼んでおく
            System.Windows.Forms.Application.DoEvents()
        Next
    End Sub

    ' 残り時間を計測
    Private Sub T_Jikan_Tick(sender As Object, e As EventArgs) Handles T_Jikan.Tick
        If (PG_Jikan.Minimum) <= (PG_Jikan.Value - 1) Then
            ' プログレスバーを一つ下げる
            PG_Jikan.Value = PG_Jikan.Value - 1
        Else
            ' 終わり
            PG_Jikan.Value = PG_Jikan.Minimum
            ' タイマーを止める
            T_Enemy.Enabled = False
            T_Jikan.Enabled = False
            ' メッセージを表示
            MsgBox("終了です" & vbCrLf & "あなたの得点は" & L_Sum.Text & "です")
            ' メイン画面を閉じる
            Me.Close()
        End If
    End Sub

    ' 敵クリックイベント
    Public Sub EnmOnClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
        ' 得点の加算(それぞれの敵の得点を取得する。)
        L_Sum.Text = CInt(L_Sum.Text) + CType(sender, CEnemy).GetTokuten
        ' 敵を倒したイベント(再度敵を出現させる)
        Call CType(sender, CEnemy).EnemyDown()
    End Sub

End Class

コメント

タイトルとURLをコピーしました