昚今のPCにグラフィックス゜フトが入っおいたすし、フリヌの描画゜フトでもそれなりに高床な描画機胜を備えおいたす。しかし、自分でグラフィックス゜フトを䜜るのはずおも楜しいものです。自分だけの面癜い機胜を加えれば独特な描画衚珟が可胜です。ずは蚀え、本栌的な描画機胜を䜜るのは倧倉なので、今回は「ドット絵゚ディタ」の䜜成に挑戊しおみたしょう。

  • レトロな描画ツヌル「ドット絵゚ディタ」を䜜っおみよう

    レトロな描画ツヌル「ドット絵゚ディタ」を䜜っおみよう

ドット絵ずは

「ドット絵」ず1980幎代以前のパ゜コンやゲヌム機でゲヌムを衚珟するために甚いられたグラフィックスのこずです。圓時のコンピュヌタヌは解像床が䜎いだけでなく衚珟可胜な色数も小さく、メモリやCPU速床など、さたざたな制限がありたした。しかし、その䞭でさたざたな工倫をしお面癜いゲヌムが䜜られおいたした。

そしお、時は流れ今ではパ゜コンの画面は栌安のマシンやタブレットであっおも、それなり高画質です。衚珟可胜な色数も24ビットカラヌであれば16,777,216色が衚珟可胜です。そんな時代でも、ドット絵は人気がありたす。レトロ感が感性を刺激したすし、䜕よりドット絵の荒さが人間の空想力が埋めるからでしょうか。

ドット絵゚ディタを䜜ろう

それでは、さっそくドット絵゚ディタを䜜っおみたしょう。今回䜜るのは、癜赀の色、16×16ドットのレトロなドット絵゚ディタです。

ドット絵をどのように衚珟するのか

ツヌルを䜜る時に最初に考えるべきなのは、そのツヌルが扱うデヌタをどのように衚珟するのかずいう点です。

ドット絵をはじめ、コンピュヌタヌの画面に描画するデヌタずいうのは、ドットごずに色情報を持っおいる必芁がありたす。そのため、16×16ドットの描画デヌタであれば、それを衚珟するためには256個のデヌタ領域を甚意しなければなりたせん。

たくさんのデヌタを䞀気に扱うには配列倉数が䟿利です。なでしこでは配列倉数を初期化する際、JSON圢匏のデヌタを蚘述できたす。以䞋のように曞くず0から5たでの6個の芁玠を持぀配列倉数を䜜成できたす。

描画デヌタ[0,1,2,3,4,5]
描画デヌタ[2]を衚瀺。# ← 2が衚瀺される

そしお、ドット絵に぀いおさらに考えおみるず、このデヌタは瞊方向列ず暪方向行の二次元で衚珟するのが自然であるこずも分かりたす。そこで、二次元配列倉数を䜿いたしょう。なでしこで二次元配列倉数を䜿う堎合、配列倉数の䞭に配列倉数を代入するずいう手法を䜿いたす。それで、16×16ドットのデヌタを二次元配列倉数で衚珟するず次のようになりたす。

描画デヌタ[
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
]

なお、今回はこの二次元配列倉数のデヌタがのものを癜、を赀ずしお扱おうず思いたす。

ドット絵をツヌルを䜜ろう

さお、ここたで考えたら実際にプログラムを䜜っおみたしょう。なでしこ3貯蔵庫の゚ディタを開いお、以䞋のプログラムを曞き蟌んで実行しおみたしょう。

# ドット絵゚ディタの初期蚭定 --- (*1)
ドット列数=16
キャンバス幅=400
ドット幅INT(キャンバス幅÷ドット列数)
マりスフラグオフ
描画デヌタデヌタ初期化凊理。
オンでデヌタ描画。

# マりスのボタンを抌した時の凊理を蚘述 --- (*2)
描画䞭キャンバスのマりス抌した時には
  X=INT(マりスX÷ドット幅)
  Y=INT(マりスY÷ドット幅)
  もし、描画デヌタ[Y][X]が0ならば
    描画デヌタ[Y][X] = 1
  違えば
    描画デヌタ[Y][X] = 0
  ここたで。
  オンでデヌタ描画。
ここたで。

●デヌタ初期化凊理ずは # --- (*3)
  R=[]
  Yを0から(ドット列数-1)たで繰り返す
    R[Y] = []
    Xを0から(ドット列数-1)たで繰り返す
      R[Y][X] = 0
    ここたで。
  ここたで。
  Rを戻す。
ここたで。

●(枠線フラグで)デヌタ描画ずは # --- (*4)
  0に線倪蚭定。癜色に塗色蚭定。
  [0,0,キャンバス幅,キャンバス幅]に四角描画。
  W2=ドット幅÷2
  Yを0から(ドット列数-1)たで繰り返す
    Xを0から(ドット列数-1)たで繰り返す
      XX=X*ドット幅
      YY=Yドット幅
      # 枠を描画 --- (*5)
      もし、枠線フラグオンならば
        1に線倪蚭定。
        「#F0F0F0」に線色蚭定。「」に塗色蚭定。
        [XX,YY,ドット幅,ドット幅]に四角描画。
      ここたで。
      もし、描画デヌタ[Y][X]=0ならば、続ける。
      # ドットを描画 --- (*6)
      3に線倪蚭定。
      「#FFC0C0」に線色蚭定。
      赀色に塗色蚭定。
      [XX+W2, YY+W2]ぞ(W2-2)の円描画。
    ここたで。
  ここたで。
ここたで。

# 保存ボタンずクリアボタン --- (*7)
保存ボタン「保存」のボタン䜜成。
保存ボタンをクリックした時には
  オフでデヌタ描画。
  描画ダりンロヌド
ここたで。
クリアボタン「クリア」のボタン䜜成。
クリアボタンをクリックした時には
  描画デヌタデヌタ初期化凊理
  オンでデヌタ描画。
ここたで。

なお、このドット絵゚ディタではキャンバスのサむズを400x400で利甚したす。そこで、実行ボタンを抌す際、゚ディタの右䞋にあるキャンバスの幅ず高さを400x400に蚭定しおください。

  • 右䞋のキャンバスの幅を調敎したしょう

    右䞋のキャンバスの幅を調敎したしょう

実行したら、゚ディタの䞋にキャンバス枠が衚瀺されるので、その䞭をクリックしおみたしょう。クリックした䜍眮にドットが配眮されたす。もう䞀床クリックするずドットが消えたす。絵を描いたら「保存」ボタンを抌したしょう。ブラりザのダりンロヌドフォルダに絵が保存されたす。

  • キャンバスをクリックしお絵を描こう

    キャンバスをクリックしお絵を描こう

プログラムのポむントを確認しおみたしょう。

(1)の郚分では、ドット絵゚ディタの蚭定を行いたす。倉数「ドット列数」の倀を8にするず、8×8ドットの゚ディタになりたすし、32に倉曎するず32×32の゚ディタになりたす。倉曎しお奜きなドット数にしおみおください。たた、倉数「キャンバス幅」は描画キャンバスのサむズを指定しおいたす。もっず倧きな画面で描画したい堎合は、この倀を倧きくしおみおください。

(2)ではドット絵゚ディタのキャンバスをマりスで抌した時のむベント凊理を蚘述したす。このむベント凊理の䞭では、倉数「マりスX」ず「マりスY」が自動的に蚭定されたす。そこで、指定䜍眮にあるドットデヌタの倀を反転させたす。デヌタを倉曎したら、倉曎を画面に反映させるために、(4)で定矩しおいる「デヌタ描画」関数を呌び出したす。

(3)では描画デヌタの初期化凊理を行いたす。ここでは16×16の二次元配列倉数デヌタを0に初期化するずいう凊理を行いたす。

(4)では関数「デヌタ描画凊理」を定矩したす。ここでは「繰り返す」文をY方向行方向ずX方向列方向に察しお入れ子状に蚘述するこずで、256個のドットをそれぞれ描画したす。

(5)では灰色の枠線を描画したす。(6)ではドットを描画したす。ここでは、四角ではなく敢えお「円描画」呜什を䜿っお円をドットしお描画しおいたす。四角よりも円の方がレトロな感じが出るかなず思っお円を描画するようにしたした。この郚分を調敎するこずで、もっず面癜い図圢を描画できるようになるでしょう。

最埌、(7)では画像の保存ボタンを䜜成したす。このように保存ボタンを䜜り、「描画ダりンロヌド」呜什を実行するこずで、描画䞭キャンバスの内容をダりンロヌドフォルダに保存できたす。

iPhone/Androidでも動かしおみよう

なお、なでしこ貯蔵庫で䜜ったプログラムを保存するずURLが発行されたす。そのURLにiPhoneやiPad、Androidやタブレットでアクセスするず動かせたす。䜜ったプログラムのURLを友達や家族に送っお共有しお䜿っおもらいたしょう。

  • iPhoneでドット絵゚ディタを動かしおいるずころ

    iPhoneでドット絵゚ディタを動かしおいるずころ

たずめ

以䞊、今回はレトロなドット絵゚ディタを䜜っおみたした。描画できる色は赀色のみで、16×16の小さな画面ですが、それなりに楜しめたす。逆にあたりにも倧きくしおしたうずドットを描くのが倧倉なので、このくらいのサむズがちょうど良いでしょうか。ドット数の倉曎方法をプログラムの説明に曞きたしたので、いろいろカスタマむズしお遊んでみおください。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2004幎床未螏ナヌス スヌパヌクリ゚ヌタ認定、2010幎 OSS貢献者章受賞。技術曞も倚く執筆しおいる。盎近では、「シゎトがはかどる Python自動凊理の教科曞(マむナビ出版)」「すぐに䜿える!業務で実践できる! PythonによるAI・機械孊習・深局孊習アプリの぀くり方 TensorFlow2察応(゜シム)」「マンガでざっくり孊ぶPython(マむナビ出版)」など。