【四川省への道】第6話
こんにちは、トラップですぅ。(^o^)/
段々と本格的になってきましたねぇ(^^)
早速、ルールの組み込みにいってみましょう。
◎前準備
現在、X,Y,V,Wの各変数に2つの牌の座標が入っていますが、このまま
扱ったのでは、どちらが左側にあるのか、上側にあるのか・・・など、
全然わかりませんので、次のようにきめます。(^^)
(1) (T1,U1)の座標の牌が左側、(T2,U2)の座標の牌が右側とする。
(2) 上側の牌の Y 座標を UT、下側の牌のY座標を UB とする。
2735 ' X座標の小さい方を(T1,U1)に、大きい方を(T2,U2)にする。
2740 IF XT1 THEN IF G(U2,SX-1)=-1 THEN SX=SX-1:GOTO *L2
垂直ラインでの接続も基本は同様ですが、ややこしいので U1<=U2 の場合と
U1>U2 の場合とで処理をわけてみました(^^)。この場合も EY と SY を求め、
X=V かつ EY=UB-1 であれば、垂直ラインで結べたと判断できますね。(^^)v
以下にリストをあげますので、注釈を参考にして読んでみてくださいね。
2845 ' Y座標の大小で処理をわける。
2850 IF U1>U2 THEN *B1
2860 '
2865 ' U1 <= U2 の場合
2870 EY=U1,SY=U2
2875 ' EY:(T1,U1)の牌が、下の方向にどこまで行けるかを入れる変数
2880 *L3:IF EYU1 THEN IF G(SY-1,T2)=-1 THEN SY=SY-1:GOTO *L4
2930 GOTO *A1
2940 '
2945 ' U1 > U2 の場合
2950 *B1
2960 EY=U2,SY=U1
2965 ' EY:(T2,U2)の牌が、下の方向にどこまで行けるかを入れる変数
2970 *L5:IF EYU2 THEN IF G(SY-1,T1)=-1 THEN SY=SY-1:GOTO *L6
3020 *A1
えと、リスト中で何の断りもなしに *U12, *T12 にジャンプしてますが、
これは、どういった経路で取れたかによって、ちょっと細工したいなと
いうことで分けてみました。(^-^)
なお、実行するには、いつものように前回のリストと今回のリストを
合成することが必要です。下にのせたのも合わせて実行して下さいね。
1 REMサンプル No.5
120 DIM P$(35),Q$(35),C(&8F),G(&9,&13),LX(&3),LY(&3)
510 GOSUB *HANTEI:IF OK=&0 THEN GOSUB *HANTEN2:RETURN
2710 '
2720 *HANTEI
2730 LC=&0:FA=&F
3310 *NGGET:OK=&0:RETURN
3320 *OKGET:OK=-1:RETURN
3330 '
3380 *U12:LX(&0)=T1,LY(&0)=U1,LX(&1)=T1,LY(&1)=U2,LC=&1:GOTO *OKGET
3390 *T12:LX(&0)=T1,LY(&0)=U1,LX(&1)=T2,LY(&1)=U1,LC=&1:GOTO *OKGET
◎今回のサンプルですが・・・
実のところ、今回のサンプルをそのまま用いたのでは、あまり面白く
ありません(^^;)。その理由はですね・・・何の事はない、ほとんどの牌を
取ることができないからです。(ア、イシヲ ナゲナイデ・・・)
それもそのはず、直線で結べるものしか取れない上に、牌がきれいに
並んでいるのですから、これでは隣接した牌しか取れないですよね。
・・・と、ここであきらめちゃいけません。
だって、皆さんの手元にはソースリストがあるじゃないですか。(^^)/
自分のテストしたい配置になるように、配列変数G()の値を工夫して
おけばいいわけです。え?G()の値を -1 にしたらエラーが出るって?
それは好都合(^ー^)、どんなエラーがどこで出たかを調べて、直して
しまいましょう。こうやって、与えられたままではなく、あちこちを
つついてみることで、より理解できるんだって思います。(^o^)/
チャレンジあるのみ!!
☆次回予告
判定処理の基本構造はできたも同然ですね。
次回も引き続き、ゲームルールの組み込みにてお会いしましょう。
【今回のソースお持ち帰り】 SAMPLE5.SRC
|