“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

157.HSPでゲームを作ろう:培養臼Ex その4

ランキング表示を作るときに、ちょっと困ったのが、文字の桁数揃え。
数字の桁なら、strf命令を使えばよいのだけど、文字列には使えない。

そこで考えるのは、昔々のBASIC世代の命令である、LEFT$RIGHT$MID$の御三家w
HSP3はBASIC風なので、同じ命令があるかなぁと思っていたが、MID$に当たる、strmid命令のみだった。

まぁ、strmid命令でもLEFT$RIGHT$と同じ結果となるようにできるので、いいやと思っていた。
でも、いざ使ってみると、ちょっと面倒だった。
strmid命令の書式はこれ。

文字列の一部を取り出す
val = strmid(p1,p2,p3)
 p1=変数名 : 取り出すもとの文字列が格納されている変数名
 p2=-1~ : 取り出し始めのインデックス
 p3=0~ : 取り出す文字数

HSP3ヘルプより

面倒なのは、p1が変数のみというところ。
一時的に桁を揃えたいだけなので、BASICの時はこんな風に書いていた。

'文字を右詰めにして7文字に揃えて表示する
PRINT RIGHT$("       "+S$,7)

S$には0~7文字の文字列が代入されていて、必ず7文字分にしたいので、スペース7文字+S$にした後、右から7文字分だけを取得できる。

そして、strmid命令は、一つ目の引数に変数名しか書けないので、この書き方はエラーになる。
なので、先に変数を用意しておかなくてはならない。

;文字を右詰めにして7文字に揃えて表示する
a="       "+s
mes strmid(a,-1,7)

前置きがだいぶ長くなったが、この変数をいったん介さないと実行できないのが面倒なので、ユーザ関数を定義しました。という話でしたw

#defcfunc leftstr str bas1,int n1
;LEFT$命令相当
 fun_res=""
 fun_ss=bas1
 fun_sslen=strlen(fun_ss)
 fun_num=limit(n1,0,fun_sslen)

 fun_res=strmid(fun_ss,0,fun_num)
 
 return fun_res

#defcfunc rightstr str bas1,int n1
;RIGHT$命令相当
 fun_res=""
 fun_ss=bas1
 fun_sslen=strlen(fun_ss)
 fun_num=limit(n1,0,fun_sslen)

 fun_res=strmid(fun_ss,-1,fun_num)
 
 return fun_res

これを使って、ランキング画面の各項目を綺麗に揃えて表示できましたとさ。