void biaoJiWeiZhiZhanYong(int x,int y,int gao,int id){
        for(int h=0;h<gao;h++){
            int cy=y-h;
            if(cy>=1&&cy<PING_MU_GAO-1&&x>=1&&x<PING_MU_KUAN-1)weiZhiZhanYong[cy][x]=id;
        }
    }
    void qingChuWeiZhiZhanYong(int x,int y,int gao){
        for(int h=0;h<gao;h++){
            int cy=y-h;
            if(cy>=1&&cy<PING_MU_GAO-1&&x>=1&&x<PING_MU_KUAN-1)weiZhiZhanYong[cy][x]=0;
        }
    }
    bool jianCeWeiZhiChongTu(int x,int y,int gao,int paiChuId=0){
        for(int h=0;h<gao;h++){
            int cy=y-h;
            if(cy>=1&&cy<PING_MU_GAO-1&&x>=1&&x<PING_MU_KUAN-1)
                if(weiZhiZhanYong[cy][x]!=0&&weiZhiZhanYong[cy][x]!=paiChuId)return true;
        }
        return false;
    }
    void jieJueFangKuaiChongTu(){
        sort(fangKuaiLie.begin(),fangKuaiLie.end(),[](FangKuai& a,FangKuai& b){return a.getWeiZhi().y>b.getWeiZhi().y;});
        bool yiDong=true;
        int maxDieDai=10;
        while(yiDong&&maxDieDai-->0){
            yiDong=false;
            for(size_t i=0;i<fangKuaiLie.size();i++){
                if(!fangKuaiLie[i].shiJiHuo())continue;
                FangKuai& f=fangKuaiLie[i];
                int id=f.getId();
                int x=(int)f.getWeiZhi().x,y=(int)f.getWeiZhi().y,gao=f.getDuiDieGaoDu();
                qingChuWeiZhiZhanYong(x,y,gao);
                if(jianCeWeiZhiChongTu(x,y,gao,id)){
                    bool zhaoDao=false;
                    int ny=y;
                    while(ny<PING_MU_GAO-2&&!zhaoDao){
                        ny++;
                        if(!jianCeWeiZhiChongTu(x,ny,gao,id)){
                            f.sheWeiZhi(ShiLiang2(x,ny));
                            f.sheLuoDi(false);f.sheYingYongWuLi(true);yiDong=true;zhaoDao=true;
                        }
                    }
                    if(!zhaoDao){
                        int lx=x-1;
                        if(lx>=1&&!jianCeWeiZhiChongTu(lx,y,gao,id)){f.sheWeiZhi(ShiLiang2(lx,y));yiDong=true;zhaoDao=true;}
                        else if(!zhaoDao){
                            int rx=x+1;
                            if(rx<PING_MU_KUAN-1&&!jianCeWeiZhiChongTu(rx,y,gao,id)){f.sheWeiZhi(ShiLiang2(rx,y));yiDong=true;zhaoDao=true;}
                        }
                    }
                }
                x=(int)f.getWeiZhi().x;y=(int)f.getWeiZhi().y;
                biaoJiWeiZhiZhanYong(x,y,gao,id);
            }
        }
    }
    void shengChengDuYiGuanQia(GuanQiaShuJu& gq,int bianHao){
        gq.guanQiaBianHao=bianHao;
        const char* mc[]={" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "};
        gq.mingCheng=mc[bianHao-1];
        float nanDu=bianHao/50.0f;gq.nanDu=nanDu;
        int jiChuZhu=1+bianHao/6;
        if(bianHao>30)jiChuZhu+=(bianHao-30)/3;
        gq.xiaoZhuShu=min(max(jiChuZhu,1),15);
        vector<int> keYongXiaoNiao={0};
        if(bianHao>=4)keYongXiaoNiao.push_back(1);
        if(bianHao>=8)keYongXiaoNiao.push_back(2);
        if(bianHao>=12)keYongXiaoNiao.push_back(3);
        if(bianHao>=18)keYongXiaoNiao.push_back(4);
        if(bianHao>=24)keYongXiaoNiao.push_back(5);
        int xiaoNiaoShu=3+bianHao/12;
        xiaoNiaoShu=min(xiaoNiaoShu,8);
        for(int j=0;j<xiaoNiaoShu;j++){
            int idx=(bianHao*13+j*17)%keYongXiaoNiao.size();
            gq.xiaoNiaoLeiXing.push_back(keYongXiaoNiao[idx]);
        }
        int jiChuX=60,jiChuY=DI_MIAN_Y;
        int jiChuGao=1+bianHao/4,jiChuKuan=2+(bianHao%3);
        int yangShi=(bianHao*13)%45;
        gq.fangKuaiShuJu.clear();gq.xiaoZhuWeiZhi.clear();linShiFangKuai.clear();
        if(yangShi<15){
            switch(yangShi){
                case 0:chuangJianJianDanWuZi(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 1:chuangJianTaZhuang(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 2:chuangJianLiangCengJianZhu(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 3:chuangJianBaoLei(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 4:chuangJianJinZiTa(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 5:chuangJianDaLou(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 6:chuangJianQiao(jiChuX-3,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 7:chuangJianFuZaJianZhu(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 8:chuangJianFangYuGong(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 9:chuangJianDuoCengFangYu(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 10:chuangJianDuiChenJianZhu(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 11:chuangJianGaoKongFangYu(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 12:chuangJianMiJiFangYu(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 13:chuangJianGaoDuBuYiJianZhu(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
                case 14:chuangJianZuiZhongFangYu(jiChuX,jiChuY,jiChuGao,jiChuKuan,gq);break;
            }
        }else{
            int idx=yangShi-15;
            const JianZhuMoBan& mb=jianZhuMoBan[idx];
            for(auto& z:mb.zhuZi){
                int dx=z.dx,gao=min(z.gao,jiChuGao);
                if(gao<=0)continue;
                char lx=z.leiXing;
                int x=jiChuX+dx,y=jiChuY;
                tianJiaFangKuai(gq,x,y,lx,gao);
            }
            vector<pair<int,int>> houXuan;
            for(auto& w:mb.xiaoZhuWei)houXuan.emplace_back(jiChuX+w.dx,DI_MIAN_Y+w.dy);
            for(auto& z:mb.zhuZi){
                int dx=z.dx,gao=min(z.gao,jiChuGao);
                if(gao<=0)continue;
                int x=jiChuX+dx,y=DI_MIAN_Y-gao;
                bool chong=false;
                for(auto& p:houXuan)if(p.first==x&&p.second==y){chong=true;break;}
                if(!chong)houXuan.emplace_back(x,y);
            }
            sort(houXuan.begin(),houXuan.end(),[](pair<int,int>& a,pair<int,int>& b){
                if(a.second!=b.second)return a.second<b.second;return a.first<b.first;
            });
            int tianJia=gq.xiaoZhuShu;
            for(auto& p:houXuan)if(tianJia>0)gq.xiaoZhuWeiZhi.push_back(p),tianJia--;
            while(tianJia>0)gq.xiaoZhuWeiZhi.emplace_back(jiChuX,DI_MIAN_Y-1),tianJia--;
        }
        tiaoZhengXiaoZhuWeiZhi(gq,linShiFangKuai);
        gq.fangKuaiShu=gq.fangKuaiShuJu.size();
    }

    bool tianJiaFangKuai(GuanQiaShuJu& gq,int x,int y,char lx,int gao=1){
        gao=max(1,min(gao,9));
        if(!nengFangFangKuai(x,y,gao)){
            if(nengFangFangKuai(x,y+1,gao))y++;
            else return false;
        }
        gq.fangKuaiShuJu.emplace_back(make_pair(x,y),make_pair(lx,gao));
        linShiFangKuai.emplace_back(x,y,lx,gao);
        return true;
    }

    void chuangJianJianDanWuZi(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        int wg=min(3,gao),wk=min(kuan,9);
        for(int i=0;i<wk;i++)tianJiaFangKuai(gq,x+i-wk/2,y,'=',2);
        for(int h=1;h<wg;h++)for(int i=0;i<wk;i++)
            if(i==0||i==wk-1||h==wg-1)tianJiaFangKuai(gq,x+i-wk/2,y-h,'#',1);
        if(wg>1)for(int i=1;i<wk-1;i++)tianJiaFangKuai(gq,x+i-wk/2,y-wg,'T',1);
        int tian=min(2,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        for(int i=0;i<tian;i++)gq.xiaoZhuWeiZhi.emplace_back(x+i*2-1,y-1);
    }
    void chuangJianTaZhuang(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        int tg=min(9,gao),tk=min(kuan,5);
        for(int i=0;i<tk;i++)tianJiaFangKuai(gq,x+i-tk/2,y,'=',3);
        for(int h=1;h<tg;h++)for(int i=0;i<tk;i++){
            char lx=(h%3==0)?'x':'#';
            tianJiaFangKuai(gq,x+i-tk/2,y-h,lx,1);
        }
        if(tg>3)tianJiaFangKuai(gq,x,y-tg,'H',2);
        int tian=min(3,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        for(int i=0;i<tian;i++)gq.xiaoZhuWeiZhi.emplace_back(x,y-1-i*(tg/2));
    }
    void chuangJianLiangCengJianZhu(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        int yc=min(3,gao/2),ec=min(2,max(1,gao-yc)),wk=min(kuan,7);
        for(int i=0;i<wk;i++){char lx=(i==0||i==wk-1)?'=':'#';tianJiaFangKuai(gq,x+i-wk/2,y,lx,2);}
        for(int h=1;h<yc;h++)for(int i=0;i<wk;i+=2)tianJiaFangKuai(gq,x+i-wk/2,y-h,'#',1);
        if(ec>0){
            for(int i=1;i<wk-1;i++)tianJiaFangKuai(gq,x+i-wk/2,y-yc,'=',2);
            for(int h=1;h<ec;h++)for(int i=1;i<wk-1;i+=2)tianJiaFangKuai(gq,x+i-wk/2,y-yc-h,'&',1);
        }
        int tian=min(3,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        gq.xiaoZhuWeiZhi.emplace_back(x,y-1);if(tian>1)gq.xiaoZhuWeiZhi.emplace_back(x+2,y-yc-1);if(tian>2)gq.xiaoZhuWeiZhi.emplace_back(x-2,y-yc-1);
    }
    void chuangJianBaoLei(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        chuangJianTaZhuang(x-4,y,gao,kuan/2,gq);
        chuangJianTaZhuang(x+4,y,gao,kuan/2,gq);
        for(int i=-3;i<=3;i++)if(i!=0){tianJiaFangKuai(gq,x+i,y,'=',3);tianJiaFangKuai(gq,x+i,y-1,'%',1);}
        tianJiaFangKuai(gq,x,y,'#',3);tianJiaFangKuai(gq,x,y-2,'+',1);
        int tian=min(3,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        gq.xiaoZhuWeiZhi.emplace_back(x,y-1);if(tian>1)gq.xiaoZhuWeiZhi.emplace_back(x-4,y-2);if(tian>2)gq.xiaoZhuWeiZhi.emplace_back(x+4,y-2);
    }
    void chuangJianJinZiTa(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        int jg=min(7,gao);
        for(int h=0;h<jg;h++){int w=jg-h;for(int i=0;i<w;i++)tianJiaFangKuai(gq,x+i-w/2,y-h,'%',1);}
        int tian=min(2,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        gq.xiaoZhuWeiZhi.emplace_back(x,y-1);if(tian>1)gq.xiaoZhuWeiZhi.emplace_back(x,y-jg+2);
    }
    void chuangJianDaLou(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        int dg=min(9,gao),wk=min(kuan,5);
        for(int i=0;i<wk;i++)tianJiaFangKuai(gq,x+i-wk/2,y,'=',3);
        for(int h=1;h<dg;h++)for(int i=0;i<wk;i++){
            char lx=(h%4==0)?'x':(h%2==0)?'&':'#';
            tianJiaFangKuai(gq,x+i-wk/2,y-h,lx,1);
        }
        if(dg>5)tianJiaFangKuai(gq,x,y-dg,'H',2);
        int tian=min(3,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        for(int i=0;i<tian;i++)gq.xiaoZhuWeiZhi.emplace_back(x,y-1-i*(dg/2));
    }
    void chuangJianQiao(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        int qg=min(4,gao),cd=kuan+5;
        for(int i=0;i<qg;i++){tianJiaFangKuai(gq,x,y-i,'=',2);tianJiaFangKuai(gq,x+cd,y-i,'=',2);}
        for(int i=0;i<=cd;i++)tianJiaFangKuai(gq,x+i,y-qg,'#',1);
        if(cd>8){tianJiaFangKuai(gq,x+cd/2,y-qg+1,'=',2);tianJiaFangKuai(gq,x+cd/2,y-qg,'#',1);}
        int tian=min(3,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        gq.xiaoZhuWeiZhi.emplace_back(x+cd/2,y-qg-1);if(tian>1)gq.xiaoZhuWeiZhi.emplace_back(x+1,y-1);if(tian>2)gq.xiaoZhuWeiZhi.emplace_back(x+cd-1,y-1);
    }
    void chuangJianFuZaJianZhu(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        chuangJianJianDanWuZi(x,y,gao,kuan,gq);
        chuangJianTaZhuang(x-6,y,gao,kuan/2,gq);
        chuangJianTaZhuang(x+6,y,gao,kuan/2,gq);
    }
    void chuangJianFangYuGong(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        for(int i=-3;i<=3;i++)for(int h=0;h<gao;h++){
            char lx=(h==0)?'=':'%';
            tianJiaFangKuai(gq,x+i*2,y-h,lx,(h==0)?2:1);
        }
        int tian=min(3,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        gq.xiaoZhuWeiZhi.emplace_back(x,y-1);if(tian>1)gq.xiaoZhuWeiZhi.emplace_back(x+2,y-2);if(tian>2)gq.xiaoZhuWeiZhi.emplace_back(x-2,y-2);
    }
    void chuangJianDuoCengFangYu(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        int wc=min(3,gao),nc=min(2,max(1,gao-2));
        for(int i=-4;i<=4;i++)for(int h=0;h<wc;h++){
            char lx=(h==0)?'=':'#';
            tianJiaFangKuai(gq,x+i*2,y-h,lx,(h==0)?2:1);
        }
        for(int i=-2;i<=2;i++)for(int h=0;h<nc;h++)tianJiaFangKuai(gq,x+i*2,y-wc-h,'%',1);
        int tian=min(3,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        gq.xiaoZhuWeiZhi.emplace_back(x,y-wc-1);if(tian>1)gq.xiaoZhuWeiZhi.emplace_back(x+2,y-1);if(tian>2)gq.xiaoZhuWeiZhi.emplace_back(x-2,y-1);
    }
    void chuangJianDuiChenJianZhu(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        for(int i=-2;i<=2;i+=4)for(int h=0;h<gao;h++){
            char lx=(h==0)?'=':'#';
            tianJiaFangKuai(gq,x+i,y-h,lx,(h==0)?2:1);
        }
        for(int i=-1;i<=1;i++)tianJiaFangKuai(gq,x+i,y-gao/2,'#',1);
        if(gao>4)tianJiaFangKuai(gq,x,y-gao,'H',2);
        int tian=min(3,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        gq.xiaoZhuWeiZhi.emplace_back(x,y-gao/2-1);if(tian>1)gq.xiaoZhuWeiZhi.emplace_back(x-2,y-1);if(tian>2)gq.xiaoZhuWeiZhi.emplace_back(x+2,y-1);
    }
    void chuangJianGaoKongFangYu(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        int tg=min(9,gao);
        for(int h=0;h<tg;h++){
            char lx=(h<3)?'=':(h%3==0)?'x':'#';
            tianJiaFangKuai(gq,x,y-h,lx,(h<3)?3:1);
        }
        int tian=min(2,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        gq.xiaoZhuWeiZhi.emplace_back(x,y-tg/2);if(tian>1)gq.xiaoZhuWeiZhi.emplace_back(x,y-tg+1);
    }
    void chuangJianMiJiFangYu(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        for(int i=-3;i<=3;i++)for(int h=0;h<gao;h++){
            char lx=(h==0)?'=':(h<gao/2)?'#':'%';
            tianJiaFangKuai(gq,x+i*2,y-h,lx,(h==0)?2:1);
        }
        int tian=min(5,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        gq.xiaoZhuWeiZhi.emplace_back(x,y-gao/2);if(tian>1)gq.xiaoZhuWeiZhi.emplace_back(x+2,y-1);if(tian>2)gq.xiaoZhuWeiZhi.emplace_back(x-2,y-1);
        if(tian>3)gq.xiaoZhuWeiZhi.emplace_back(x+4,y-gao+1);if(tian>4)gq.xiaoZhuWeiZhi.emplace_back(x-4,y-gao+1);
    }
    void chuangJianGaoDuBuYiJianZhu(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        vector<int> gaoLie,wei={-4,-2,0,2,4};
        for(int i=0;i<5;i++)gaoLie.push_back(max(1,gao-i));
        for(size_t i=0;i<gaoLie.size();i++)for(int h=0;h<gaoLie[i];h++){
            char lx=(h==0)?'=':(h<gaoLie[i]/2)?'#':'&';
            tianJiaFangKuai(gq,x+wei[i],y-h,lx,(h==0)?2:1);
        }
        int tian=min(4,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        gq.xiaoZhuWeiZhi.emplace_back(x,y-1);if(tian>1)gq.xiaoZhuWeiZhi.emplace_back(x+2,y-2);if(tian>2)gq.xiaoZhuWeiZhi.emplace_back(x-2,y-3);
        if(tian>3)gq.xiaoZhuWeiZhi.emplace_back(x+4,y-1);
    }
    void chuangJianZuiZhongFangYu(int x,int y,int gao,int kuan,GuanQiaShuJu& gq){
        chuangJianFangYuGong(x,y,gao,kuan,gq);
        if(gao>=5){chuangJianGaoKongFangYu(x-8,y,gao,kuan/2,gq);chuangJianGaoKongFangYu(x+8,y,gao,kuan/2,gq);}
        int xg=min(gao+3,9);
        for(int h=0;h<xg;h++)tianJiaFangKuai(gq,x,y-h,'x',(h==0)?3:1);
        int tian=min(6,(int)gq.xiaoZhuShu-(int)gq.xiaoZhuWeiZhi.size());
        gq.xiaoZhuWeiZhi.emplace_back(x,y-1);if(tian>1)gq.xiaoZhuWeiZhi.emplace_back(x-8,y-2);if(tian>2)gq.xiaoZhuWeiZhi.emplace_back(x+8,y-2);
        if(tian>3)gq.xiaoZhuWeiZhi.emplace_back(x,y-xg+1);if(tian>4)gq.xiaoZhuWeiZhi.emplace_back(x-3,y-gao/2);if(tian>5)gq.xiaoZhuWeiZhi.emplace_back(x+3,y-gao/2);
    }

    GuanQiaShuJu getGuanQia(int bianHao){
        if(bianHao>0&&bianHao<=static_cast<int>(guanQiaLie.size()))return guanQiaLie[bianHao-1];
        return guanQiaLie[0];
    }
    void sheZhiGuanQia(int bianHao){
        xiaoNiaoLie.clear();xiaoZhuLie.clear();fangKuaiLie.clear();danLie.clear();baoZhaLie.clear();
        GuanQiaShuJu gq=getGuanQia(bianHao);
        dangQianGuanQia=bianHao;
        fenShu=0;lianJi=0;lianJiBeiShu=1.0f;
        for(auto lx:gq.xiaoNiaoLeiXing)xiaoNiaoLie.emplace_back(danGong.getWeiZhi().x,danGong.getWeiZhi().y,lx);
        for(auto& p:gq.xiaoZhuWeiZhi){
            int dj=1;
            if(bianHao>20)dj=2;if(bianHao>40)dj=3;
            int x=p.first,y=p.second;
            if(!jianCeWeiZhiChongTu(x,y,1)){xiaoZhuLie.emplace_back(x,y,dj);biaoJiWeiZhiZhanYong(x,y,1,-2);}
        }
        for(auto& d:gq.fangKuaiShuJu){
            int x=d.first.first,y=d.first.second;
            char lx=d.second.first;int gao=d.second.second;
            qingChuWeiZhiZhanYong(x,y,gao);
            FangKuai fk(x,y,lx,gao);
            if(fk.getWeiZhi().y>=DI_MIAN_Y-0.5f){fk.sheWeiZhi(ShiLiang2(x,DI_MIAN_Y));fk.sheLuoDi(true);fk.sheYingYongWuLi(false);fk.sheWenDing(true);}
            fangKuaiLie.push_back(fk);
            biaoJiWeiZhiZhanYong(x,y,gao,fangKuaiLie.back().getId());
        }
        guanQiaWanCheng=false;
        miaoZhunJiao=45.0f;miaoZhunLiDu=8.0f;
        for(int i=0;i<5;i++){gengXinZhiChengXiTong();xiuFuChanDong();}
    }
    void gengXinZhiChengXiTong(){
        for(size_t i=0;i<fangKuaiLie.size();i++){
            if(!fangKuaiLie[i].shiJiHuo())continue;
            FangKuai& f=fangKuaiLie[i];
            ShiLiang2 w=f.getWeiZhi();
            if(w.y>=DI_MIAN_Y-0.5f){f.sheWeiZhi(ShiLiang2(w.x,DI_MIAN_Y));f.sheLuoDi(true);f.sheYingYongWuLi(false);f.sheWenDing(true);f.sheSuDu(ShiLiang2(0,0));continue;}
            if(f.shiWenDing()){
                bool zc=false;
                for(size_t j=0;j<fangKuaiLie.size();j++){if(i==j||!fangKuaiLie[j].shiJiHuo()||!fangKuaiLie[j].shiWenDing())continue;if(f.jianCeZaiShang(fangKuaiLie[j])){zc=true;break;}}
                if(!zc&&!f.shiDiMian())f.shiQuZhiCheng();continue;
            }
            bool zc=false;
            for(size_t j=0;j<fangKuaiLie.size();j++){if(i==j||!fangKuaiLie[j].shiJiHuo()||!fangKuaiLie[j].shiWenDing())continue;if(f.jianCeZaiShang(fangKuaiLie[j])){
                f.sheWeiZhi(ShiLiang2(w.x,fangKuaiLie[j].getDingBuY()));f.sheLuoDi(true);f.sheYingYongWuLi(false);f.sheWenDing(true);f.sheSuDu(ShiLiang2(0,0));zc=true;break;
            }}
            if(!zc&&!f.yingYongWuLiMa()){f.sheYingYongWuLi(true);f.sheLuoDi(false);f.sheWenDing(false);if(f.getSuDu().moChang()<0.2f)f.sheSuDu(ShiLiang2((rand()%10-5)*0.1f,-0.3f));}
        }
        for(size_t i=0;i<xiaoZhuLie.size();i++){
            if(!xiaoZhuLie[i].shiJiHuo())continue;
            XiaoZhu& z=xiaoZhuLie[i];
            if(z.getShouJiLengQue()>0)continue;
            ShiLiang2 w=z.getWeiZhi();
            if(w.y>=DI_MIAN_Y-0.5f){z.sheWeiZhi(ShiLiang2(w.x,DI_MIAN_Y));z.sheLuoDi(true);z.sheYingYongWuLi(false);z.sheWenDing(true);z.sheSuDu(ShiLiang2(0,0));continue;}
            bool zaiFangKuai=false;
            for(size_t j=0;j<fangKuaiLie.size();j++){if(!fangKuaiLie[j].shiJiHuo()||!fangKuaiLie[j].shiWenDing())continue;
                float dx=w.x-fangKuaiLie[j].getWeiZhi().x,dy=w.y-fangKuaiLie[j].getDingBuY();
                if(fabs(dx)<1.5f&&dy>-0.5f&&dy<1.0f){
                    z.sheWeiZhi(ShiLiang2(w.x,fangKuaiLie[j].getDingBuY()));z.sheLuoDi(true);z.sheYingYongWuLi(false);z.sheWenDing(true);z.sheSuDu(ShiLiang2(0,0));zaiFangKuai=true;break;
                }
            }
            if(!zaiFangKuai&&w.y<DI_MIAN_Y-0.5f){z.sheYingYongWuLi(true);z.sheLuoDi(false);z.sheWenDing(false);}
        }
        for(size_t i=0;i<fangKuaiLie.size();i++){
            if(!fangKuaiLie[i].shiJiHuo()||fangKuaiLie[i].shiWenDing())continue;
            FangKuai& f=fangKuaiLie[i];
            ShiLiang2 w=f.getWeiZhi();
            if(w.y>=DI_MIAN_Y-0.5f||f.getSuDu().moChang()>=0.1f||f.shiLuoDi())continue;
            int sy=(int)w.y;
            for(int cy=sy+1;cy<DI_MIAN_Y;cy++){
                bool zc=false;
                for(size_t j=0;j<fangKuaiLie.size();j++){if(i==j||!fangKuaiLie[j].shiJiHuo()||!fangKuaiLie[j].shiWenDing())continue;
                    if(abs(w.x-fangKuaiLie[j].getWeiZhi().x)<1.2f&&cy==(int)fangKuaiLie[j].getDingBuY()){
                        f.sheWeiZhi(ShiLiang2(w.x,cy));f.sheLuoDi(true);f.sheYingYongWuLi(false);f.sheWenDing(true);f.sheSuDu(ShiLiang2(0,0));zc=true;break;
                    }
                }
                if(zc)break;
                if(cy>=DI_MIAN_Y-1){f.sheWeiZhi(ShiLiang2(w.x,DI_MIAN_Y));f.sheLuoDi(true);f.sheYingYongWuLi(false);f.sheWenDing(true);f.sheSuDu(ShiLiang2(0,0));break;}
            }
        }
        for(size_t i=0;i<xiaoZhuLie.size();i++){
            if(!xiaoZhuLie[i].shiJiHuo()||xiaoZhuLie[i].shiWenDing())continue;
            XiaoZhu& z=xiaoZhuLie[i];
            ShiLiang2 w=z.getWeiZhi();
            if(w.y>=DI_MIAN_Y-0.5f||z.getSuDu().moChang()>=0.1f||z.shiLuoDi())continue;
            int sy=(int)w.y;
            for(int cy=sy+1;cy<DI_MIAN_Y;cy++){
                bool zai=false;
                for(size_t j=0;j<fangKuaiLie.size();j++){if(!fangKuaiLie[j].shiJiHuo()||!fangKuaiLie[j].shiWenDing())continue;
                    if(abs(w.x-fangKuaiLie[j].getWeiZhi().x)<1.2f&&cy==(int)fangKuaiLie[j].getDingBuY()){
                        z.sheWeiZhi(ShiLiang2(w.x,cy));z.sheLuoDi(true);z.sheYingYongWuLi(false);z.sheWenDing(true);z.sheSuDu(ShiLiang2(0,0));zai=true;break;
                    }
                }
                if(zai)break;
                if(cy>=DI_MIAN_Y-1){z.sheWeiZhi(ShiLiang2(w.x,DI_MIAN_Y));z.sheLuoDi(true);z.sheYingYongWuLi(false);z.sheWenDing(true);z.sheSuDu(ShiLiang2(0,0));break;}
            }
        }
    }
    void dangFangKuaiCuiHui(int idx){
        if(idx<0||idx>=static_cast<int>(fangKuaiLie.size()))return;
        FangKuai& f=fangKuaiLie[idx];
        ShiLiang2 w=f.getWeiZhi();
        float dy=f.getDingBuY();
        for(size_t i=0;i<fangKuaiLie.size();i++){
            if(i==(size_t)idx||!fangKuaiLie[i].shiJiHuo())continue;
            ShiLiang2 ow=fangKuaiLie[i].getWeiZhi();
            float dx=ow.x-w.x,od=ow.y-dy;
            if(fabs(dx)<1.5f&&od>-0.5f&&od<2.0f)fangKuaiLie[i].shiQuZhiCheng();
        }
        for(size_t i=0;i<xiaoZhuLie.size();i++){
            if(!xiaoZhuLie[i].shiJiHuo())continue;
            ShiLiang2 zw=xiaoZhuLie[i].getWeiZhi();
            float dx=zw.x-w.x,od=zw.y-dy;
            if(fabs(dx)<1.5f&&od>-0.5f&&od<2.0f){
                xiaoZhuLie[i].sheYingYongWuLi(true);xiaoZhuLie[i].sheLuoDi(false);xiaoZhuLie[i].sheWenDing(false);
                xiaoZhuLie[i].sheSuDu(xiaoZhuLie[i].getSuDu()+ShiLiang2(0,-0.5f));
            }
        }
    }
    void dangFangKuaiBeiJiZhong(int idx,ShiLiang2 li){
        if(idx<0||idx>=static_cast<int>(fangKuaiLie.size()))return;
        FangKuai& f=fangKuaiLie[idx];
        ShiLiang2 w=f.getWeiZhi();
        float dy=f.getDingBuY();
        float mo=li.moChang();
        if(mo>5.0f){
            for(size_t i=0;i<fangKuaiLie.size();i++){
                if(i==(size_t)idx||!fangKuaiLie[i].shiJiHuo())continue;
                ShiLiang2 ow=fangKuaiLie[i].getWeiZhi();
                float dx=ow.x-w.x,od=ow.y-dy;
                if(fabs(dx)<1.5f&&od>-0.5f&&od<2.0f){
                    fangKuaiLie[i].shiQuZhiCheng();
                    fangKuaiLie[i].sheSuDu(fangKuaiLie[i].getSuDu()+li*0.1f);
                }
            }
        }
    }
    void gengXin(){
        if(youXiZhuangTai!=YOU_XI_ZHONG)return;
        gengXinZhiChengXiTong();
        for(auto& f:fangKuaiLie)if(f.shiJiHuo()&&!f.shiWenDing())f.gengXin();
        for(auto& z:xiaoZhuLie)if(z.shiJiHuo()&&!z.shiWenDing())z.gengXin();
        for(size_t i=0;i<danLie.size();i++){
            danLie[i].gengXin();
            if(!danLie[i].shiJiHuo()&&danLie[i].luoDiBaoZha){yingYongBaoZha(danLie[i].getWeiZhi(),3,false);danLie[i].luoDiBaoZha=false;}
            if(!danLie[i].shiJiHuo()){danLie.erase(danLie.begin()+i);i--;}
        }
        xiuFuChanDong();
        gengXinZhiChengXiTong();
        jieJueFangKuaiChongTu();
        if(!xiaoNiaoLie.empty()){
            XiaoNiao& n=xiaoNiaoLie[0];
            n.gengXin();
            if(!n.shiJiHuo()||(n.shiLuoDi()&&n.getSuDu().moChang()<0.3f)){
                if(n.shiJiHuo()&&n.getJiNengLengQue()>0){
                    ShiLiang2 w=n.getWeiZhi();
                    int da=0;
                    switch(n.getLeiXing()){
                        case 0:da=6;break;case 1:da=3;break;case 2:da=4;break;case 3:da=12;break;case 4:da=5;break;case 5:da=4;break;
                    }
                    if(da>0)yingYongBaoZha(w,da,n.getLeiXing()==3);
                    n.sheYongLeJiNeng(true);
                }
                xiaoNiaoLie.erase(xiaoNiaoLie.begin());
                if(!xiaoNiaoLie.empty()){
                    xiaoNiaoLie[0].sheWeiZhi(danGong.getWeiZhi());
                    xiaoNiaoLie[0].sheSuDu(ShiLiang2(0,0));
                    xiaoNiaoLie[0].sheLuoDi(false);
                    xiaoNiaoLie[0].sheYongLeJiNeng(false);
                }else{if(!xiaoZhuLie.empty())youXiZhuangTai=YOU_XI_SHI_BAI;return;}
                lianJi=0;lianJiBeiShu=1.0f;
            }
        }
        jianCePengZhuang();
        for(size_t i=0;i<baoZhaLie.size();){
            baoZhaLie[i].jiShiQi--;
            if(baoZhaLie[i].jiShiQi<=0)baoZhaLie.erase(baoZhaLie.begin()+i);
            else i++;
        }
        if(xiaoZhuLie.empty()){
            guanQiaWanCheng=true;
            int wanCheng=dangQianGuanQia;
            if(dangQianGuanQia<ZUI_DA_GUAN_QIA){dangQianGuanQia++;jieSuoGuanQia(dangQianGuanQia);}
            cunDang.she("current_level",to_string(dangQianGuanQia));
            fenShu+=100*wanCheng+(int)xiaoNiaoLie.size()*50;
            zongFenShu+=fenShu;
            youXiZhuangTai=GUAN_QIA_WAN_CHENG;
            saveCunDang();
        }
    }
    void jianCePengZhuang(){
        if(xiaoNiaoLie.empty())return;
        XiaoNiao& n=xiaoNiaoLie[0];
        if(!n.shiJiHuo()||!n.shiFaShe())return;
        ShiLiang2 nw=n.getWeiZhi(),ns=n.getSuDu();
        float bj=n.getBanJing();
        for(size_t i=0;i<xiaoZhuLie.size();i++){
            if(!xiaoZhuLie[i].shiJiHuo())continue;
            XiaoZhu& z=xiaoZhuLie[i];
            ShiLiang2 zw=z.getWeiZhi();
            float dx=nw.x-zw.x,dy=nw.y-zw.y,ju=dx*dx+dy*dy,minJu=bj+z.getBanJing();
            if(ju<minJu*minJu){
                int sh=12+lianJi*2;
                switch(n.getLeiXing()){
                    case 0:sh=12;break;case 1:sh=10;break;case 2:sh=16;break;case 3:sh=30;break;case 4:sh=14;break;case 5:sh=12;break;
                }
                if(n.getLeiXing()==1&&n.shiYongLeJiNeng())sh=z.getXueLiang();
                z.shouDaoShangHai(sh);
                if(!z.shiJiHuo()){
                    lianJi++;lianJiBeiShu=1.0f+lianJi*0.1f;
                    fenShu+=z.getJiangLi()*lianJiBeiShu;
                    chuangJianBaoZha(z.getWeiZhi());
                    qingChuWeiZhiZhanYong((int)zw.x,(int)zw.y,1);
                }
                ShiLiang2 fx(dx,dy);
                if(ju>0)fx=fx/sqrt(ju);else fx=ShiLiang2(0,1);
                float li=ns.moChang()*0.7f;
                ShiLiang2 chong;
                if(fabs(fx.x)>0.7f){chong.x=fx.x*li*1.0f;chong.y=(fx.y>0?0.6f:-0.3f)*li*0.3f;}
                else if(fx.y<-0.7f){chong.x=fx.x*li*0.3f;chong.y=-li*0.8f;}
                else if(fx.y>0.7f){chong.x=fx.x*li*0.3f;chong.y=li*1.0f;}
                else chong=fx*li*0.8f;
                z.sheSuDu(chong);z.sheYingYongWuLi(true);z.sheLuoDi(false);z.sheWenDing(false);z.sheShouJiLengQue(25);
                ShiLiang2 fan=ns-fx*2.0f*ShiLiang2::dianJi(ns,fx);
                n.sheSuDu(fan*0.7f);
                float chongDie=minJu-sqrt(ju);
                if(chongDie>0){ShiLiang2 fenLi=fx*(chongDie*0.5f);n.sheWeiZhi(nw+fenLi);z.sheWeiZhi(zw-fenLi);}
                break;
            }
        }
        bool peng=true;
        int maxDie=5;
        while(peng&&maxDie-->0){
            peng=false;
            for(size_t i=0;i<fangKuaiLie.size();i++){
                if(!fangKuaiLie[i].shiJiHuo())continue;
                FangKuai& f=fangKuaiLie[i];
                ShiLiang2 fw=f.getWeiZhi();
                float dx=nw.x-fw.x,dy=nw.y-fw.y,ju=sqrt(dx*dx+dy*dy);
                if(ju<bj+f.getBanJing()){
                    peng=true;
                    f.sheWenDing(false);f.sheLuoDi(false);f.sheYingYongWuLi(true);
                    ShiLiang2 fx(dx,dy);
                    if(ju>0)fx=fx/ju;else fx=ShiLiang2(0,1);
                    bool ding=(fx.y<-0.8f&&abs(fx.x)<0.5f);
                    bool ce=(abs(fx.x)>0.7f&&abs(fx.y)<0.5f);
                    float yin=(n.getLeiXing()==3)?1.2f:0.8f;
                    float li=ns.moChang()*yin;
                    ShiLiang2 l=fx*li;
                    f.sheSuDu(f.getSuDu()+l);
                    ShiLiang2 fan;
                    if(ding){fan.x=ns.x*0.3f;fan.y=-ns.y*0.8f;}
                    else if(ce){fan.x=-ns.x*0.5f;fan.y=ns.y*0.5f+0.5f;}
                    else fan=f.pengZhuangFanYing(ns)*0.5f;
                    n.sheSuDu(fan);
                    int jiChuSh=(int)(ns.moChang()*3*(1.0f-f.getWenDingXing()*0.2f));
                    if(n.getLeiXing()==1&&n.shiYongLeJiNeng())jiChuSh*=3;
                    else if(n.getLeiXing()==2)jiChuSh=static_cast<int>(jiChuSh*1.5f);
                    else if(n.getLeiXing()==3)jiChuSh*=2.5f;
                    else if(n.getLeiXing()==0)jiChuSh=static_cast<int>(jiChuSh*1.2f);
                    f.shouDaoShangHai(jiChuSh);
                    int nSh=(int)(ns.moChang()*f.shangHaiXiShu*0.2f);
                    n.shouDaoShangHai(nSh);
                    dangFangKuaiBeiJiZhong(i,l);
                    float chongDie=bj+f.getBanJing()-ju;
                    if(chongDie>0){
                        ShiLiang2 fenLi=fx*(chongDie*0.5f);
                        n.sheWeiZhi(nw+fenLi);
                        f.sheWeiZhi(fw-fenLi);
                        nw=n.getWeiZhi();
                    }
                    if(!f.shiJiHuo()){
                        lianJi++;lianJiBeiShu=1.0f+lianJi*0.1f;
                        fenShu+=f.getJiangLi()*lianJiBeiShu;
                        chuangJianBaoZha(f.getWeiZhi());
                        qingChuWeiZhiZhanYong((int)fw.x,(int)fw.y,f.getDuiDieGaoDu());
                        dangFangKuaiCuiHui(i);
                    }
                    break;
                }
            }
        }
        for(size_t e=0;e<danLie.size();){
            Dan& d=danLie[e];
            if(!d.shiJiHuo()){e++;continue;}
            ShiLiang2 dw=d.getWeiZhi();
            bool ji=false;
            for(auto& z:xiaoZhuLie){
                if(!z.shiJiHuo())continue;
                float dx=dw.x-z.getWeiZhi().x,dy=dw.y-z.getWeiZhi().y,ju=sqrt(dx*dx+dy*dy);
                if(ju<d.getBanJing()+z.getBanJing()){
                    z.shouDaoShangHai(d.getShangHai());
                    if(!z.shiJiHuo()){lianJi++;lianJiBeiShu=1.0f+lianJi*0.1f;fenShu+=z.getJiangLi()*lianJiBeiShu;chuangJianBaoZha(z.getWeiZhi());}
                    d.sheJiHuo(false);ji=true;break;
                }
            }
            if(ji){e++;continue;}
            for(auto& f:fangKuaiLie){
                if(!f.shiJiHuo())continue;
                float dx=dw.x-f.getWeiZhi().x,dy=dw.y-f.getWeiZhi().y,ju=sqrt(dx*dx+dy*dy);
                if(ju<d.getBanJing()+f.getBanJing()){
                    f.shouDaoShangHai(d.getShangHai());
                    if(!f.shiJiHuo()){lianJi++;lianJiBeiShu=1.0f+lianJi*0.1f;fenShu+=f.getJiangLi()*lianJiBeiShu;chuangJianBaoZha(f.getWeiZhi());}
                    d.sheJiHuo(false);ji=true;break;
                }
            }
            if(ji){e++;continue;}e++;
        }
        for(size_t i=0;i<xiaoZhuLie.size();)if(!xiaoZhuLie[i].shiJiHuo())xiaoZhuLie.erase(xiaoZhuLie.begin()+i);else i++;
        for(size_t i=0;i<fangKuaiLie.size();)if(!fangKuaiLie[i].shiJiHuo())fangKuaiLie.erase(fangKuaiLie.begin()+i);else i++;
    }
    void xiuFuChanDong(){
        static map<int,int> fangKuaiJingZhi;
        for(auto& f:fangKuaiLie){
            if(!f.shiJiHuo()||!f.yingYongWuLiMa()||f.getSuDu().moChang()>=0.1f){fangKuaiJingZhi[f.getId()]=0;continue;}
            fangKuaiJingZhi[f.getId()]=(fangKuaiJingZhi[f.getId()]+1)%30;
            if(fangKuaiJingZhi[f.getId()]>20){
                f.sheSuDu(ShiLiang2(0,0));f.sheYingYongWuLi(false);f.sheWenDing(true);
                if(f.getWeiZhi().y>=DI_MIAN_Y-0.5f){f.sheWeiZhi(ShiLiang2(f.getWeiZhi().x,DI_MIAN_Y));f.sheLuoDi(true);}
            }
        }
        static map<int,int> xiaoZhuJingZhi;
        for(auto& z:xiaoZhuLie){
            if(!z.shiJiHuo()||z.getShouJiLengQue()>0||!z.yingYongWuLiMa()||z.getSuDu().moChang()>=0.1f){xiaoZhuJingZhi[z.getId()]=0;continue;}
            xiaoZhuJingZhi[z.getId()]=(xiaoZhuJingZhi[z.getId()]+1)%30;
            if(xiaoZhuJingZhi[z.getId()]>20){
                z.sheSuDu(ShiLiang2(0,0));z.sheYingYongWuLi(false);z.sheWenDing(true);
                if(z.getWeiZhi().y>=DI_MIAN_Y-0.5f){z.sheWeiZhi(ShiLiang2(z.getWeiZhi().x,DI_MIAN_Y));z.sheLuoDi(true);}
            }
        }
    }
    void chuangJianBaoZha(ShiLiang2 w,int daXiao=5){
        BaoZha b;b.weiZhi=w;b.jiShiQi=daXiao*2;b.zuiDaJiShi=daXiao*2;
        baoZhaLie.push_back(b);
    }
    void shengChengGuanQia(){
        guanQiaLie.clear();
        for(int i=1;i<=ZUI_DA_GUAN_QIA;i++){
            GuanQiaShuJu gq;
            shengChengDuYiGuanQia(gq,i);
            guanQiaLie.push_back(gq);
        }
    }
    void jieSuoGuanQia(int bianHao){
        if(bianHao>0&&bianHao<=ZUI_DA_GUAN_QIA){
            cunDang.she("unlocked_"+to_string(bianHao),"1");
            int zuiGao=cunDang.getInt("highest_level",1);
            if(bianHao>zuiGao)cunDang.she("highest_level",to_string(bianHao));
            cunDang.save();
        }
    }
    bool guanQiaYiJieSuo(int bianHao){
        if(bianHao==1)return true;
        return cunDang.getBool("unlocked_"+to_string(bianHao),false);
    }
    int getZuiGaoJieSuo(){return cunDang.getInt("highest_level",1);}
    void loadCunDang(){
        zongFenShu=cunDang.getInt("total_score",0);
        xianShiJiaoCheng=cunDang.getBool("show_tutorial",true);
        dangQianGuanQia=cunDang.getInt("current_level",1);
    }
    void saveCunDang(){
        cunDang.she("total_score",to_string(zongFenShu));
        cunDang.she("show_tutorial",xianShiJiaoCheng?"1":"0");
        cunDang.save();
    }
    void huaZhiGuiJi(){
        ShiLiang2 kaiShi=danGong.getWeiZhi();
        float jiao=miaoZhunJiao*YUAN_ZHOU_LV/180.0f;
        ShiLiang2 fx(sin(jiao),-cos(jiao));
        ShiLiang2 w=kaiShi,s=fx*miaoZhunLiDu;
        for(int i=0;i<60;i++){
            w.x+=s.x*0.15f;w.y+=s.y*0.15f;
            s.y+=ZHONG_LI*0.15f;s.x*=pow(KONG_QI_ZU_LI,0.15f);s.y*=pow(KONG_QI_ZU_LI,0.15f);
            int x=(int)w.x,y=(int)w.y;
            if(x>=1&&x<PING_MU_KUAN-1&&y>=5&&y<DI_MIAN_Y-1)huaZhiDaoHuanChong(x,y,'.',HUANG_SE);
            else break;
            if(w.y>=DI_MIAN_Y)break;
        }
    }
    void huaZhiPingMu(){
        qingKongHuanChong();
        switch(youXiZhuangTai){
            case CAI_DAN:huaZhiCaiDan();break;
            case GUAN_QIA_XUAN_ZE:huaZhiGuanQiaXuanZe();break;
            case YOU_XI_ZHONG:huaZhiYouXi();break;
            case GUAN_QIA_WAN_CHENG:huaZhiGuanQiaWanCheng();break;
            case YOU_XI_SHI_BAI:huaZhiYouXiShiBai();break;
            case JIAO_CHENG:huaZhiJiaoCheng();break;
        }
        xianShiHuanChong();
    }
    void huaZhiCaiDan(){
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-12,4,"=== 愤怒的小鸟 ===",QIAN_HONG);
        vector<string> caiDan={"1. 开始游戏 (当前: 第 "+to_string(dangQianGuanQia)+" 关)","2. 选择关卡","3. 新手教程","4. 重置存档","5. 退出游戏"};
        vector<int> yse={QIAN_LV,QIAN_QING,QIAN_LAN,QIAN_HONG,AN_HUI};
        for(size_t i=0;i<caiDan.size();i++)huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-20,10+i*2,caiDan[i],yse[i]);
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-20,24,"总分数: "+to_string(zongFenShu),QIAN_QING);
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-20,25,"已解锁关卡: "+to_string(getZuiGaoJieSuo())+"/50",QIAN_LV);
    }
    void huaZhiGuanQiaXuanZe(){
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-10,2,"=== 选择关卡 ===",HUANG_SE);
        int sx=5,sy=5,cols=10,rows=5;
        for(int i=1;i<=ZUI_DA_GUAN_QIA;i++){
            int c=(i-1)%cols,r=(i-1)/cols;
            if(r>=rows)continue;
            int x=sx+c*9,y=sy+r*3,yse;
            if(i==dangQianGuanQia)yse=HUANG_SE;
            else if(guanQiaYiJieSuo(i)){
                if(i<=10)yse=QIAN_LV;else if(i<=20)yse=QIAN_QING;else if(i<=30)yse=HUANG_SE;
                else if(i<=40)yse=QIAN_ZI;else yse=QIAN_HONG;
            }else yse=AN_HUI;
            huaZhiWenZiDaoHuanChong(x+1,y,"Lv."+to_string(i),yse);
            char zt=guanQiaYiJieSuo(i)?'>':'X';
            huaZhiDaoHuanChong(x+6,y,zt,guanQiaYiJieSuo(i)?QIAN_LV:QIAN_HONG);
        }
        huaZhiWenZiDaoHuanChong(10,PING_MU_GAO-2,"方向键选择,回车键确认,ESC返回",AN_HUI);
    }
    void huaZhiYouXi(){
        GuanQiaShuJu gq=getGuanQia(dangQianGuanQia);
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-15,0,"愤怒的小鸟 - 第 "+to_string(dangQianGuanQia)+" 关",HUANG_SE);
        huaZhiWenZiDaoHuanChong(2,1,"分数: "+to_string(fenShu),QIAN_LV);
        huaZhiWenZiDaoHuanChong(2,2,"连击: "+to_string(lianJi)+" (x"+to_string(lianJiBeiShu).substr(0,3)+")",QIAN_ZI);
        huaZhiWenZiDaoHuanChong(2,3,"剩余小鸟: "+to_string(xiaoNiaoLie.size()),QIAN_QING);
        huaZhiWenZiDaoHuanChong(2,4,"剩余猪: "+to_string(xiaoZhuLie.size()),QIAN_HONG);
        if(!xiaoNiaoLie.empty()&&xiaoNiaoLie[0].shiFaShe()){
            string jiNeng;int yse;
            switch(xiaoNiaoLie[0].getLeiXing()){
                case 0:jiNeng="红色: 分裂";yse=QIAN_HONG;break;
                case 1:jiNeng="蓝色: 冲刺";yse=QIAN_LAN;break;
                case 2:jiNeng="黄色: 俯冲";yse=HUANG_SE;break;
                case 3:jiNeng="黑色: 爆炸";yse=QIAN_ZI;break;
                case 4:jiNeng="绿色: 回旋";yse=QIAN_LV;break;
                case 5:jiNeng="白色: 下蛋";yse=BAI_SE;break;
                default:jiNeng="";yse=BAI_SE;
            }
            huaZhiWenZiDaoHuanChong(2,5,"能力: "+jiNeng,yse);
            if(xiaoNiaoLie[0].nengJiHuoShouDongJiNeng())huaZhiWenZiDaoHuanChong(2,6,"按A键激活能力!",QIAN_QING);
            else if(xiaoNiaoLie[0].shiLuoDi())huaZhiWenZiDaoHuanChong(2,6,"已落地,无法使用技能",AN_HUI);
            else if(xiaoNiaoLie[0].getJiNengLengQue()>0)huaZhiWenZiDaoHuanChong(2,6,"技能冷却中: "+to_string(xiaoNiaoLie[0].getJiNengLengQue()),QIAN_HONG);
        }
        for(int x=0;x<PING_MU_KUAN;x++)huaZhiDaoHuanChong(x,DI_MIAN_Y,'_',LV_SE);
        int x=(int)danGong.getWeiZhi().x,y=(int)danGong.getWeiZhi().y;
        huaZhiWenZiDaoHuanChong(x-2,y-1,"/ \\",HUANG_SE);
        huaZhiWenZiDaoHuanChong(x-2,y,"|  |",HUANG_SE);
        huaZhiWenZiDaoHuanChong(x-2,y+1,"\\_/",HUANG_SE);
        huaZhiFangKuai();
        for(auto& z:xiaoZhuLie){
            if(z.shiJiHuo()){
                int xz=(int)z.getWeiZhi().x,yz=(int)z.getWeiZhi().y;
                huaZhiDaoHuanChong(xz,yz,z.getFuHao(),z.getYanSe());
                if(z.getXueLiang()<z.getZuiDaXueLiang()){
                    float bi=(float)z.getXueLiang()/z.getZuiDaXueLiang();
                    int man=(int)(bi*3);
                    for(int bx=-1;bx<=1;bx++){
                        int yse=(bx<man-2)?QIAN_HONG:(bx<man-1)?HUANG_SE:QIAN_LV;
                        huaZhiDaoHuanChong(xz+bx,yz+1,'=',yse);
                    }
                }
            }
        }
        if(!xiaoNiaoLie.empty()&&xiaoNiaoLie[0].shiJiHuo()){
            int xn=(int)xiaoNiaoLie[0].getWeiZhi().x,yn=(int)xiaoNiaoLie[0].getWeiZhi().y;
            if(xiaoNiaoLie[0].nengJiHuoShouDongJiNeng()&&(GetTickCount()/200)%2)
                for(int dx=-1;dx<=1;dx++)for(int dy=-1;dy<=1;dy++)if(abs(dx)+abs(dy)==1)huaZhiDaoHuanChong(xn+dx,yn+dy,'*',QIAN_QING);
            huaZhiDaoHuanChong(xn,yn,xiaoNiaoLie[0].getFuHao(),xiaoNiaoLie[0].getYanSe());
        }
        for(auto& d:danLie)if(d.shiJiHuo())huaZhiDaoHuanChong((int)d.getWeiZhi().x,(int)d.getWeiZhi().y,d.getFuHao(),d.getYanSe());
        for(auto& b:baoZhaLie){
            int xb=(int)b.weiZhi.x,yb=(int)b.weiZhi.y,r=b.jiShiQi/2;
            for(int dx=-r;dx<=r;dx++)for(int dy=-r;dy<=r;dy++){
                if(dx*dx+dy*dy<=r*r){
                    int cx=xb+dx,cy=yb+dy;
                    if(cx>=0&&cx<PING_MU_KUAN&&cy>=0&&cy<PING_MU_GAO){
                        char f=b.jiShiQi>b.zuiDaJiShi/2?'@':'*';
                        int yse=b.jiShiQi>b.zuiDaJiShi/2?QIAN_HONG:HUANG_SE;
                        huaZhiDaoHuanChong(cx,cy,f,yse);
                    }
                }
            }
        }
        if(xianShiGuiJi&&!xiaoNiaoLie.empty()&&xiaoNiaoLie[0].shiZaiDanGong())huaZhiGuiJi();
        int sy=DI_MIAN_Y+2;
        huaZhiWenZiDaoHuanChong(2,sy,"控制:",HUANG_SE);
        huaZhiWenZiDaoHuanChong(2,sy+1,"←→/AD : 角度 ("+to_string((int)miaoZhunJiao)+"°)",BAI_SE);
        huaZhiWenZiDaoHuanChong(2,sy+2,"↑↓/WS : 力度 ("+to_string((int)miaoZhunLiDu)+"/18)",BAI_SE);
        huaZhiWenZiDaoHuanChong(2,sy+3,"空格 : 发射小鸟",BAI_SE);
        huaZhiWenZiDaoHuanChong(2,sy+4,"A键 : 激活特殊能力",QIAN_QING);
        huaZhiWenZiDaoHuanChong(2,sy+5,"ESC : 返回菜单",BAI_SE);
    }
    void huaZhiFangKuai(){
        vector<int> xu(fangKuaiLie.size());
        for(size_t i=0;i<fangKuaiLie.size();i++)xu[i]=i;
        sort(xu.begin(),xu.end(),[this](int a,int b){return fangKuaiLie[a].getWeiZhi().y>fangKuaiLie[b].getWeiZhi().y;});
        for(int i:xu){
            if(!fangKuaiLie[i].shiJiHuo()||fangKuaiLie[i].getQiangDu()<=0)continue;
            int x=(int)fangKuaiLie[i].getWeiZhi().x,y=(int)fangKuaiLie[i].getWeiZhi().y,gao=fangKuaiLie[i].getDuiDieGaoDu();
            int yse=fangKuaiLie[i].getYanSe();
            int qd=fangKuaiLie[i].getQiangDu(),zd=25*(1+gao*0.3f);
            if(qd<zd*0.3)yse=QIAN_HONG;else if(qd<zd*0.6)yse=HUANG_SE;
            for(int h=0;h<gao;h++){
                int cy=y-h;
                if(cy>=1&&cy<PING_MU_GAO-1&&x>=1&&x<PING_MU_KUAN-1)
                    huaZhiDaoHuanChong(x,cy,fangKuaiLie[i].getFuHao(),yse);
            }
        }
    }
    void huaZhiGuanQiaWanCheng(){
        int wan=dangQianGuanQia-1;
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-15,10,"★★★★★★★★★★★★★★",HUANG_SE);
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-12,11,"关卡完成!",QIAN_LV);
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-15,12,"★★★★★★★★★★★★★★",HUANG_SE);
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-20,14,"恭喜完成第 "+to_string(wan)+" 关!",QIAN_QING);
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-20,15,"获得分数: "+to_string(fenShu),HUANG_SE);
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-20,16,"累计总分: "+to_string(zongFenShu),QIAN_LV);
        if(dangQianGuanQia<=ZUI_DA_GUAN_QIA)huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-15,18,"按 N 进入下一关",QIAN_LV);
        else huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-15,18,"恭喜通关全部50关!",QIAN_HONG);
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-20,19,"按 ESC 返回主菜单",AN_HUI);
    }
    void huaZhiYouXiShiBai(){
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-10,10,"=== 游戏结束 ===",QIAN_HONG);
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-15,12,"第 "+to_string(dangQianGuanQia)+" 关失败",HUANG_SE);
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-15,13,"获得分数: "+to_string(fenShu),QIAN_QING);
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-20,15,"按 R 重新挑战本关",QIAN_LV);
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-20,16,"按 ESC 返回主菜单",AN_HUI);
    }
    void huaZhiJiaoCheng(){
        huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-10,2,"=== 新手教程 ===",HUANG_SE);
        vector<string> jc={"愤怒的小鸟","操作说明","方向键调整角度力度","空格发射小鸟","A键使用技能","ESC返回菜单","任意键开始游戏"};
        for(size_t i=0;i<jc.size();i++)huaZhiWenZiDaoHuanChong(PING_MU_KUAN/2-10,4+i,jc[i],i==0?QIAN_HONG:BAI_SE);
    }
    void chuLiShuRu(){
        if(_kbhit()){
            int jian=_getch();
            if(jian==0||jian==0xE0){
                int tou=_getch();
                if(tou==72){if(youXiZhuangTai==YOU_XI_ZHONG&&!xiaoNiaoLie.empty()&&xiaoNiaoLie[0].shiZaiDanGong())miaoZhunLiDu=min(miaoZhunLiDu+0.5f,18.0f);}
                else if(tou==80){if(youXiZhuangTai==YOU_XI_ZHONG&&!xiaoNiaoLie.empty()&&xiaoNiaoLie[0].shiZaiDanGong())miaoZhunLiDu=max(miaoZhunLiDu-0.5f,1.0f);}
                else if(tou==75){if(youXiZhuangTai==YOU_XI_ZHONG&&!xiaoNiaoLie.empty()&&xiaoNiaoLie[0].shiZaiDanGong())miaoZhunJiao=max(miaoZhunJiao-3.0f,10.0f);else if(youXiZhuangTai==GUAN_QIA_XUAN_ZE)dangQianGuanQia=max(1,dangQianGuanQia-1);}
                else if(tou==77){if(youXiZhuangTai==YOU_XI_ZHONG&&!xiaoNiaoLie.empty()&&xiaoNiaoLie[0].shiZaiDanGong())miaoZhunJiao=min(miaoZhunJiao+3.0f,90.0f);else if(youXiZhuangTai==GUAN_QIA_XUAN_ZE)dangQianGuanQia=min(ZUI_DA_GUAN_QIA,dangQianGuanQia+1);}
                return;
            }
            switch(youXiZhuangTai){
                case CAI_DAN:chuLiCaiDanShuRu(jian);break;
                case GUAN_QIA_XUAN_ZE:chuLiGuanQiaXuanZeShuRu(jian);break;
                case YOU_XI_ZHONG:chuLiYouXiShuRu(jian);break;
                case GUAN_QIA_WAN_CHENG:chuLiGuanQiaWanChengShuRu(jian);break;
                case YOU_XI_SHI_BAI:chuLiYouXiShiBaiShuRu(jian);break;
                case JIAO_CHENG:chuLiJiaoChengShuRu(jian);break;
            }
        }
    }
    void chuLiCaiDanShuRu(int jian){
        if(jian=='1'){if(xianShiJiaoCheng)youXiZhuangTai=JIAO_CHENG;else{sheZhiGuanQia(dangQianGuanQia);youXiZhuangTai=YOU_XI_ZHONG;}}
        else if(jian=='2')youXiZhuangTai=GUAN_QIA_XUAN_ZE;
        else if(jian=='3')youXiZhuangTai=JIAO_CHENG;
        else if(jian=='4'){cunDang.reset();dangQianGuanQia=1;zongFenShu=0;loadCunDang();}
        else if(jian=='5'||jian=='q'||jian=='Q'||jian==27)youXiJieShu=true;
    }
    void chuLiGuanQiaXuanZeShuRu(int jian){
        if(jian==27)youXiZhuangTai=CAI_DAN;
        else if(jian==13){if(guanQiaYiJieSuo(dangQianGuanQia)){sheZhiGuanQia(dangQianGuanQia);youXiZhuangTai=YOU_XI_ZHONG;}}
    }
    void chuLiYouXiShuRu(int jian){
        if(jian==27){youXiZhuangTai=CAI_DAN;saveCunDang();return;}
        else if(jian==' '){if(!xiaoNiaoLie.empty()&&xiaoNiaoLie[0].shiZaiDanGong()){float jiao=miaoZhunJiao*YUAN_ZHOU_LV/180.0f;ShiLiang2 fx(sin(jiao),-cos(jiao));xiaoNiaoLie[0].faSheXiaoNiao(fx,miaoZhunLiDu);}}
        else if(jian=='a'||jian=='A'){if(!xiaoNiaoLie.empty()&&xiaoNiaoLie[0].nengJiHuoShouDongJiNeng()){
            xiaoNiaoLie[0].jiHuoTeShuJiNeng();
            ShiLiang2 w=xiaoNiaoLie[0].getWeiZhi();
            int lx=xiaoNiaoLie[0].getLeiXing();
            if(lx==5)danLie.emplace_back(w.x,w.y);
            else if(lx==0)yingYongBaoZha(w,3,false);
            else if(lx==3)yingYongBaoZha(w,6,true);
        }}
        else if(jian=='r'||jian=='R'){sheZhiGuanQia(dangQianGuanQia);youXiZhuangTai=YOU_XI_ZHONG;}
        else if(jian=='t'||jian=='T')xianShiGuiJi=!xianShiGuiJi;
    }
    void chuLiGuanQiaWanChengShuRu(int jian){
        if((jian=='n'||jian=='N')&&dangQianGuanQia<=ZUI_DA_GUAN_QIA){sheZhiGuanQia(dangQianGuanQia);youXiZhuangTai=YOU_XI_ZHONG;}
        else if(jian==27)youXiZhuangTai=CAI_DAN;
    }
    void chuLiYouXiShiBaiShuRu(int jian){
        if(jian=='r'||jian=='R'){sheZhiGuanQia(dangQianGuanQia);youXiZhuangTai=YOU_XI_ZHONG;}
        else if(jian==27)youXiZhuangTai=CAI_DAN;
    }
    void chuLiJiaoChengShuRu(int jian){
        youXiZhuangTai=CAI_DAN;
        xianShiJiaoCheng=false;
        saveCunDang();
    }
    void run(){
        yinCangGuangBiao();
        qingPing();
        sheZhiGuangBiaoWeiZhi(PING_MU_KUAN/2-12,PING_MU_GAO/2-5);
        sheZhiYanSe(QIAN_HONG);
        cout<<"=== 愤怒的小鸟 ===";
        sheZhiGuangBiaoWeiZhi(PING_MU_KUAN/2-20,PING_MU_GAO/2+1);
        cout<<"按任意键开始游戏...";
        sheZhiYanSe(BAI_SE);
        _getch();
        while(!youXiJieShu){
            chuLiShuRu();
            gengXin();
            huaZhiPingMu();
            Sleep(ZHEN_YAN_CHI);
        }
        saveCunDang();
        qingPing();
        sheZhiGuangBiaoWeiZhi(PING_MU_KUAN/2-15,PING_MU_GAO/2-3);
        sheZhiYanSe(QIAN_HONG);
        cout<<"感谢游玩!";
        xianShiGuangBiao();
        _getch();
    }
};

const FenNuXiaoNiaoYouXi::JianZhuMoBan FenNuXiaoNiaoYouXi::jianZhuMoBan[]={
    { { {-2,3,'#'}, {0,5,'#'}, {2,3,'#'} }, { {0,-5} } },
    { { {-3,1,'#'}, {-2,2,'#'}, {-1,3,'#'}, {0,4,'#'}, {1,3,'#'}, {2,2,'#'}, {3,1,'#'} }, { {0,-4} } },
    { { {-5,6,'%'}, {-4,6,'%'}, {-3,3,'#'}, {-2,3,'#'}, {-1,3,'#'}, {0,3,'#'}, {1,3,'#'}, {2,3,'#'}, {3,6,'%'}, {4,6,'%'} }, { {-5,-6}, {4,-6} } },
    { { {-4,5,'%'}, {-3,5,'%'}, {3,5,'%'}, {4,5,'%'}, {-2,3,'='}, {-1,3,'='}, {0,3,'='}, {1,3,'='}, {2,3,'='} }, { {0,-3} } },
    { { {-4,2,'#'}, {-3,3,'#'}, {-2,4,'#'}, {-1,5,'#'}, {0,6,'#'}, {1,5,'#'}, {2,4,'#'}, {3,3,'#'}, {4,2,'#'} }, { {0,-6} } },
    { { {-6,4,'#'}, {-3,2,'&'}, {0,6,'x'}, {3,2,'&'}, {6,4,'#'} }, { {-6,-4}, {0,-6}, {6,-4} } },
    { { {-3,5,'+'}, {-2,5,'+'}, {-1,5,'+'}, {0,5,'+'}, {1,5,'+'}, {2,5,'+'}, {3,5,'+'} }, { {0,-5} } },
    { { {-5,4,'#'}, {-3,6,'%'}, {-1,3,'#'}, {1,2,'&'}, {3,5,'x'} }, { {-3,-6}, {3,-5} } },
    { { {-6,7,'#'}, {-5,7,'#'}, {-4,7,'#'}, {-3,4,'='}, {-2,4,'='}, {-1,4,'='}, {0,4,'='}, {1,4,'='}, {2,4,'='}, {3,7,'#'}, {4,7,'#'}, {5,7,'#'} }, { {-5,-7}, {4,-7} } },
    { { {0,1,'#'}, {1,2,'#'}, {2,3,'#'}, {3,4,'#'}, {4,5,'#'}, {5,6,'#'} }, { {5,-6} } },
    { { {-4,1,'#'}, {-3,2,'#'}, {-2,3,'#'}, {-1,4,'#'}, {0,5,'#'}, {1,4,'#'}, {2,3,'#'}, {3,2,'#'}, {4,1,'#'} }, { {0,-5} } },
    { { {-3,4,'&'}, {-2,4,'&'}, {-1,4,'&'}, {0,6,'%'}, {1,4,'&'}, {2,4,'&'}, {3,4,'&'} }, { {0,-6} } },
    { { {-4,3,'#'}, {-3,5,'x'}, {-2,3,'#'}, {2,3,'#'}, {3,5,'x'}, {4,3,'#'} }, { {-3,-5}, {3,-5} } },
    { { {-5,2,'='}, {-4,4,'#'}, {-3,6,'%'}, {-2,4,'#'}, {-1,2,'='}, {1,2,'='}, {2,4,'#'}, {3,6,'%'}, {4,4,'#'}, {5,2,'='} }, { {-3,-6}, {3,-6} } },
    { { {-3,3,'T'}, {-2,3,'T'}, {-1,3,'T'}, {0,7,'H'}, {1,3,'T'}, {2,3,'T'}, {3,3,'T'} }, { {0,-7} } },
    { { {-2,5,'B'}, {-1,5,'B'}, {0,5,'B'}, {1,5,'B'}, {2,5,'B'} }, { {0,-5} } },
    { { {-4,2,'S'}, {-3,4,'S'}, {-2,6,'S'}, {-1,8,'S'}, {0,9,'S'}, {1,8,'S'}, {2,6,'S'}, {3,4,'S'}, {4,2,'S'} }, { {0,-9} } },
    { { {-2,6,'%'}, {-1,6,'%'}, {0,6,'%'}, {1,6,'%'}, {2,6,'%'}, {-1,3,'#'}, {0,3,'#'}, {1,3,'#'} }, { {-1,-6}, {1,-6}, {0,-3} } },
    { { {-3,4,'x'}, {-2,4,'x'}, {-1,4,'x'}, {0,4,'x'}, {1,4,'x'}, {2,4,'x'}, {3,4,'x'} }, { {0,-4} } },
    { { {-6,3,'#'}, {-5,3,'#'}, {-4,3,'#'}, {-3,3,'#'}, {-2,5,'&'}, {-1,5,'&'}, {0,5,'&'}, {1,5,'&'}, {2,5,'&'}, {3,3,'#'}, {4,3,'#'}, {5,3,'#'}, {6,3,'#'} }, { {-1,-5}, {1,-5} } },
    { { {-4,1,'='}, {-3,2,'='}, {-2,3,'='}, {-1,4,'='}, {0,5,'='}, {1,4,'='}, {2,3,'='}, {3,2,'='}, {4,1,'='} }, { {0,-5} } },
    { { {-5,5,'#'}, {-3,5,'#'}, {-1,5,'#'}, {1,5,'#'}, {3,5,'#'}, {5,5,'#'} }, { {-5,-5}, {-3,-5}, {-1,-5}, {1,-5}, {3,-5}, {5,-5} } },
    { { {-4,8,'%'}, {-2,6,'%'}, {0,4,'%'}, {2,6,'%'}, {4,8,'%'} }, { {-4,-8}, {4,-8} } },
    { { {-3,3,'+'}, {-2,5,'+'}, {-1,7,'+'}, {0,9,'+'}, {1,7,'+'}, {2,5,'+'}, {3,3,'+'} }, { {0,-9} } },
    { { {-2,2,'#'}, {-1,4,'#'}, {0,6,'#'}, {1,4,'#'}, {2,2,'#'} }, { {0,-6} } },
    { { {-6,1,'&'}, {-5,2,'&'}, {-4,3,'&'}, {-3,4,'&'}, {-2,5,'&'}, {-1,6,'&'}, {0,7,'&'}, {1,6,'&'}, {2,5,'&'}, {3,4,'&'}, {4,3,'&'}, {5,2,'&'}, {6,1,'&'} }, { {0,-7} } },
    { { {-3,6,'B'}, {-2,5,'B'}, {-1,4,'B'}, {0,3,'B'}, {1,4,'B'}, {2,5,'B'}, {3,6,'B'} }, { {-2,-5}, {2,-5} } },
    { { {-4,4,'S'}, {-2,6,'S'}, {0,8,'S'}, {2,6,'S'}, {4,4,'S'} }, { {-4,-4}, {4,-4} } },
    { { {-5,1,'T'}, {-4,2,'T'}, {-3,3,'T'}, {-2,4,'T'}, {-1,5,'T'}, {0,6,'T'}, {1,5,'T'}, {2,4,'T'}, {3,3,'T'}, {4,2,'T'}, {5,1,'T'} }, { {0,-6} } },
    { { {-4,7,'x'}, {-3,5,'x'}, {-2,3,'x'}, {-1,1,'x'}, {1,1,'x'}, {2,3,'x'}, {3,5,'x'}, {4,7,'x'} }, { {-4,-7}, {4,-7} } }
};

int main() {
    FenNuXiaoNiaoYouXi game;
    game.run();
    return 0;
}