private async void Simulate(Prisoner prisoner1, Prisoner prisoner2, int iterations, bool slowMode) { await Task.Run(() => { for (int i = 0; i < iterations; i++) { if (_shouldEnd) { break; } var prisoner1Choice = _prisoner1.TakeAction(); var prisoner2Choice = _prisoner2.TakeAction(); _prisoner1.ProcessOpponentAction(prisoner2Choice); _prisoner2.ProcessOpponentAction(prisoner1Choice); CalculateScore(prisoner1Choice, prisoner2Choice); Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { string p1 = prisoner1Choice ? "Współpracuje" : "Zdradził"; string p2 = prisoner2Choice ? "Współpracuje" : "Zdradził"; UpdateGUI($"W1: {p1}, W2: {p2}"); }); if (slowMode) { Thread.Sleep(100); } } }); }
private void SelectStrategy(ComboBox comboBox, Prisoner prisoner) { switch (comboBox.Text) { case "Wet za wet": { prisoner.SetStrategy(new TitForTat()); break; } case "Wet za dwa wet": { prisoner.SetStrategy(new TitFor2Tat()); break; } case "Wet za dwa wet z 10% prawdopodobieństwem na zdradę": { prisoner.SetStrategy(new TitForTatWithProbability(BETRAYAL, 0.1)); break; } case "Wet za dwa wet z 10% prawdopodobieństwem na współpracę": { prisoner.SetStrategy(new TitForTatWithProbability(COOPERATION, 0.1)); break; } case "Nie zatapiaj łodzi": { prisoner.SetStrategy(new DontSkinTheBoat()); break; } case "Zapominaj": { prisoner.SetStrategy(new CooperateStrategy()); break; } case "Trzymaj się rozwiązania rutynowego": { prisoner.SetStrategy(new RutineStrategy()); break; } case "Zawsze zdradzaj": { prisoner.SetStrategy(new AlwaysBetrayStrategy()); break; } case "Zawsze współpracuj": { prisoner.SetStrategy(new AlwaysCooperateStrategy()); break; } case "Losowo": { prisoner.SetStrategy(new RandomStrategy()); break; } } }
public MainWindow() { InitializeComponent(); _prisoner1 = new Prisoner(new TitForTat()); _prisoner2 = new Prisoner(new TitForTat()); }