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