QシャツでMSXのBASICゲームを配りたい野望 は僕自身の勘違いにより勝手に費えた(^_^;わけですが、QRコードによるMSX-BASICプログラムの投稿という意外な反応をいただきましたのでご紹介。
peki-kさん「Qシャツでプログラム」より:MSX系のblog、GIGAMIXでQRコードをプリントしたQシャツにプログラムを刷り込んでみよう!などという記事があったので、BASICのプログラムが書けるか試してみた。
QRコードは一応サイズ制限があり、513バイトまでしか書き込めない。
暗黙の0初期化とか、マルチステートメントとかを駆使しても、これが限界かなあ。
もっとも、走らせて無いのでバグバグなんじゃないかとは思うのだが。
さっそく planetary days, さんのWebサイトに転がっているQRコードを ボーダフォン の V601N で認識してみたら…読めた!
QRコードから取り出せたものの…
このプログラムは…任意の4桁の数字を少ないターンで当てる、という「数当てゲーム」ですね。位置も数字も当たっている数はH、位置は違うけど数字が当たっている数はBに代入されるので、それをヒントにする…と解釈してよろしいでしょうか?
10 DIM X(4):FOR I=0 TO 3:X(I)=INT(RND(0)*10):NEXT
20 INPUT A$:FOR I=0 TO 4:T=VAL(MID$(A$,I,1)):FOR J=0 TO 4:IF X(J)=T THEN IF I=J THEN H=H+1 ELSE B=B+1
35 NEXT:NEXT:? "H=";H;"; B=";B
40 IF H=4 THEN END ELSE 20
「QR2.ASC」というファイル名で保存。そしてMSX実機で、実行。
run "qr2.asc"
さっそくプログラムをMSX実機で動かしてみますが…Illegal function call in 20。むむ、何やらプログラムにバグがあるようで、解析してみたら…あら大変!(^^;
-
答えの配列変数XはX(4)まで定義しているのに乱数はX(3)までしか代入されていない→X(0)〜X(3)を使うのかX(1)〜X(4)を使うのか!?
乱数の種が0なので乱数がまともに作れない
乱数を初期化しないので、必ず同じ答えになってしまう(現状では必ず4444が答え)
入力された文字列A$をIのループで一文字ずつ判定するものの、Iは0から始まっているのでA$の左から0文字目をMID$で取り出せないからエラーになる
答えの配列変数をJのループでX(0)からX(4)まで5文字判定している
X(4)は乱数が代入されていない(=必ず0)なので、クイズになってない
Jのループで5文字を判定しているのに4文字だけ正解すると終了するようになっている
4文字正解しなかった場合、HとBを初期化せずに入力へ戻るので、ターンを重ねる度に数値は増える一方。ヒントにならない
場合によってはHが4を超えて(しかも減らないので)絶対にクリアできない
ズバリ、このゲーム、少々ヤバいんじゃないでしょうか?(^_^; 僕の解釈でデバッグしたプログラムはこんな感じですが…解釈は合ってますか?
10 A=RND(-TIME):DIM X(4):FOR I=1 TO 4:X(I)=INT(RND(1)*10):NEXT
20 H=0:B=0:INPUT A$:FOR I=1 TO 4:T=VAL(MID$(A$,I,1)):FOR J=1 TO 4:IF X(J)=T THEN IF I=J THEN H=H+1 ELSE B=B+1
30 NEXT:NEXT:? "H=";H;" B=";B:IF H=4 THEN END ELSE 20
で、出来上がったQRコードはこちら。