【遊び方】
1.二人で交互に石を積み上げて、合計100個の石でピラミッドを完成させてください。
2.ただし、一度に積める石は1~7個までです。
3.最後に頂上(100個目)に石を置いた人が勝ちです。
勝負が決まった後のEnterキー待ちで、1か2を入力すると、次はIchigoJamが相手をしてくれます(1:先手、2:後手)。
ラベルを使用しているので、IchigoJam BASIC ver1.2以上が必要です(ver 1.2.3で動作確認済み)
【主な使用変数】
P 現在のプレイヤの石のキャラクタコード
N 1回に積み上げた石の数(1~7個まで)
C 積み上げられる残りの石の合計数(初期値100、0になったら終わり:v1.3で仕様変更)
A 先手の積んだ石の合計
E 先手の石のキャラクタコード
B 後手の積んだ石の合計
F 後手の石のキャラクタコード
[0]~[99] ピラミッド表示用(100個分の各プレイヤの石のキャラクタコードを格納)
O ゲームモード
0:人対人 1:Ichigo(先手)対人 2:人対Neko(後手) 3:Ichigo対Neko
※他のプログラム実行後にこのゲームするときは、CLV:RUN で実行すること
※O=3の時はIchigoJam同士で永久に対戦を続けます(デモ用)
【ざっくりしたプログラム説明】
10~50 初期化と初期画面表示
30~40 先手と後手の石のキャラクタコード設定(#E0以下にすること)
50~ 初期ピラミッドの石のキャラクタコード設定。
頂上はあえて!マーク。
70~90 先手の処理(入力と表示)および勝負判定
100~120 後手の処理および勝負判定
140~190 勝利者の表示と、再ゲーム待ち(ゲームモードの変更)
190行は、本当にこれで動くのか試したかっただけ
200~280 入力サブルーチン:積み上げる石数の入力と判定
230 人間の入力
現在のプレイヤのキャラクタが#E0以下だったら人間と判断(18/8/13ichigov1.2.4b対応に修正)
240~ IchigoJamの入力(計算)
260行のWAIT文は、いかにも考えているふりをするため。
270 入力値判定
1~7の範囲で、合計して100を超えない値であること
280 プレイヤが積んだ石の数だけ、配列[0]-[99]にプレイヤの石のキャラクタコードを代入する
290~450 ピラミッド表示サブルーチン
300~ タイトルとピラミッド本体の表示
330~ 左右の地平線を表示
370~ ピラミッド本体を表示
[0]から[99]のキャラクタコードを下段から上段へ向かって表示
10 'ピラミッド100 V1.3 TOMO(2017/9) 20 CLS:C=100:A=0:B=0 30 E=#1:IF O&1 E=#FF 40 F=#2:IF O&2 F=#EC 50 FOR I=0 TO 99:[I]=#A5:NEXT:[I]=#21:GSB@DSP 60 @MAIN 70 P=E:GSB@INPUT 80 A=A+N:GSB@DSP 90 IF !C GOTO@WIN 100 P=F:GSB@INPUT 110 B=B+N:GSB@DSP 120 IF !C GOTO@WIN 130 GOTO@MAIN 140 @WIN 150 PLAY"GAGA" 160 IF P=E LC0,2 ELSE LC28,2 170 ?"WIN!":LC4,16:?CHR$(P);" ノ カチ!" 180 IF O<>3 LC4,18:INPUT"Enterキー デ モウイチド",O ELSE WAIT600 190 RUN 200 @INPUT 210 IF P=E LC0,20 ELSE LC28,20 220 ?CHR$(#18,P); 230 IF P<#E0 :CLK:INPUT N:GOTO@HANTEI 240 N=C%8 250 IF !N N=RND(7)+1 260 WAIT RND(30)*10:?N 270 @HANTEI:IF N<1 or N>7 or C-N<0 BEEP50:GOTO@INPUT 280 BEEP:FOR I=100-C TO 99-C+N:[I]=P:NEXT:C=C-N:RTN 290 @DSP 300 LC0,1:?CHR$(E,#3A);A 310 LC28,1:?CHR$(F,#3A);B 320 LC3,14:?"メザセ!チョウジョウ(1-7) ノコリ ";C;" コ", 330 FOR X=0 TO 5 340 LC X,12:?CHR$(#91); 350 LC X+25,12:?CHR$(#91) 360 NEXT 370 Z=6:L=24:I=0 380 FOR Y=12 TO 3 STEP -1 390 FOR X=Z TO L 400 LC X,Y:?CHR$([I]); 410 I=I+1 420 NEXT 430 Z=Z+1:L=L-1 440 NEXT 450 RTN
ルールはおなじみのものですけど、こうしてゲームとしてグラフィックが付くと新鮮です。プレイヤーごとにブロックの模様が違うのもいいですね。しかもコメントにプログラムの解説まで書いていただけるとは。ありがとうございます!