Minecraftとタートルと僕

PCゲームMinecraftのMOD「ComputerCraft」の情報を集めたニッチなブログです。

こちらのページは更新が滞っており、情報が古くなりつつあります。新しいCC情報サイトをはじめましたので、もしよければご参照ください。今後ともよろしくお願い申し上げます。

「百億のマインクラフトと千億のタートル」(https://hevo2.hatenablog.com/)

Paintutils APIを使って図形を描こう

はじめに

前回の説明でターミナル画面に点を描き、線を引き、長方形を描きました。
これらの描画を通して基本的な原理を理解できたと思うので、今回は楽をする方法を紹介しましょう。

Paintutils API

標準で用意されているPaintutils APIは、画像を取り扱い、点を描き、線を引くための便利な関数を用意しています。

ここではその中から以下の2つの関数を簡単に紹介しましょう。

paintutils.drawPixel(X座標, Y座標, 色)

  • ターミナル画面上で、指定した座標に、指定した色で点を描く。
サンプルコード
--座標(2,2)に青色で点を描く
paintitls.drawPixel(2,2,colors.blue)
実行結果
  • f:id:hevohevo:20140208004453p:plain:w450

paintutils.drawLine(始点X座標, 始点Y座標, 終点X座標, 終点Y座標, 色)

  • ターミナル画面上で、始点座標から終点座標まで、指定した色で線を引く。
サンプルコード
-- (2,2)から(11,11)まで青い線を引く
paintutils.drawLine(2,2,11,11, colors.blue)
実行結果
  • f:id:hevohevo:20140208004507p:plain:w450

四角形を描くサンプルプログラム

これらの関数を使って、図形を描いてみます。

四角形(枠)

まずは、四角形の枠だけ描いて中を塗りつぶさないプログラムです。

左上の始点(2,2)から右下の終点(11,11)という青い四角形を描きます。中は塗りつぶしません。
単純に枠となる4本の線を引いているだけです。シンプル。

サンプルコード
-- ### function
function drawFrame(startX, startY, endX, endY, color)
  paintutils.drawLine(startX,startY,endX,startY, color) -- 上の横棒
  paintutils.drawLine(endX,startY,endX,endY, color) -- 右の縦棒
  paintutils.drawLine(startX,startY,startX,endY, color) -- 左の縦棒
  paintutils.drawLine(startX,endY,endX,endY, color) -- 下の横棒
end

-- ### main
drawFrame(2,2,11,11, colors.blue)
実行結果
  • f:id:hevohevo:20140208005153p:plain:w450

四角形(塗りつぶし)

次は中を塗りつぶす場合です。
左上の始点(2,2)から右下の終点(11,11)という青い四角形を描きます。

サンプルコード
-- ### function
function drawRectangle(startX, startY, endX, endY, color)
  for y=startY, endY do
    paintutils.drawLine(startX,y,endX,y, color)
  end
end

-- ### main
drawRectangle(2,2,11,11, colors.blue)

単純に、横線を10本引いているだけです。

実行結果
  • f:id:hevohevo:20140208005208p:plain:w450

drawLine()を使うときの注意

始点と終点を指定するだけで線を引くことができる関数なのですが、一つだけ弱点があります。
それは、斜め線が汚いことです。

これは、ターミナル画面上の画素数が少なく描画が粗いことが原因なので仕方ないのですが、
斜線を引くときは注意しましょう。

まとめ

ターミナル画面で点を描き、線を引く

  • Paintutils APIの、drawPixel()、drawLine() 関数は便利です。
  • ターミナル画面の画素数が少なく粗いために、斜め線はどうしても汚くなりがちです。