【四川省への道】第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 |