Exemplo n.º 1
0
        public void OnCaseSelectionnee(Object sender, SelectionCaseEventArg e)
        {
            if (e.Handled || !aLeTrait)
            {
                return;
            }

            if (!e.Selectionnee)
            {
                if (mouvement == null)
                {
                    var debut = new Coords((sbyte)e.X, (sbyte)e.Y);
                    if (plateauTMP.Get(debut)?.EstBlanc == EstBlanc)
                    {
                        mouvement = new Mouvement(debut);
                        Console.WriteLine("debut mouv");
                        e.Selectionnee = true;
                        deselectionnerToutesLesCases += e.Deselectionner;
                    }
                    else
                    {
                        e.Selectionnee = false;
                    }
                }
                else
                {
                    Console.WriteLine("saut " + EstBlanc);
                    Piece  piece   = plateauTMP.Get(mouvement.Depart);
                    Coords choisie = new Coords((sbyte)e.X, (sbyte)e.Y);
                    if (piece.EstSimplementValide(plateauTMP, mouvement.DernierePosition(), choisie, ref nbDePrisesTmp))
                    {
                        mouvement.Sauts.Enqueue(choisie);
                        e.Selectionnee = true;
                        deselectionnerToutesLesCases += e.Deselectionner;
                    }
                    if (mouvement.GetNbPrises(plateauTMP) == plateauTMP.GetMaxPrisesPossible(EstBlanc))
                    {
                        e.Selectionnee = false;
                        aJoue.TrySetResult(mouvement);
                    }
                }
            }
            else
            {
                mouvement = null;
                deselectionnerToutesLesCases?.Invoke();
                deselectionnerToutesLesCases = null;
                e.Selectionnee = false;
            }

            e.Handled = true;
        }
Exemplo n.º 2
0
 public int GetNbPrises(Plateau plateau)
 {
     if (Sauts.Count > 1)
     {
         return(Sauts.Count);
     }
     else
     {
         if (Sauts.Count == 0)
         {
             return(-1);
         }
         Coords distance = Sauts.Peek() - Depart; //file d'attente vide ????
         distance = distance / (sbyte)distance.Longueur();
         Coords tmp = Depart;
         while (tmp != Sauts.Peek())
         {
             tmp = tmp + distance;
             if (plateau.Get(tmp) != null)
             {
                 return(1);
             }
         }
         return(0);
     }
 }