現在、C# + XNAにて、ぷよぷよを真似て作っています。
ゲームシステムは、ぷよぷよ通を真似ています。
自分はまだまだ、プログラミングに関しては初心者なので
いろいろなサイトを参考にしながら、
ぷよの出現、操作、連鎖、実際のスコアとほぼ同等のスコアの計算
(=連鎖した時の一時的なスコアも計算できています)
おじゃまぷよがあったらそれを落とす処理
まではできました。あとは、対人戦に対応させようと思って
1, 2Pまでの処理を書いているのですが
おじゃまぷよの相殺?の計算の考え方がよくわかりません。
自分は
計算用おじゃま変数P1, P2(それぞれ発生させた数)
確定用おじゃま変数P1, P2(それぞれ降らせる数)
を作っています。
また計算用おじゃま変数P1, P2には、連鎖が終わった時に、発生したおじゃまぷよ数を入れています。
確定用おじゃま変数は、例えばP1で考えると、計算用おじゃま変数p2がp1より大きい場合に
確定用おじゃま変数P1 = 計算用おじゃま変数P2 - 計算用おじゃま変数P1としています。
どうように、確定用おじゃま変数P2もそうしているのですが、うまく相殺ができません。
もしくは、この4つの変数だけじゃ足りないのでしょうか…。
説明下手ですいません。必要であればソースコードもあげます。
(ただ、少し長いので、どこらへんをあげればいいのか教えてもらえるとうれしいです…。)
ぷよぷよのおじゃまぷよ、相殺について
Re: ぷよぷよのおじゃまぷよ、相殺について
すいません自己解決いたしました。
方法としては、3つの変数を用意して、あとは自分に降りそうか、降らなそうかで場合分けをし
降りそうであれば、相殺する(もし余ったら相手に送る)、降らなそうであれば、そのまま相手に送る感じにしました。
方法としては、3つの変数を用意して、あとは自分に降りそうか、降らなそうかで場合分けをし
降りそうであれば、相殺する(もし余ったら相手に送る)、降らなそうであれば、そのまま相手に送る感じにしました。
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;
}