コード例 #1
0
ファイル: Cell.cs プロジェクト: kujawskip/SPD
 /// <summary>
 /// Znajdź najlepszą strategię spośród podanych komórek względem centralnej.
 /// W przypadku remisu punktów wybierana jest centralna (o ile ma najwięcej punktów), następnie priorytety maleją zgodnie z ruchem wskazówek zegara.
 /// </summary>
 /// <param name="c">Komórka centralna</param>
 /// <param name="cellList">Sąsiedzi</param>
 /// <returns>Najlepsza strategia</returns>
 public static IStrategy GetBest(Cell c, IEnumerable<Cell> cellList)
 {
     var enumerable = cellList as Cell[] ?? cellList.ToArray();
     var max = enumerable.Max(y => y.Points);
     if (c.Points == max) return c.Strategy;
     if (c.GetNeighbours().All(x => x.Strategy == c.Strategy)) return c.Strategy;
     var best = enumerable.Where(x => x.Points == enumerable.Max(y => y.Points)).Select(x => x.Strategy).Distinct();
     return best.First();
 }
コード例 #2
0
ファイル: Skirmish.cs プロジェクト: kujawskip/SPD
 /// <summary>
 /// Konstruktor
 /// </summary>
 /// <param name="c1">Komórka c1</param>
 /// <param name="c2">Przeciwnik komórki c1</param>
 public Skirmish(Cell c1, Cell c2)
 {
     _cells = new Tuple<Cell, Cell>(c1, c2);
     _story = new List<Tuple<bool, bool>>();
 }
コード例 #3
0
ファイル: IntegerStrategy.cs プロジェクト: kujawskip/SPD
 /// <summary>
 /// Implementacja podejmowania decyzji przez strategię
 /// </summary>
 /// <param name="parent">Komórka decydująca</param>
 /// <param name="opponent">Komórka, przeciw której podejmowana jest decyzja</param>
 /// <returns>True jeśli zdrada, false w przeciwnym przypadku</returns>
 public bool Decide(Cell parent, Cell opponent)
 {
     var decs = (from neighbour in parent.GetNeighbours()
                 let skirmish = SPD.Singleton.GetSkirmish(parent, neighbour)
                 let last = skirmish != null ? skirmish.Last : null
                 let decision = last != null && (last.Item1.Item1 == parent ? last.Item2.Item2 : last.Item1.Item2)
                 select decision);
     var res = decs.Count(x => x == true) >= Treshold;
     return res;
 }
コード例 #4
0
ファイル: Cell.cs プロジェクト: kujawskip/SPD
 /// <summary>
 /// Implementacja podejmowania decyzji przez komórkę
 /// </summary>
 /// <param name="opponent">Komórka będąca przeciwnikiem</param>
 /// <returns>True jeśli zdradza, false w przeciwnym wypadku</returns>
 public bool Decide(Cell opponent)
 {
     return Strategy.Decide(this, opponent);
 }
コード例 #5
0
ファイル: Cell.cs プロジェクト: kujawskip/SPD
 private void Decompose(Cell cell, Tuple<Tuple<Cell, bool>, Tuple<Cell, bool>> last, out bool myDecision, out bool opponentsDecision)
 {
     if (last.Item1.Item1 == cell)
     {
         myDecision = last.Item1.Item2;
         opponentsDecision = last.Item2.Item2;
     }
     else if (last.Item2.Item1 == cell)
     {
         myDecision = last.Item2.Item2;
         opponentsDecision = last.Item1.Item2;
     }
     else throw new ArgumentException();
 }