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); }
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); }