その2

・連鎖が止まらなくなる病
変数の未初期化が原因でした。
でもまだ治ってません。
うーん、他にも変なとこがありそうです。


ぷよが消えないから連鎖は続くんだということで、その辺のコードを見ました。


・検出


bool Puyo::detect()
{
    for(int cy=0; cy<Y_SIZE; ++cy) {
        for(int cx=0; cx<X_SIZE; ++cx) {
            if (exist(cx, cy)!=0 && exist(cx, cy)!=5) {
                find(v, cx, cy, exist(cx, cy));

                // 4つ以上で連鎖よん
                if (v.size()>=4) {
                    // 消したぷよ数
                    v.size();

                    // ぷよ、消える
                    for(int i=0; i<v.size(); ++i) {
                        del(v[i].x, v[i].y);
                        // 周辺にお邪魔ぷよあれば一緒に消える
                        del_if(v[i].x+1, v[i].y, 5);
                        del_if(v[i].x-1, v[i].y, 5);
                        del_if(v[i].x, v[i].y+1, 5);
                        del_if(v[i].x, v[i].y-1, 5);
                    }
                }
            }
        }
    }
}

・描画


void Puyo::draw()
{
    // UN_Y_SIZE以前は見えないので描画しない
    for(int cy=UN_Y_SIZE; cy<Y_SIZE; ++cy) {
        for(int cx=0; cx<X_SIZE; ++cx) {
            switch(exist(cx, cy)) {
            case 0:// 無し
                break;
            case 1:// 赤
                p = &red;
                break;
            case 2:// 緑
                p = &green;
                break;
            case 3:// 青
                p = &blue;
                break;
            case 4:// 黄
                p = &yelow;
                break;
            case 5:// お邪魔
                p = &zero;
                break;
            }

(ごしごし)


for(int cy=UN_Y_SIZE;


実は描画とぷよアニメーションカウンタを一緒に処理してたので、検出と描画でその捜索範囲が違うことが原因なのでした。
画面外で揃ってるぷよはいつまでたっても消されないのに連鎖検出はされるという。・゚・(ノД`)・゚・。


一つの不具合に二つ以上の要員が絡むと複雑になるので、凡ミスはもうやらないとメイドさんに誓ったのでした。