2005-02-01
[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 の柔軟さには勝てない。