連載
» 2012年09月05日 10時40分 公開

プチコンで始めるBASIC新世代育成“虎の穴”(5):厳しいこと言わないで、ノリだけでプログラミングもたまにはイイジャマイカ (3/4)

[スマイルブーム マイコン部,@IT MONOist]

勝敗判定、そして完成……からの改良版へ

 ここでちょっとした豆知識。低年齢層をターゲットにした日本製ホビーコンピュータ『ぴゅう太』(1982年発売)は、命令が全てカタカナという独自の「G-BASIC」、通称「日本語BASIC」を搭載していたことで(一部の世代には)有名です。

 このG-BASICでは、先ほどの「FOR I=0 TO 5 STEP 1 〜 NEXT」も「マワレ I=0 カラ 5 カンカク 1 〜 トジル」と書いたものですが、これが英語になじみのない低年齢層に分かりやすかったのか、それともかえってややこしかったのかは永遠の謎です……。ただ、その後継機『ぴゅう太-mkII』で英語BASICに先祖返りしていたことを考えると、その謎の答えが何となく分かる気がします。

 まぁ、それはそれとして、「相手の手を出す」プログラムに進みましょう。

 「ランスウ(3)」……もとい、「RND(3)」で0〜2までのランダムな整数が得られるのは、現代の目でも分かりやすいはず。どちらかと言えば、現代に合わせた仕様とすら言えます。

    ENM=RND(3)
    PRINT"アナタ=";MSG$(ME)
    PRINT"COM=";MSG$(ENM)

ハカセ(涙)

そうなんじゃよ……。昔のBASICでは、乱数の出目が少数点以下まで含むのでイチイチ整数化したり、実行するたびに結果が一定になるので時刻の値に関連付けて散らしたり、面倒の多いものじゃった。良い世の中になったと、ワシは言い切る!


インテリ

昔の苦労話は、あんまりボクらにはピンときませんが……。

この際、先に進めましょう。


ハカセ(涙)

お、おぉ……。


ワンパク

えーと。最後は、勝敗の判定か?


    RSLT=(ME-ENM+3)%3
    PRINT MSG$(RSLT+3)
    IF RSLT THEN END ELSE GOTO @GAME

ハカセ

ふむ。ココは定番のじゃんけんの判定方法じゃな。こういうところは今も昔も変わらんわい。


インテリ

グー・チョキ・パーを0〜2の数字に割り当てたとき、『自分の手 − 相手の手 + 3』の答えを『3』で割って、余った数が『0』ならば“あいこ(引き分け)”、『1』ならば相手の勝ち、2ならば自分の勝ち、という計算ですね。


ハカセ

うむ。後は対応した結果を表示して、“あいこ”でない限りプログラムを終了、さもなくばラベル『@GAME』に戻すというわけじゃな。『END』や『ELSE』は文字通りで諸君もすぐ分かるところじゃろう。


「じゃんけんプログラム」のQRコード 「じゃんけんプログラム」のQRコード

ワンパク

これで『じゃんけんプログラム』の完成ってワケか。試しに遊んでみるゼ。それ『RUN』!


じゃんけんプログラム 画像2 こんなプレイ画面になります
神崎

入力は[数字]キーと[ENTER]キーなんだね。あんまり分かりやすくはないかなあ。


ハカセ

ウーム。『INPUT』命令とはこういうものじゃが……。とはいえ、GUIに慣れたキミたち世代には感覚的でないのかもしれんのう。


ワンパク

っつーか、文章的に分かりづれェんだヨ! 『パー:2?』ってナンだ、そのメッセージは! 『2』かどうか自信がねェーのかヨ!


ハカセ(涙)

じゃって、『INPUT』命令には、最後にかならず『?』が付いて“入力待ち”を示すものなのじゃよ……。


インテリ

そこがかえって分かりづらいところではありますね。どうせ数字1ケタなのだから、キータッチだけで入力と見なしていいのでは?


ハカセ

ムムム。ならば『INPUT』命令から離れて、キータッチ待ちのループを作るとするかのう。


    CLS:CLEAR
    DIM MSG$(6)
    DATA グー,チョキ,パー,アイコ,マケ,カチ
    FOR I=0 TO 5
     READ MSG$(I)
    NEXT
    @GAME
    PRINT"グ-:0,チョキ:1,パ-:2"
    @KEY
    K$=INKEY$()
    IF K$=="0" THEN ME=0:GOTO @RESULT
    IF K$=="1" THEN ME=1:GOTO @RESULT
    IF K$=="2" THEN ME=2:GOTO @RESULT
    GOTO @KEY
    @RESULT
    ENM=RND(3)
    PRINT"アナタ=";MSG$(ME)
    PRINT"COM=";MSG$(ENM)
    RSLT=(ME-ENM+3)%3
    PRINT MSG$(RSLT+3)
    IF RSLT THEN END ELSE GOTO @GAME
ソースコード 入力部分を見直した「じゃんけんプログラム」

入力部分を見直した「じゃんけんプログラム」のQRコード 入力部分を見直した「じゃんけんプログラム」のQRコード

ハカセ

『INKEY$()』は、キータッチ判定の関数じゃな。ラベル『@KEY』の中でキータッチがあるまでループし続けとるのが分かるじゃろう。


ワンパク

操作感は確かに良くなったゼ!

ただ、ソースコード内に似たような『IF』文の記述が3連続するのは、チョット安易じゃねェーかと思うけどナ!


インテリ

ハイ。学校の課題や仕事であれば、減点は免れませんね。


ハカセ(涙)

キ、キミたち。

そういうところの厳しさまでも現代流じゃのう……(ぐすん)。



Copyright © ITmedia, Inc. All Rights Reserved.