素人がゲームプログラム作成に挑戦
ゲームを買うお金がないから、ゲームを作るというゲームに挑戦!言語はVisual Basic(VB)をメインにC++、C#、Javaは参考程度
Entries
マップチップ その1
- ジャンル : コンピュータ
- スレッドテーマ : Visual Basic
キャラクターの移動は前回まででできましたので、今回は背景に挑戦です。
通常RPGゲームの背景は一枚の絵ではなく、小さなブロックを組み合わせて一枚の絵を作成しています。
今回はこれにチャレンジします。
といっても、デザイン力はありませんから、グラフィックはシンプルで。

イメージとしては、緑が芝、茶色が土、薄橙を砂漠、青を海、水色を川、濃い紫を毒沼とします。
これをRectangle構造体にいれて、マップの配列にマッチするものを表示すればいいわけですね。
まず、Rectangle構造体を作成するわけですが、これはキャラクターのアニメーションと同じやり方でします。
構造体配列を用意して、1枚絵からマップチップを分割し保存します。
ただし、保存されるのは座標だけですので間違えないように。
あとは、画面上に表示するマップの配列を作成してあげればできあがり。
上記の2点が今回のポイントです。
とりあえず、コードは↓のような感じでしょうか。
以上のコードを実行すると、以下のようにマップチップから1枚絵を作成できます。

今度は、このマップとキャラクターの合成にチャレンジ。
通常RPGゲームの背景は一枚の絵ではなく、小さなブロックを組み合わせて一枚の絵を作成しています。
今回はこれにチャレンジします。
といっても、デザイン力はありませんから、グラフィックはシンプルで。

イメージとしては、緑が芝、茶色が土、薄橙を砂漠、青を海、水色を川、濃い紫を毒沼とします。
これをRectangle構造体にいれて、マップの配列にマッチするものを表示すればいいわけですね。
まず、Rectangle構造体を作成するわけですが、これはキャラクターのアニメーションと同じやり方でします。
構造体配列を用意して、1枚絵からマップチップを分割し保存します。
ただし、保存されるのは座標だけですので間違えないように。
あとは、画面上に表示するマップの配列を作成してあげればできあがり。
上記の2点が今回のポイントです。
とりあえず、コードは↓のような感じでしょうか。
Public Class Form1
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()
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.OptimizedDoubleBuffer, True)
Me.ClientSize = New Size(640, 480)
Me.MakeMap()
End Sub
Sub MakeMap() 'マップチップ構造体を作成
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
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Me.Draw(e.Graphics)
Me.Invalidate()
End Sub
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()
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.OptimizedDoubleBuffer, True)
Me.ClientSize = New Size(640, 480)
Me.MakeMap()
End Sub
Sub MakeMap() 'マップチップ構造体を作成
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
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Me.Draw(e.Graphics)
Me.Invalidate()
End Sub
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
以上のコードを実行すると、以下のようにマップチップから1枚絵を作成できます。

今度は、このマップとキャラクターの合成にチャレンジ。
0件のコメント
コメントの投稿
0件のトラックバック
- トラックバックURL
- http://hinagis.blog33.fc2.com/tb.php/31-891d296b
- この記事に対してトラックバックを送信する(FC2ブログユーザー)



