Entries

マップチップ その2

マップチップ その1で作成したマップにキャラクタを合体させることが目的となったわけですが、マップ作成用のプログラムとキャラクタのプログラムをまとめて書いてしまうとごちゃごちゃになってしまいよく分からないものとなってしまいます。
そこで、まず役割分担を行ってあげなければなりません。
役割分担といえば、やっぱりクラス化ですね。

今回はフォームクラスとマップクラス、キャラクタクラスの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

で、マップクラスの方は以下のような感じです。
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

これで役割分担はできあがりです。
あとはキャラクタクラスをフォームクラスに合体すればマップ画像の上を移動するRPGのフィールド画面はできあがりになります。
ですが、本格的なRPGゲームとしてはまだまだ先は遠いですね。

0件のコメント

コメントの投稿

新規
投稿した内容は管理者にだけ閲覧出来ます

0件のトラックバック

トラックバックURL
http://hinagis.blog33.fc2.com/tb.php/34-b9344097
この記事に対してトラックバックを送信する(FC2ブログユーザー)

Appendix

最新記事

検索フォーム

月別アーカイブ

売れ筋ランキング

お楽しみ用

アニメグッズ

プロフィール

Author:ひなぎ
VB2005&2008でゲーム作成中

FC2カウンター

Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

FC2ブログ 一戸建て