game.loading do |loader|
loader.add :window, :system => "window"
loader.add :gui_item, :system => "gui_item"
end
game.on_init do
set_window_image :window
set_gui_image :gui_item
scene_change :start_scene
end
scene :start_scene do |scene|
# 文字列のサンプル
string_samples
# 配列のサンプル
array_samples
# ハッシュ(テーブル)のサンプル
hash_samples
# 時刻系のサンプル
time_samples
# その他のサンプル
other_samples
speak("サンプルを終了します")
game.change_project "start_menu"
end
# 文字列のサンプル
def string_samples
speak("文字列関連の動作サンプル")
# 文字列の生成
str = "abcde"
speak("文字列の生成: " + str)
# 文字列に変数を埋め込む
i = 5
speak("文字列の生成: #{i}")
# 文字列の比較(==)
speak("文字列の比較(==): #{"string" == "string"}")
# 整数に変換(to_i)
speak("整数に変換(to_i): #{"4".to_i}")
# 浮動小数点数に変換(to_f)
speak("浮動小数点数に変換(to_f): #{"1.1".to_f}")
# 配列にする(split)
speak("配列にする(split): #{"a-b-c".split("-")}")
# 文字列を一つだけ置換する(sub)
speak("文字列を置換する(sub): #{"abade".sub("a", "f")}")
# 全ての文字列を置換する(gsub)
speak("文字列を置換する(sub): #{"abade".gsub("a", "f")}")
# 文字列を逆転させる(reverse)
speak("文字列を逆転させる(reverse): #{"abcde".reverse}")
# 文字列を検索して位置を返す(index)
speak("文字列を検索して位置を返す(index): #{"abcde".index("c")}")
end
# 配列のサンプル
def array_samples
speak("配列(Array)関連の動作サンプル")
# 配列の作成
arr = [1, 2, 3]
# 文字列に変換する(to_s)
arr = [1, 2, 3]
speak("文字列に変換する(to_s): " + arr.to_s)
# 要素にアクセスする([])
arr = [1, 2, 3]
speak("最初の要素にアクセス([]): #{arr[0]}")
# 最後尾の要素を抜き出して、配列からは削除する(pop)
arr = [1, 2, 3]
last_value = arr.pop
speak("最後尾の要素を抜き出して、配列からは削除する(pop): #{last_value}, arr: #{arr}")
# 要素を配列に追加する(push)
arr = [1, 2, 3]
arr.push(4)
speak("要素を配列に追加する(push): #{arr}")
# 要素を配列に追加する(<<, もう一つの書き方)
arr = [1, 2, 3]
arr << 5
speak("要素を配列に追加する(<<): #{arr}")
# 要素が含まれているかどうかチェックする(include?)
arr = [1, 2, 3]
result = arr.include?(1)
speak("要素が含まれているかどうかチェックする(include?): #{result}")
# 配列が等しいかどうか(==)
arr1 = [1, 2, 3]
arr2 = [1, 2, 3]
speak("配列が等しいかどうか(==, 一致): #{arr1 == arr2}")
arr3 = [1, 2, 3]
arr4 = [1, 2, 4]
speak("配列が等しいかどうか(==, 不一致): #{arr3 == arr4}")
# ループ(each)
arr = [1, 2, 3]
arr.each do |item|
speak("ループ(each): #{item}")
end
# ブロックの戻り値を集めた配列を作る(map)
generated_arr = arr.map do |item|
item * 2
end
speak("ブロックの戻り値を集めた配列を作る(map): #{generated_arr}")
# 配列に含まれている要素を探し出す(find)
arr = [1, 2, 3, 2 ,3]
result = arr.find do |item|
item == 2
end
speak("配列に含まれている要素を探し出す(find): #{result}")
# 配列に含まれている要素を全て探し出す(find_all)
arr = [1, 2, 3, 4, 5, 6, 7, 8]
result = arr.find_all do |item|
# 2で割り切れる
item % 2 == 0
end
speak("配列に含まれている要素を全て探し出す(find_all): #{result}")
# 配列を並び替える(sort)
arr = [3, 4, 1, 2]
speak("配列を並び替える(sort): #{arr.sort}")
# 逆順ソート(sort)
arr = [3, 4, 1, 2, 5]
sorted_arr = arr.sort do |a, b|
b <=> a
end
speak("逆順ソート(sort): #{sorted_arr}")
end
def hash_samples
speak("ハッシュテーブル関連の動作サンプル")
speak("ハッシュテーブルは、キーと値を関連付けたデータの集合です")
# ハッシュテーブルの生成
# :name, :hpはキー、"rmake", 150は値です。
hash_table = {:name => "rmake", :hp => 150}
speak("ハッシュテーブルの生成: #{hash_table}")
# 値の取得
hash_table = {:name => "rmake", :hp => 150}
speak("値の取得: #{hash_table[:name]}, #{hash_table[:hp]}")
# 値の挿入
hash_table = {}
hash_table[:name] = "CoR"
speak("値の挿入結果: #{hash_table[:name]}")
# 値の代入
hash_table = {:name => "rmake", :hp => 150}
hash_table[:name] = "Code on Rmake"
speak("値の代入結果: #{hash_table[:name]}")
# 削除
hash_table = {:name => "rmake", :hp => 150}
hash_table.delete(:hp)
speak("値の代入結果: #{hash_table}")
# 全要素を探索するループ
hash_table = {:name => "rmake", :hp => 150}
hash_table.each do |key, value|
speak("全要素を探索するループ: #{key}, #{value}")
end
# キーの一覧を返す(keys)
hash_table = {:name => "rmake", :hp => 150}
speak("キーの一覧を返す(keys): #{hash_table.keys}")
# 値の一覧を返す(values)
hash_table = {:name => "rmake", :hp => 150}
speak("値の一覧を返す(keys): #{hash_table.values}")
end
def time_samples
speak("時刻(Time)関連の動作サンプル")
# 現在時刻を取得する(Time.now)
time = Time.now
speak("現在時刻を取得する(Time.now): " + time.to_s)
# 起算時からの経過秒数(to_i)
# 起算時は協定世界時(UTC) 1970年1月1日午前0時
time = Time.now
speak("起算時からの経過秒数(to_i): " + time.to_i.to_s)
# 年, 月, 日, 時間, 分, 秒を取得する
time = Time.now
speak("年を取得する(year): " + time.year.to_s)
speak("月を取得する(month): " + time.month.to_s)
speak("日を取得する(day): " + time.day.to_s)
speak("時間を取得する(hour): " + time.hour.to_s)
speak("分を取得する(min): " + time.min.to_s)
speak("秒を取得する(sec): " + time.sec.to_s)
speak("マイクロ秒を取得する(usec): " + time.usec.to_s)
# 秒数を足す(+)
time = Time.now
added_time = time + 60 # 1分足す
speak("秒数を足す(+): " + time.to_s + ", " + added_time.to_s)
# 時間差を計算する(-)
# 戻り値は秒数(浮動小数点数なので、1秒以下も測れる)
# 処理にかかる時間を計測したりすることができます
time = Time.now
added_time = time + 60 # 1分足す
diff_time = added_time - time
speak("時間差を計算する(-): " + diff_time.to_s)
end
def other_samples
speak("その他のサンプル")
# 乱数(rand)
speak("乱数(rand): #{rand(100)}")
speak("乱数(rand, 0から1までの小数): #{rand()}")
end