private void _developDisp2Ex(Bit81[] GLC)
        {
            List <UCell> qBDL = new List <UCell>();

            pBDL.ForEach(p => qBDL.Add(p.Copy()));
            foreach (var P in qBDL.Where(q => q.FreeB > 0))
            {
                int E = 0;
                for (int n = 0; n < 9; n++)
                {
                    if (GLC[n].IsHit(P.rc))
                    {
                        E |= (1 << n);
                    }
                }
                if (E > 0)
                {
                    UCell Q = pBDL[P.rc];
                    P.SetNoBBgColor(E, Colors.White, Colors.PowderBlue);
                    P.SetNoBColorRev(E, Colors.Blue);

                    Q.SetNoBBgColor(E, Colors.White, Colors.PowderBlue);
                    Q.SetNoBColorRev(E, Colors.Red);
                    int sb = Q.FreeB.DifSet(E);
                    Q.CancelB = E;
                    if (sb.BitCount() == 1)
                    {
                        Q.FixedNo = sb.BitToNum() + 1;
                        SolCode   = 1;
                    }
                    else if (sb.BitCount() == 0)
                    {
                        Q.SetCellBgColor(Colors.Violet);
                    }
                }
            }
            devWin.Set_dev_GBoard(qBDL);
        }
        private bool _ForceChainCellDispEx(Bit81[] sPass, Bit81[] sTrue, int rc0)       //q
        {
            string dspOpt = GNPXApp000.GMthdOption["ForceLx"];

            if (rc0 < 0)    //dspOpt:"ForceL2"
            {
                Result = ResultLong = "ForceChain_Cell";
                if (__SimpleAnalizerB__)
                {
                    return(true);
                }
                pAnMan.SnapSaveGP(true);
                return(SolCode > 0);
            }

            UCell  P0 = pBDL[rc0];
            string st0 = "", st2 = "";

            for (int nox = 0; nox < 9; nox++)
            {
                if (sTrue[nox].IsZero())
                {
                    continue;
                }

                foreach (var rc in sTrue[nox].IEGet_rc())
                {
                    if (sPass[nox].IsHit(rc))
                    {
                        continue;
                    }
                    sPass[nox].BPSet(rc);

                    UCell Q = pBDL[rc];
                    Q.FixedNo = nox + 1;
                    int elm = Q.FreeB.DifSet(1 << nox);
                    Q.CancelB = elm;
                    SolCode   = 1;

                    if (SolInfoB)                       //SolInfoB:Flag whether to generate solution information
                    {
                        if (dspOpt != "ForceL2")
                        {
                            P0.SetNoBBgColor(P0.FreeB, Colors.Green, Colors.Yellow);
                        }
                        Q.SetNoBBgColor(1 << nox, Colors.Red, Colors.LightGreen);
                        Q.SetNoBColorRev(elm, Colors.Red);

                        st0 = $"ForceChain_Cell r{(Q.r+1)}c{(Q.c+1)}/{(nox+1)} is true";    //st0:Title of each solution

                        string st1 = "";
                        foreach (var no in pBDL[rc0].FreeB.IEGet_BtoNo())
                        {
                            USuperLink USLK = pSprLKsMan.get_L2SprLKEx(rc0, no, FullSearchB: false, DevelopB: false);
                            st1 += "\r" + pSprLKsMan._GenMessage2true(USLK, Q, nox);          //st1:Exact GroupedLink path
                        }
                        st2     = st0 + st1;                                                  //st2:Description of each solution
                        Result  = ResultLong = st0;
                        extRes += "\r" + st2;                                                 //(Description of each solution)
                        extRes  = extRes.TrimStart();

                        if (dspOpt == "ForceL0")
                        {
                            if (__SimpleAnalizerB__)
                            {
                                return(true);
                            }
                            if (!pAnMan.SnapSaveGP(false))
                            {
                                return(true);
                            }
                            extRes = ""; st2 = "";
                        }
                    }
                }
                if (SolInfoB && dspOpt == "ForceL1" && st2 != "")
                {
                    Result = ResultLong = $"ForceChain_Cell (#{nox+1})";

                    if (__SimpleAnalizerB__)
                    {
                        return(true);
                    }
                    if (!pAnMan.SnapSaveGP(false))
                    {
                        return(true);
                    }
                    st2    = "";
                    extRes = "";
                }
            }
            return(SolCode > 0);
        }
        private bool _ForceChainHouseDispEx(Bit81[] sPass, Bit81[] sTrue, int hs0, int no0)
        {
            string dspOpt = GNPXApp000.GMthdOption["ForceLx"];

            if (hs0 < 0)//  dspOpt:ForceL2"
            {
                Result = ResultLong = "ForceChain_House";
                if (__SimpleAnalizerB__)
                {
                    return(true);
                }
                pAnMan.SnapSaveGP(true);
                return(SolCode > 0);
            }


            string st0 = "", st2 = "";

            for (int nox = 0; nox < 9; nox++)
            {
                if (sTrue != null)
                {
                    if (sTrue[nox].IsZero())
                    {
                        continue;
                    }

                    foreach (var rc in sTrue[nox].IEGet_rc())
                    {
                        if (sPass[nox].IsHit(rc))
                        {
                            continue;
                        }
                        sPass[nox].BPSet(rc);

                        UCell Q = pBDL[rc];
                        Q.FixedNo = nox + 1;
                        int elm = Q.FreeB.DifSet(1 << nox);
                        Q.CancelB = elm;
                        SolCode   = 1;

                        if (SolInfoB)
                        {
                            Q.SetNoBBgColor(1 << nox, Colors.Red, Colors.LightGreen);
                            Q.SetNoBColorRev(elm, Colors.Red);

                            st0 = $"ForceChain_House({_HouseToString(hs0)}/#{(no0+1)}) r{(Q.r+1)}c{(Q.c+1)}/#{(nox+1)} is true";
                            string st1 = "";
                            foreach (var P in pBDL.IEGetCellInHouse(hs0, 1 << no0))
                            {
                                USuperLink USLK = pSprLKsMan.get_L2SprLK(P.rc, no0, FullSearchB: true, DevelopB: false);                        //Accurate path
                                st1 += "\r" + pSprLKsMan._GenMessage2true(USLK, Q, nox);
                                if (dspOpt != "ForceL2")
                                {
                                    P.SetNoBBgColor(1 << no0, Colors.Green, Colors.Yellow);
                                }
                            }

                            st2     = st0 + st1;
                            extRes += "\r" + st2;                             //(Description of each solution)
                            extRes  = extRes.TrimStart();

                            if (dspOpt == "ForceL0")
                            {
                                Result = ResultLong = st0;
                                if (__SimpleAnalizerB__)
                                {
                                    return(true);
                                }
                                if (!pAnMan.SnapSaveGP(false))
                                {
                                    return(true);
                                }
                                extRes = ""; st2 = "";
                                if (!SDK_Ctrl.MltAnsSearch)
                                {
                                    return(true);
                                }
                            }
                        }
                    }
                }

                if (SolInfoB && dspOpt == "ForceL1" && st2 != "")
                {
                    st0    = $"ForceChain_House({_HouseToString(hs0)}/#{(no0+1)})";
                    Result = ResultLong = st0;
                    if (__SimpleAnalizerB__)
                    {
                        return(true);
                    }
                    if (!pAnMan.SnapSaveGP(false))
                    {
                        return(true);
                    }
                    extRes = ""; st2 = "";
                    if (!SDK_Ctrl.MltAnsSearch)
                    {
                        return(true);
                    }
                }
            }
            return(SolCode > 0);
        }