Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
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 の柔軟さには勝てない。