【四川省への道】第4話
こんにちは、トラップですぅ。(^o^)/
ゲームをプログラムに変える為には、対象を変数などで表現した上で、
ルールを細かく分割して組み込んでいかないといけません。
まずは、画面上の牌をプログラム内でどう表現するか・・から始めて
みましょう。
◎画面上の牌をどう表現するか?(in プログラム)
前回までは、とりあえず表示できればいいという考えで、変数とは
いっても、P$()とQ$()を牌のデータ格納用に使っただけでした。
牌は36種類あるのですから、まずこれはそのまま使えるでしょう。
では、画面のどこに、何の牌があるかを表現するにはどうしたら
良いでしょうか?
四川省では、横18個×縦8個の牌が綺麗に並んでいますから、
これをそのまま変数化するのが簡単そうですね。こういった時は
2次元配列を使うのが吉です。ただ、四川省は牌の一周り外側
まで含んで検索を行うので、その分も考慮して「DIM G(9,19)」と
しておきましょう。(0から始まるから10x20個分ですね)
これで、左から3番目、上から5番目の牌に対応する変数として、
G(5,3)のように表現できますから、この配列変数 G に、対応する
位置にある牌の種類コード(0〜35)を入れてあげれば、どこに何が
あるか手にとるようにわかりますね(^^)v。せっかくだから、もう
1つ決め事!牌がない所には -1 を入れておくことにしましょ。
これで、画面と牌との関連はばっちし。(^o^)b
牌の表示ルーチンも、新しくお色直しなので〜す。
2000 '
2010 *ALLDRAW
2020 WAIT&0
2030 CALL@41,(&0,&12)-(&EE,&A8),&3,&0
2040 FOR J=1 TO 8
2050 FOR I=1 TO 18
2060 XX=I*12-1 : YY=J*16+13+7
2070 GCURSOR(XX,YY) : GPRINT P$(G(J,I));
2080 GCURSOR(XX,YY+8) : GPRINT Q$(G(J,I));
2090 NEXT
2100 NEXT
2110 RETURN
◎並び替え(シャッフル)はどうやって?
さて、大体どんなゲームでも必要になるのが「サイコロ」のように
次が予測できない数・・・乱数です。カードゲームのシャッフルも、
今回の牌の並び替えも、どれもバラバラに並べるのですから、乱数
は必須項目です。
四川省は 0〜35 のコードを持つ牌が4枚ずつあり、減りも増えも
しませんから、一旦 0,0,0,0,1,1,1,1, ・・・ ,35,35,35,35 の様に
全部の牌だけ用意して、それをバラバラに並び変えてやるのが、
簡単でしょう。全て終わったら、それを順番に配列変数 G に入れて
あげれば完了というわけです。(^^)
そこで、並び替えの為に「DIM C(143)」としておき、サブルーチン
「*CINIT」で配列変数 C を初期化し、「*SHUFFLE」で並べ替え、
「*CGSET」で配列変数 C から画面に対応する配列変数 G に入れる
といった構成を取りました。
1750 '
1760 *CINIT
1770 FOR J=&0 TO &11:C(J)=J,C(J+&12)=J,C(J+&24)=J,C(J+&36)=J:NEXT
1780 FOR J=&12 TO &23:C(J+&36)=J,C(J+&48)=J,C(J+&5A)=J,C(J+&6C)=J:NEXT
1790 RETURN
1800 '
1810 *SHUFFLE
1820 FOR I=&0 TO &120:J=RND144-1,K=RND144-1,L=C(J),C(J)=C(K),C(K)=L:NEXT
1830 RETURN
1840 '
1850 *CGSET
1860 K=&0
1870 FOR I=&1 TO &8:FOR J=&1 TO &12:G(I,J)=C(K),K=K+&1:NEXT:NEXT
1880 FOR I=&1 TO &8:G(I,&0)=-1,G(I,&13)=-1:NEXT
1890 FOR I=&0 TO &13:G(&0,I)=-1,G(&9,I)=-1:NEXT
1900 RETURN
◎今日のまとめ
今日は、大幅に変更を加えてみました。単に牌を表示するだけなら
構いませんが、これから先の処理を考えると、こうして少しずつでも
構造を作っていく必要があるという事なんですね。(^^)
なお、いつものように、今日載せたリストだけでは動かせませんので、
上記のリストと、下記のリストを合わせて、前回の「サンプル No.2」に
追加・置換してあげてください。(^-^)/
1 REMサンプル No.3
120 DIM P$(35),Q$(35),C(&8F),G(&9,&13)
130 GOSUB *PINIT
140 GOSUB *CINIT:GOSUB *SHUFFLE:GOSUB *CGSET:GOSUB *ALLDRAW
☆次回予告
ゲームのルールを作り込む外枠は何とかできました。
次回は、ゲームルールのプログラム化にてお会いしましょう。
【今回のソースお持ち帰り】 SAMPLE3.SRC
|