Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2005-01-22

[るびま]入門記事第 4 回 (2)

サンプルプログラム(ビジュアルノベル)のプロトタイプを作成。 each はなくしたい。他にもまだまだ難しいところが残っているので修正が必要。 前回からの流れでスムーズに理解できるようにすることも意識している。

guiutil の中では tk を使っている。

require "guiutil"

def init
  create_screen("game book", 640, 480)
  create_img_button(0, 640-32-16, 320, "exiticon0.gif", "exiticon1.gif")

  start_gui
end

def mainloop(tbl)
  scene = 'opening'
  fonts = []
  while true
    fonts.each{|f| f.delete }
    fonts = []

    scene_data = tbl[scene]
    message = scene_data[0]
    fonts.push create_font(message, 32,32)
    (scene_data.size-1).times{|i|
      idx = i+1
      ch_msg = "#{idx}. #{scene_data[idx][1]}"
      fonts.push create_font_button(idx, ch_msg, 32, 320+i*32)
    }

    exit if scene_data[1] == nil

    input_value = get_button_id.to_i # ここでブロック!
    exit if input_value  == 0

    scene = scene_data[input_value][0]
  end
end


# このテーブル構造の説明(理解)が最大のポイント
Tbl = {
  'opening' => [
    "3本の分かれ道があります。どの道を進みますか。", 
    ['right', "左の道"],
    ['right', "真ん中の道"],
    ['right', "右の道"],
  ],
  'right'   => [
    "しばらく歩き続けると\nもとの場所にもどってしまいました。",
    ['opening', "次へ"],
  ],
}

init
mainloop Tbl

やっぱり、朝ごはんを食べながらさくっとこういうのが書けてしまう Ruby はすごく好きだ。てゆーか、オレってすげー感?

あとは、背景を表示画像できるようにしないと。

font 生成のあたりがまだまだ複雑すぎる。