MiyakoというRubyのゲーム作成用フレームワークを、最近友人と勉強している。書籍がマイコミから出ており、それを見ながら二人であれこれとコードを打ち込んでいる。Miyakoはかなり敷居を低くしてくれているので、なかなか面白い。
以下はストップウォッチを作ってみたもの。スペースキーを押すと針が動き始め、もう一度押すと針が止まって計測した時間が表示される。
まあはっきり言って地味なのだが、まだ始めたばかりということでご容赦を。そして、上のプログラムのソースが、以下のものである。
require 'miyako'
include Miyako
include Math
# 60秒の制限時間を実現するWaitCounterクラス。こんなのがいっぱい笑
timer = WaitCounter.new(60)
f = Font.sans_serif
s = "push SPACE key to start"
# 基本的に以下のmain_loopを回し続ける。
Miyako.main_loop do
# ESCキーなどを押すと終了する
break if Input.quit_or_escape?
# スペースキーが押されたら・・・
if Input.pushed_any?(:spc)
# タイマーが動いているなら止める
if timer.executing?
timer.stop
s = ((60000 - timer.remain) / 1000.0).to_s + " seconds"
# さもなくばスタートさせる
else
timer.start
s = "measuring..."
end
end
# 残り時間が60000->0のときdは0->2PI
d = 2 * PI * (60000 - timer.remain) / 60000.0
# メインの針を描画する
Drawing.line(Screen, [320, 180, 120 * sin(d), -120 * cos(d)], [255, 0, 0])
# 秒目盛りを描画する
for i in 1..60
d = 2 * PI * i / 60
Drawing.line(Screen, [320 + (110 * sin(d)), 180 + (110 * cos(d)),
10 * sin(d), 10 * cos(d)], [0, 0, 255])
end
# 5秒おきの目盛りを描画する
for i in 1..12
d = 2 * PI * i / 12
Drawing.line(Screen, [320 + (110 * sin(d)), 180 + (110 * cos(d)),
10 * sin(d), 10 * cos(d)], [0, 255, 0])
end
# タイマーの外周の円を描画する
Drawing.circle(Screen, [320, 180], 120, [0, 0, 255])
# 文字列を描画する
f.draw_text(Screen, s, 240, 400)
end
Miyako自体も面白いが、気心知れた友人といっしょにワイワイ作るのが楽しい。日曜プログラマーとしてはかなり充実できた。みなさんも気が向いたら声かけて下さいな。