1. はじめに
@iigura氏のtiny basicで動くビン取りゲームを作りました。
このビン取りゲームは、シャープのポケコンに入っていたゲームを参考にしています。ルールが単純だったという記憶ぐらいしかないのですが、1本から3本をお互い取っていき、最後の1本を取った人が負け、というルールだったような気がします。
tiny basicには丁度良いと思い作ってみました。
2. プログラム
次のプログラムをbintori.bas
などの名前で保存します。
10 print "BIN TORI GE-MU"
20 input "move first? yes:1/no:0 :", f
30 if f>1 then goto 20
40 r=21
50 p=0
60 c=f
70 gosub 200
80 if p=c then gosub 300
90 if p=(1-c) then gosub 400
100 goto 80
200 print "remaining :"
210 print r
220 return
300 if r<3 then n=r
310 if r>2 then n=(r%3)+1
320 print "I want ..."
330 print n
340 r=r-n
350 if r<1 then goto 500
360 p=1-p
370 gosub 200
380 return
400 input "next 1--3 : ",n
410 if n>3 then goto 400
420 if n<1 then goto 400
430 if r<n then goto 400
440 r=r-n
450 if r<1 then goto 600
460 p=1-p
470 gosub 200
480 return
500 print "-- you win ^o^/ --"
510 end
600 print " you lose ;_; "
610 end
次のように実行します。
tinybasic bintori.bas
始めに先手後手を選びます。先手なら1、後手ならば0を入力します。
あとは、残っている瓶の数を参考に、自分が取る本数を1から3入力します。
最後の1本を取った方が負けです。
3. 説明
作りにあたり、次のようなルーチンを考えました。
- オープニングと先手後手の決定
- 残りの瓶の数を表示
- 瓶を取る
- 瓶が0になったら終わり
- 2に戻る
上記1が行番10から60です。変数の説明です。
-
f
:先手後手で、人間が先手ならば 1 -
r
:残りの瓶数 -
p
:現在の手番、先手なら 0 後手なら 1 -
c
:CPUは先手か後手か。先手なら 0
上記2は、行番200です。始めは行番70で行いますが、その後は各々のルーチンから200番を呼び出します。
上記3は、CPU側は行番300、人間は行番400で、それぞれのルーチンで上記4を判定しています。
-
n
:次に取る瓶数で1から3です
あと勝ち負け表示は、行番500が人間勝ち 行番600が人間負け です。
人間が最後の1本を取ったら負け表示にジャンプし、CPUが最後の1本を取ったら人間勝ち表示にジャンプします。
肝心のCPUのルーチンは作り込んでません。たしか、シンプルな計算で強い手が打てたと記憶しています。
4. おわりに、雑感
tiny BASICは、ごく基本的な命令だけを用意したインタープリタです。そして、そのインタープリタを350行にまとめるというのも面白い試みだと思いました。
tiny BASICが持つ命令は、文字入出力、演算、条件分岐、ジャンプぐらいですが、それだけでも色々な事ができます。
私がtiny BASICで何を作ろうかな?と考えた際に思い出したのはポケコンでした。ポケコンは、今のスマートフォンよりも少し大きいもので、1~2行程度の液晶画面と小さいキーボードが付いていて、プログラムが作成実行できるデバイスです。
私が学生の頃は3万円程度する高級品だったのですが、とても万能な存在で、今でいう通信機能の無いスマホのような存在でした。私が学生の頃、兄から小さいポケコンを貰い、色々なプログラムを作った記憶があります。その後、もう少し大きいポケコンが欲しくて、家庭教師のバイトをして購入しました。今でいうところのスマホをバイトして買い換える学生のような感じだと思います。私がプログラムに初めて触れたのはファミリーベーシックでした。それ以来、ファミリーベーシックのプログラムが掲載されているベーマガを毎月購入しては、ファミリーベーシック以外のプログラムを読んで頭の中で処理を想像していました。いわゆる「ナイコン族」的な活動です。BASICは、基本的な命令で構成されていて理解しやすいため、それができたのだろうと思います。
そして、今回のものも、ほんの数分で作ることができる点もBASICの良いところだろうと思います。
しかし、他の言語を知っていると「この部分はBASICだと冗長だなぁ、別ので書いた方が楽できる」と思う部分もあります。この感情から、プログラミングというのは、人間が楽をするためのものであるという基本的な目的を思い出します。それでも、たまにはダラダラと書いてみるというのも楽しいと思います。
ということで、業務としてのプログラミングをして疲れた時は、楽しむプログラミングをしてみるのも1つかなと思います。