福野泰介の一日一創 - create every day

文字列対応の IchigoJam ver 1.2β4 でジャンケンゲーム改良

2016/01/11
#IchigoJam 

24KBの容量カツカツの状態になっていた IchigoJam ver 1.1、なんとか200byte程空けたので、利用者さんからの要望も多く、懸案だった文字列処理を追加しました。

A="ABC" '文字列を変数に代入可能に! A="ABC":?STR$(A) '文字列をPRINTコマンド(別名:?)で表示するコマンド L=LEN("ABC") '文字列の長さを取得するコマンド

MSX-BASICなどで使う、A$など文字列専用の変数ではありません。(RAM4KB、メモリに余裕なし)
その代わり、文字列が入ったメモリ上のアドレスを値として返します。(C言語でいうポインタです)
そのため、下記のようにMID$/RIGHT$/LEFT$的な、あれこれ操作ができます。(STR$の第二パラメータで長さの指定可能)

10 A="ABC" RUN ?STR$(A) ABC ?STR$(A+1) BC ?STR$(A,1) A ?STR$(A+2,1) C

上記、わざわざ10行でAに代入して実行していますが意味があります。 これを行番号を付けないダイレクトモードで動かすと、うまくいきません。 ダイレクトモードでは、入力された行を実行用のメモリにコピーした上で実行しているので、次のコマンド実行時に上書きされてしまい、"ABC"が消えてしまっているわけです。

文字列機能を使って「ぜったい勝てないジャンケン」のジャンケンプログラムを改造してみます。

5 LET[1],"GU","CHOKI","PA" 10 INPUT "JANKEN (1:GU 2:CHOKI 3:PA) ",A 20 B=RND(3)+1 30 ?"YOU:";STR$([A]);" - ME:";STR$([B]) 40 IF A=B ?"AIKO":GOTO 10 50 C=A-B 60 IF C=-1 OR C=2 ?"WON!" 70 IF C=-2 OR C=1 ?"LOST"

5行で配列にグーチョキパーをそれぞれ代入し、30行でSTR$を使って表示しています。


分かりやすくなった「ジャンケンゲーム on IchigoJam」

また、文字列のアドレスであること利用して、このように改造することもできます。

5 T="GU CHOKIPA" 30 ?"YOU:";STR$(T+A*5-5,5);" - ME:";STR$(T+B*5-5,5)

文字列とは、メモリ内に連続して記録された文字の連なりです。コンピューターの中身をイメージしながら、いろいろと数や式をいじってみると掴めてくるかと思います。

心配なのは、文字列を数値化したことで、文字列を指定すべきところに数値を指定してもエラーにならなくなる点がわかりづらくなっていないかという点。 ただ、使いこなせればC言語の鬼門ポインタを理解したも同然、ステップアップが容易になることでしょう。 子どもたちの反応、見てみたいと思います。

ブログの右側にIchigoJamでプログラミングを覚え、JavaScriptでつくったMASAHARU作のスマホゲーム「地中脱出ゲーム」のバナーを貼りました。 他の言語にステップアップしやすい、IchigoJamの活用法、探っていきたいと思います。

IchigoJam ver 1.2 beta 4 は、Facebookグループ「IchigoJam-FAN」にて限定公開中。

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像