[Ruby]HSP 風 Ruby スクリプトに挑戦
HSP のスクリプトを Ruby っぽく書くことはできないが、その逆はできそうな気がする。どこまでできるだろうか。
以下は HSP の最初のサンプル。ウィンドウを生成して "HSP2TTL.JPG" を読み込んで画像サイズのウィンドウを生成し表示するスクリプト。 stop の部分でプログラムは停止する。
picload "HSP2TTL.JPG"
stop
Ruby でも拡張ライブラリを作れば OK 。
require 'hsp'
picload "HSP2TTL.JPG"
stop
次に出てくるのがこれ。
cls 0
mes "こんにちは、HSPです。"
mes "おしまい"
stop
これも大丈夫。
require 'hsp'
cls 0
mes "こんにちは、HSPです。"
mes "おしまい"
stop
その次に出てくるのがこれ。
;スクリプトに旗を立てよう
*hata1
cls
goto *hata3
*hata2
mes "はーい、こんにちは"
*hata3
mes "旗を立ててみるテストです"
stop
ラベルと goto が登場する。これを Ruby で同じように書く方法は知らない。
Ruby には goto がない。
さらに次。
;ボタンが押された時に、指定したラベルにジャンプさせる
cls
mes "ボタンを押してみてね"
button "PUSH",*hata1
button "BYE",*hata2
stop
*hata1
mes "あっ、押しちゃったね"
stop
*hata2
end
うーむ。 goto がないと無理か。上記のサンプルなら例外で何とか。でもこれじゃダメだ。他の方法は思い浮かばない。
require 'hsp'
cls
mes "ボタンを押してみてね"
begin
button "PUSH", Hata1
button "BYE", Hata2
stop
rescue Hata1
mes "あっ、押しちゃったね"
stop
rescue Hata2
exit
end
やっぱり goto がないと厳しいか。
--
HSP では以下のようにすると数値が自動的に文字列として振舞われる模様。
hen=150
mes "現在の変数henの数値は、"+hen+"です。"
hen=50
mes "現在の変数henの数値は、"+hen+"です。"
stop
これは式展開か to_s でいいか。
require 'hsp'
hen=150
mes "現在の変数henの数値は、#{hen}です。"
hen=50
mes "現在の変数henの数値は、"+hen.to_s+"です。"
stop
if 。
cls
x=100
if x=100 : mes "変数xは100です。"
mes "条件判断終わり"
stop
require 'hsp'
cls
x=100
if x==100 then mes "変数xは100です。" end
mes "条件判断終わり"
stop
これでもいい。
mes "変数xは100です。" if x==100
もう少し長いスクリプト。
;HSP
cls
kai=0
mes "ボタンを押してね"
button "PUSH",*gopush
button "END",*goend
stop
*gopush
kai=kai+1
stop
*goend
if kai > 0 : goto *owari
mes "せめて1回は「PUSH」ボタンを押してよ"
stop
*owari
cls
mes "あなたは、"+kai+"回「PUSH」ボタンを押しましたね"
stop
これも例外で書けそうだが、 goto の柔軟さには勝てない。