Exemple #1
0
 public override bool Equals(Scenario x, Scenario y)
 {
     return (x.PlayerATotal == y.PlayerATotal)
         && (x.PlayerBTotal == y.PlayerBTotal)
         && (x.InvalidChoices.SetEquals(y.InvalidChoices));
 }
Exemple #2
0
        static bool recursiveCanPlayerAWin(Scenario scenario)
        {
            if(scenario.PlayerAHasWinningChoice())
                return true;

            for(int i = 0; i <= maxChoice; i++)
            {
                if(scenario.IsInvalidChoice(i))
                    continue;

                scenario.PlayerAChoose(i);

                if(scenario.PlayerBHasWinningChoice())
                    return false;

                for(int j = 0; j <= maxChoice; j++)
                {
                    if(scenario.IsInvalidChoice(j))
                        continue;

                    Scenario branch = scenario.Clone();
                    branch.PlayerBChoose(j);

                    if(ScenarioCache.HasDetermined(branch))
                        scenario.PlayerAHasWinningStrategy |= ScenarioCache.GetOutcome(branch);
                    else
                        scenario.PlayerAHasWinningStrategy |= WinComputer.recursiveCanPlayerAWin(branch);
                }
            }

            ScenarioCache.Store(scenario);

            return scenario.PlayerAHasWinningStrategy;
        }
Exemple #3
0
 static bool HasDetermined(Scenario s)
 {
     return ScenarioCache.completed.ContainsKey(s);
 }
Exemple #4
0
 static bool Store(Scenario s)
 {
     if(!ScenarioCache.completed.ContainsKey(s))
         ScenarioCache.completed.Add(s, s.PlayerAHasWinningStrategy);
 }
Exemple #5
0
 static bool GetOutcome(Scenario s)
 {
     return ScenarioCache.completed[s];
 }