/// <summary> /// Handles the KeyDown event of the Window control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="KeyEventArgs" /> instance containing the event data.</param> private void Window_KeyDown(object sender, KeyEventArgs e) { e.Handled = true; if (selectedUnit != null) { if (e.Key == Key.Up) { if (selectedUnit.Position.Y == 0) { return; } if (mapViewer.Map.SquareMatrix[(int)selectedUnit.Position.X, (int)selectedUnit.Position.Y - 1] is Water) { Log.Instance.Write("Impossible de bouger sur une case de type eau."); } else { if (selectedUnit.CanMove()) { foreach (IPlayer player in players) { if (player != players[currentPlayerIndex]) { if (player.HasUnit(new Point((int)selectedUnit.Position.X, (int)selectedUnit.Position.Y - 1))) { if (MessageBox.Show("Voulez vous combattre l'unité adversaire du joueur [" + player.Name + "]", "Combat", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { Fight(players[currentPlayerIndex].GetUnits( selectedUnit.Position), player.GetUnits(new Point((int)selectedUnit.Position.X, (int)selectedUnit.Position.Y - 1)), player); if (player.GetUnits(new Point((int)selectedUnit.Position.X, (int)selectedUnit.Position.Y - 1)).Count < 1) { selectedUnit.MoveUp(); // Traiter le cas ou on va sur une ville } else { mapViewer.Redraw(); selectedUnit = null; return; } } else { return; } } else if (player.HasCity(new Point((int)selectedUnit.Position.X, (int)selectedUnit.Position.Y - 1))) { ICity city = player.GetCity(new Point((int)selectedUnit.Position.X, (int)selectedUnit.Position.Y - 1)); player.RemoveCity(city); players[currentPlayerIndex].AddCity(city); Log.Instance.Write("Vous avez pris une ville de l'adversaire."); mapViewer.Redraw(); selectedUnit = null; return; } } } selectedUnit.MoveUp(); mapViewer.Redraw(); } else { Log.Instance.Write("Cette unité ne possède plus de points de mouvement."); } } } else if (e.Key == Key.Down) { if (selectedUnit.Position.Y == (mapViewer.Map.Size.Y - 1)) { return; } if (mapViewer.Map.SquareMatrix[(int)selectedUnit.Position.X, (int)selectedUnit.Position.Y + 1] is Water) { Log.Instance.Write("Impossible de bouger sur une case de type eau."); } else { if (selectedUnit.CanMove()) { foreach (IPlayer player in players) { if (player != players[currentPlayerIndex]) { if (player.HasUnit(new Point((int)selectedUnit.Position.X, (int)selectedUnit.Position.Y + 1))) { if (MessageBox.Show("Voulez vous combattre l'unité adversaire du joueur [" + player.Name + "]", "Combat", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { Fight(players[currentPlayerIndex].GetUnits( selectedUnit.Position), player.GetUnits(new Point((int)selectedUnit.Position.X, (int)selectedUnit.Position.Y + 1)), player); if (player.GetUnits(new Point((int)selectedUnit.Position.X, (int)selectedUnit.Position.Y + 1)).Count < 1) { selectedUnit.MoveUp(); // Traiter le cas ou on va sur une ville } else { mapViewer.Redraw(); selectedUnit = null; return; } } else { return; } } else if (player.HasCity(new Point((int)selectedUnit.Position.X, (int)selectedUnit.Position.Y + 1))) { ICity city = player.GetCity(new Point((int)selectedUnit.Position.X, (int)selectedUnit.Position.Y + 1)); player.RemoveCity(city); players[currentPlayerIndex].AddCity(city); Log.Instance.Write("Vous avez pris une ville de l'adversaire."); mapViewer.Redraw(); selectedUnit = null; return; } } } selectedUnit.MoveDown(); mapViewer.Redraw(); } else { Log.Instance.Write("Cette unité ne possède plus de points de mouvement."); } } } else if (e.Key == Key.Right) { if (selectedUnit.Position.X == (mapViewer.Map.Size.X - 1)) { return; } if (mapViewer.Map.SquareMatrix[(int)selectedUnit.Position.X + 1, (int)selectedUnit.Position.Y] is Water) { Log.Instance.Write("Impossible de bouger sur une case de type eau."); } else { if (selectedUnit.CanMove()) { foreach (IPlayer player in players) { if (player != players[currentPlayerIndex]) { if (player.HasUnit(new Point((int)selectedUnit.Position.X + 1, (int)selectedUnit.Position.Y))) { if (MessageBox.Show("Voulez vous combattre l'unité adversaire du joueur [" + player.Name + "]", "Combat", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { Fight(players[currentPlayerIndex].GetUnits( selectedUnit.Position), player.GetUnits(new Point((int)selectedUnit.Position.X + 1, (int)selectedUnit.Position.Y)), player); if (player.GetUnits(new Point((int)selectedUnit.Position.X + 1, (int)selectedUnit.Position.Y)).Count < 1) { selectedUnit.MoveUp(); // Traiter le cas ou on va sur une ville } else { mapViewer.Redraw(); selectedUnit = null; return; } } else { return; } } else if (player.HasCity(new Point((int)selectedUnit.Position.X + 1, (int)selectedUnit.Position.Y))) { ICity city = player.GetCity(new Point((int)selectedUnit.Position.X + 1, (int)selectedUnit.Position.Y)); player.RemoveCity(city); players[currentPlayerIndex].AddCity(city); Log.Instance.Write("Vous avez pris une ville de l'adversaire."); mapViewer.Redraw(); selectedUnit = null; return; } } } selectedUnit.MoveRight(); mapViewer.Redraw(); } else { Log.Instance.Write("Cette unité ne possède plus de points de mouvement."); } } } else if (e.Key == Key.Left) { if (selectedUnit.Position.X == 0) { return; } if (mapViewer.Map.SquareMatrix[(int)selectedUnit.Position.X - 1, (int)selectedUnit.Position.Y] is Water) { Log.Instance.Write("Impossible de bouger sur une case de type eau."); } else { if (selectedUnit.CanMove()) { foreach (IPlayer player in players) { if (player != players[currentPlayerIndex]) { if (player.HasUnit(new Point((int)selectedUnit.Position.X - 1, (int)selectedUnit.Position.Y))) { if (MessageBox.Show("Voulez vous combattre l'unité adversaire du joueur [" + player.Name + "]", "Combat", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { Fight(players[currentPlayerIndex].GetUnits( selectedUnit.Position), player.GetUnits(new Point((int)selectedUnit.Position.X - 1, (int)selectedUnit.Position.Y)), player); if (player.GetUnits(new Point((int)selectedUnit.Position.X - 1, (int)selectedUnit.Position.Y)).Count < 1) { selectedUnit.MoveUp(); // Traiter le cas ou on va sur une ville } else { mapViewer.Redraw(); selectedUnit = null; return; } } else { return; } } else if (player.HasCity(new Point((int)selectedUnit.Position.X - 1, (int)selectedUnit.Position.Y))) { ICity city = player.GetCity(new Point((int)selectedUnit.Position.X - 1, (int)selectedUnit.Position.Y)); player.RemoveCity(city); players[currentPlayerIndex].AddCity(city); Log.Instance.Write("Vous avez pris une ville de l'adversaire."); mapViewer.Redraw(); selectedUnit = null; return; } } } selectedUnit.MoveLeft(); mapViewer.Redraw(); } else { Log.Instance.Write("Cette unité ne possède plus de points de mouvement."); } } } mapViewer.PickedSquare = selectedUnit.Position; } }