投稿者 あにす  (社会人) 投稿日時 2008/11/19 17:07:55
連続での投稿失礼します。
実はゲームの開発は初めてなので、開発が進むと敵のAIの実装で悩むのではないかと思うのです。
そのときの試行錯誤のために、各オブジェクトの振る舞いを出来る限りカプセル化しておきたいという意図があり、一つのオブジェクトがゲーム全体を管理するという構造は取っていませんでした。
基本的な構造はこんな感じになってます
Imports System.Windows.Forms
Imports System.Drawing

Module Main
    <STAThread()> _
    Sub Main()
        '▼メインフォーム作成 
        Dim pb As New PictureBox()
        pb.Dock = DockStyle.Fill
        Dim mainForm As New Form()
        mainForm.KeyPreview = True
        mainForm.Controls.Add(pb)
        '▲メインフォーム作成 

        Dim screen As New Bitmap(mainForm.ClientSize.Width, mainForm.ClientSize.Height) 'ゲーム画面 
        Dim screenGraphics As Graphics = Graphics.FromImage(screen) 'ゲーム画面描画用 
        Dim objectList As New List(Of IGameObject)() 'ゲーム中のオブジェクト 

        'ここでゲーム開始初期のオブジェクトを追加 
        'ゲーム開始後はIGameObject.Calc()の中で追加や削除を行う 
        '描画のプライオリティ順に追加するようにする 
        objectList.Add(New タイトル画面の背景())
        objectList.Add(New カーソル())
        objectList.Add(New 選択肢ゲームスタート())
        objectList.Add(New 選択肢終了())

        '▼メインループ 
        Dim nextFrame As Double = Environment.TickCount
        Dim wait As Single = 1000 / 60
        While mainForm.Created
            If Environment.TickCount >= nextFrame Then
                '▼演算ループ 
                Dim i As Integer = 0
                Do
                    If objectList.Count > i Then
                        If objectList(i).Live Then
                            objectList(i).Calc(objectList)
                        Else
                            objectList.RemoveAt(i)
                            i -= 1
                        End If
                    Else
                        Exit Do
                    End If
                    i += 1
                Loop
                '▲演算ループ 
                If Environment.TickCount < nextFrame + wait Then
                    '▼描画ループ 
                    For Each obj As IGameObject In objectList
                        obj.Draw(screenGraphics)
                    Next
                    '▲描画ループ 
                    pb.Image = screen
                End If
                nextFrame += wait
            End If
            Application.DoEvents()
        End While
        '▲メインループ 
    End Sub
End Module