素人がゲームプログラム作成に挑戦
ゲームを買うお金がないから、ゲームを作るというゲームに挑戦!言語はVisual Basic(VB)をメインにC++、C#、Javaは参考程度
Entries
マップチップ その2
- ジャンル : コンピュータ
- スレッドテーマ : Visual Basic
マップチップ その1で作成したマップにキャラクタを合体させることが目的となったわけですが、マップ作成用のプログラムとキャラクタのプログラムをまとめて書いてしまうとごちゃごちゃになってしまいよく分からないものとなってしまいます。
そこで、まず役割分担を行ってあげなければなりません。
役割分担といえば、やっぱりクラス化ですね。
今回はフォームクラスとマップクラス、キャラクタクラスの3つのクラスで役割分担を行います。
3つのクラスをすべて作成するとちょっと大変ですから、今回はマップチップ その1で作成したプログラムをクラス化するだけにしておきます。
フォームクラスで行うことは、マップオブジェクトのインスタンス化と画面の描画になります。
これらの処理だけをプログラム化すれば以下のような感じに。
で、マップクラスの方は以下のような感じです。
これで役割分担はできあがりです。
あとはキャラクタクラスをフォームクラスに合体すればマップ画像の上を移動するRPGのフィールド画面はできあがりになります。
ですが、本格的なRPGゲームとしてはまだまだ先は遠いですね。
そこで、まず役割分担を行ってあげなければなりません。
役割分担といえば、やっぱりクラス化ですね。
今回はフォームクラスとマップクラス、キャラクタクラスの3つのクラスで役割分担を行います。
- フォームクラスはマップクラスとキャラクタクラスの管理
- マップクラスでマップの作成と表示
- キャラクタクラスでキャラクタの作成と移動、表示
3つのクラスをすべて作成するとちょっと大変ですから、今回はマップチップ その1で作成したプログラムをクラス化するだけにしておきます。
フォームクラスで行うことは、マップオブジェクトのインスタンス化と画面の描画になります。
これらの処理だけをプログラム化すれば以下のような感じに。
Public Class Form1
Dim map As MapClass 'マップオブジェクト変数
Public Sub New( )
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent( )
' InitializeComponent( ) 呼び出しの後で初期化を追加します。
Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.OptimizedDoubleBuffer, True)
Me.ClientSize = New Size(640, 480)
map = New MapClass 'マップオブジェクト生成
End Sub
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
map.Draw(e.Graphics)
Me.Invalidate( )
End Sub
End Class
Dim map As MapClass 'マップオブジェクト変数
Public Sub New( )
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent( )
' InitializeComponent( ) 呼び出しの後で初期化を追加します。
Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.OptimizedDoubleBuffer, True)
Me.ClientSize = New Size(640, 480)
map = New MapClass 'マップオブジェクト生成
End Sub
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
map.Draw(e.Graphics)
Me.Invalidate( )
End Sub
End Class
で、マップクラスの方は以下のような感じです。
Public Class MapClass
Dim MapImg As Bitmap = New Bitmap(My.Resources.map) 'マップチップ画像ファイル
Dim MapRect() As Rectangle = New Rectangle(5) { } 'マップチップRectangle構造体
Dim MapData(,) As Integer = New Integer(14, 19) _
{{3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, _
{3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3}, _
{3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 3}, _
{3, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3}, _
{3, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 3}, _
{3, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3}, _
{3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}} 'マップ配列
Public Sub New( )
Dim i As Integer = 0
For y As Integer = 0 To 1
For x As Integer = 0 To 2
MapRect(i) = New Rectangle(x * 32, y * 32, 32, 32)
i += 1
Next
Next
End Sub
Public Sub Draw(ByVal g As Graphics)
For y As Integer = 0 To MapData.GetUpperBound(0)
For x As Integer = 0 To MapData.GetUpperBound(1)
g.DrawImage(MapImg, x * 32, y * 32, MapRect(MapData(y, x)), GraphicsUnit.Pixel)
Next
Next
End Sub
End Class
Dim MapImg As Bitmap = New Bitmap(My.Resources.map) 'マップチップ画像ファイル
Dim MapRect() As Rectangle = New Rectangle(5) { } 'マップチップRectangle構造体
Dim MapData(,) As Integer = New Integer(14, 19) _
{{3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, _
{3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3}, _
{3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 3}, _
{3, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3}, _
{3, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 3}, _
{3, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 3}, _
{3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3}, _
{3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}} 'マップ配列
Public Sub New( )
Dim i As Integer = 0
For y As Integer = 0 To 1
For x As Integer = 0 To 2
MapRect(i) = New Rectangle(x * 32, y * 32, 32, 32)
i += 1
Next
Next
End Sub
Public Sub Draw(ByVal g As Graphics)
For y As Integer = 0 To MapData.GetUpperBound(0)
For x As Integer = 0 To MapData.GetUpperBound(1)
g.DrawImage(MapImg, x * 32, y * 32, MapRect(MapData(y, x)), GraphicsUnit.Pixel)
Next
Next
End Sub
End Class
これで役割分担はできあがりです。
あとはキャラクタクラスをフォームクラスに合体すればマップ画像の上を移動するRPGのフィールド画面はできあがりになります。
ですが、本格的なRPGゲームとしてはまだまだ先は遠いですね。
0件のコメント
コメントの投稿
0件のトラックバック
- トラックバックURL
- http://hinagis.blog33.fc2.com/tb.php/34-b9344097
- この記事に対してトラックバックを送信する(FC2ブログユーザー)



