示例#1
0
        public int RunJoinables(ref board oldb, bool bInPlace)
        {
            int   Any = 0;
            int   Score;
            board tb;
            bool  bIsDone = false;

            if (!(oldb.RunEndgame()))
            {
                return(0);
            }

            if (bInPlace)
            {
                tb = oldb;
            }
            else
            {
                tb = new board(ref oldb);
            }
            tb.AssignCompletedID(GlobalClass.TypeCompletedBy.ID_JSS);
            while (JoinSameSuits(ref tb, true))
            {
                Any++;
                Score = tb.ReScoreBoard();
                CheckSuitComplete(ref tb);
                bIsDone = (Score >= GlobalClass.MaxScore);
                if (bIsDone)
                {
                    break;
                }
            }

            if (!bIsDone)
            {
                while (JoinSuitedJoinables(ref tb) && !bIsDone)
                {
                    Any++;
                    bIsDone = CheckSuitComplete(ref tb);
                }
            }
            if (bIsDone)
            {
                Console.WriteLine("Completed board!");
                Environment.Exit(0);
            }
            if (Any > 0 && !bInPlace)
            {
                NewBoards.Add(tb);
            }
            tb.AssignCompletedID();
            return(Any);
        }
示例#2
0
        public int FirstStrategy(ref board oldb)
        {
            int   TotalAny = 0, Any = 0;
            int   NumSOS;
            board tb;

            OurLastBest = oldb.LastBest;
            if (oldb.NumEmptyColumns >= 1)
            {
                do
                {
                    Any       = ExposeTop(ref oldb);
                    TotalAny += Any;
                } while (Any > 0);
            }

            if (!(oldb.RunEndgame()))
            {
                return(0);
            }

            Any       = SOSExposeTop(ref oldb);
            TotalAny += Any;
            NumSOS    = NewBoards.Count; // SOSexpose added this many
            if (oldb.bIsCompletable)
            {
                Any += RunJoinables(ref oldb, false); // process the original board
                for (int i = 0; i < NumSOS; i++)      // process any that SOSexpose created
                {
                    tb = NewBoards[i];
                    board nb = new board(ref tb);
                    Any      += RunJoinables(ref nb, false);
                    TotalAny += Any;
                }
            }
            return(TotalAny);
        }