プチコンで遊ぼう! (はてなブログ版)

任天堂3DSのプチコンで遊ぼう! [twitter:@eida_s]

はてなダイアリーから移行しました。 はてなダイアリーのURLを開いても自動的にこちらにリダイレクトされますのでご了承ください。

SMILE BASIC 小技(5)

コンソールへのPRINT時に文字列をセンタリング(中央によせて表示すること)したいことは多い。
LOCATEのX位置を決めるには、画面幅(50文字)の半分(25文字)から、表示したい文字列の長さの半分を引けばよい。
毎回計算するのはめんどうなので、次のような記述を使う。

A$="文字列"
LOCATE FLOOR(25-LEN(A$)/2),CSRY
PRINT A$

問題になるのは文字列の長さが奇数になる場合で、2で割り切れないので左半分と右半分のどちらが長くなる。
これは個人の好みでどちらかに寄せるしかない。
私は左半分の方を少しだけ長くなるようにした。
右半分の方を少しだけ長くしたい場合は、上記の2行目を

LOCATE FLOOR(25.5-LEN(A$)/2),CSRY

に変えればよい。(FLOORの中に0.5を足す。)


少し応用して、上下画面、WIDTHのサイズに対応するようにしたのが以下。

A$="文字列"
D%=DISPLAY()
W%=WIDTH()
LOCATE FLOOR((50-D%*10)/S%/2-LEN(A$)/2),CSRY
PRINT A$

なお、XSCREEN 4の時は、上画面が幅50文字から40文字になるが、現状(Ver.3.2.1)ではXSCREENの設定をとる方法がないので、上記はXSCREEN 4に対応していない。
XSCREEN 4の時は、

LOCATE FLOOR(20/S%-LEN(A$)/2),CSRY

とする。