Gigamix Online

懐かしの8bitおもちゃPC「MSX」を骨までしゃぶり尽くそう。MSXの最新ニュース、ブログ、自作ソフトの配布など。

QRコード化されたゲームの投稿が!

QシャツでMSXのBASICゲームを配りたい野望 は僕自身の勘違いにより勝手に費えた(^_^;わけですが、QRコードによるMSX-BASICプログラムの投稿という意外な反応をいただきましたのでご紹介。

peki-kさん「Qシャツでプログラム」より:

MSX系のblog、GIGAMIXでQRコードをプリントしたQシャツにプログラムを刷り込んでみよう!などという記事があったので、BASICのプログラムが書けるか試してみた。

QRコードは一応サイズ制限があり、513バイトまでしか書き込めない。

暗黙の0初期化とか、マルチステートメントとかを駆使しても、これが限界かなあ。

もっとも、走らせて無いのでバグバグなんじゃないかとは思うのだが。

数当てQRコードさっそく planetary days, さんのWebサイトに転がっているQRコードボーダフォンV601N で認識してみたら…読めた!

QRコードから取り出せたものの…

このプログラムは…任意の4桁の数字を少ないターンで当てる、という「数当てゲーム」ですね。位置も数字も当たっている数はH、位置は違うけど数字が当たっている数はBに代入されるので、それをヒントにする…と解釈してよろしいでしょうか?

以下、QRコードに含まれていたBASICプログラム。

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コードはこちら。

数当てゲーム2