ゴロゴロとした石畳風画像を作成するために配列を使って描画位置を管理してみました

RPGツクールMVのタイル画像作成ソフトを作ろうシリーズ。

今回は自動でレンガや石畳風画像を作ってみようと思います。

自動でレンガや石畳風の画像は作れるのか?

プログラムで規則正しく並んだレンガ画像を作る事は意外と簡単です。

長方形を横に並べて描き最後は正方形を描く、次の段は正方形を描いたのち長方形を並べて描くというような方法をとればOKです。

でもこれだと規則正しすぎて面白くないので、今回は縦横ともランダムでサイズを変化させながら空間を埋めていきたいと思います。

そのためには石を描いた部分を記録して、その部分を避けて次の絵を描画していく必要があります。

こんな時はキャンバスをザックリとした大きさのマスで区切って、管理していくと簡単です。

例えば100x100pixのキャンバスを10pixで区切ってみましょう。10x10マスで管理するのです。こう考えると1ピクセルごとに判断するよりは簡単でしょ。

VB.netだったらDimステートメントで多次元配列が作れますから、この多次元配列を利用して描画済みの部分に1を代入し印をつけることで判断できるようになります。

後は配列を調べて1が入っていない場所を探して、その位置に対応する座標に絵を描画し、描画した範囲の配列に1を入れていくという事を続ければOKです。

横3マス分の描画は可能だろうか?縦4マス分の描画は可能だろうかなどと、その時々でランダムなサイズの描画を行う際も配列を調べて行けば簡単に判断できます。

そして、一応完成した自動描画機能が作り出した画像がこちらです。

海や石畳などのベース画像としては十分じゃないかと思います。少し手直しすればタイル画像としても使えるので、作ってよかったなと思います。

この機能はいずれRPGツクール用タイル画像作成ツールのバージョンアップ版として公開したいと思っています。

ザックリと描画処理解説

描画処理を一度もやった事がない人の為に超大雑把な描画処理解説をしたいと思います。

VB.netではGraphicsオブジェクトを準備出来れば、Graphicsオブジェクトのメソッドを利用していろいろな図形や文字などが描けます。

ピクチャーボックスに絵を描きたい場合は下記のようにGraphicsオブジェクトを準備します。
Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)

この際、ピクチャーボックスのイメージオブジェクトに何も入っていなかったらエラーになりますから、そんなときは事前にイメージオブジェクトも作っておきましょう。
PictureBox1.Image = new Bitmap(100,100)

後はGraphicsオブジェクトのメソッドを利用していろいろな物を描くだけです。例えば横30pix縦20pixの茶色い四角形を10x10の位置に描画する場合はこんな感じです。

g.FillRectangle(Brushes.Brown, 10, 10, 30, 20)

最後にGraphicsオブジェクトを片付けて、ピクチャーボックスに画像が変わった事を知らせれば完了です。

g.Dispose()
PictureBox1.Refresh()

慣れると簡単ですから、プログラミングに興味がある方はフリーで使える.net環境をダウンロードして試してみてください。