ページ 11

ぷよぷよのおじゃまぷよ、相殺について

投稿記事Posted: 2017年10月08日(日) 20:43
by white
現在、C# + XNAにて、ぷよぷよを真似て作っています。
ゲームシステムは、ぷよぷよ通を真似ています。
自分はまだまだ、プログラミングに関しては初心者なので
いろいろなサイトを参考にしながら、
ぷよの出現、操作、連鎖、実際のスコアとほぼ同等のスコアの計算
(=連鎖した時の一時的なスコアも計算できています)
おじゃまぷよがあったらそれを落とす処理
まではできました。あとは、対人戦に対応させようと思って
1, 2Pまでの処理を書いているのですが

おじゃまぷよの相殺?の計算の考え方がよくわかりません。
自分は
計算用おじゃま変数P1, P2(それぞれ発生させた数)
確定用おじゃま変数P1, P2(それぞれ降らせる数)
を作っています。

また計算用おじゃま変数P1, P2には、連鎖が終わった時に、発生したおじゃまぷよ数を入れています。

確定用おじゃま変数は、例えばP1で考えると、計算用おじゃま変数p2がp1より大きい場合に
確定用おじゃま変数P1 = 計算用おじゃま変数P2 - 計算用おじゃま変数P1としています。


どうように、確定用おじゃま変数P2もそうしているのですが、うまく相殺ができません。
もしくは、この4つの変数だけじゃ足りないのでしょうか…。


説明下手ですいません。必要であればソースコードもあげます。
(ただ、少し長いので、どこらへんをあげればいいのか教えてもらえるとうれしいです…。)

Re: ぷよぷよのおじゃまぷよ、相殺について

投稿記事Posted: 2017年10月09日(月) 16:02
by white
すいません自己解決いたしました。

方法としては、3つの変数を用意して、あとは自分に降りそうか、降らなそうかで場合分けをし
降りそうであれば、相殺する(もし余ったら相手に送る)、降らなそうであれば、そのまま相手に送る感じにしました。


コード[C#]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 private int sendOjamaNum;  //相手に送るおじゃまぷよ数
 private int t_OjamaNum;    //自分に降ってくるおじゃまぷよ数(未確定)
 private int ojamaNum;      //自分に降ってくるおじゃまぷよ数(確定)
 
 //確定おじゃまぷよ数計算
        public void CalculateOjamaNum()
        {
            //もし自分におじゃまぷよが降りそうなら
            if(t_OjamaNum > 0)
            {
                //相殺
                t_OjamaNum -= sendOjamaNum;
 
                //相殺して、自分に降る数がマイナスになったら
                if(t_OjamaNum < 0)
                {
                    //相手におじゃまぷよをあげる
                    enemy.t_OjamaNum += -t_OjamaNum;
                    t_OjamaNum = 0;
                }
            }
            //自分におじゃまぷよが降りそうでなければ
            else
            {
                //そのままおじゃまぷよを送る
                enemy.t_OjamaNum += sendOjamaNum;
            }
 
            //送ったおじゃまぷよ数の初期化
            sendOjamaNum = 0;
 
            //自分に降る確定おじゃまぷよ数を設定
            ojamaNum = t_OjamaNum;
 
            //未確定のおじゃまぷよ数を初期化
            t_OjamaNum = 0;
        }