/// <summary> /// Un joueur tente de jouer un coup. Joue le coup et change de tour si possible. /// Si l'autre joueur doit passer, reviens au premier joueur. /// Si la partie est terminée, affichage des score et du gagnant. /// </summary> private void Pawn_Click(object sender, RoutedEventArgs e) { contextPlayers.Timer.Stop(); CellButton cellButton = (CellButton)sender; int c = cellButton.C; int l = cellButton.L; if (board.PlayMove(c, l, whiteTurn)) { // Coup jouable et joué cellButton.Val = board.GetBoard()[c, l]; whiteTurn = !whiteTurn; var newWhiteTurn = whiteTurn; CheckFinished(); // L'IA joue que si elle n'a pas passé son tour (donc whiteTurn n'a pas été modifié dans CheckFinished().) if (playAgainstIA && newWhiteTurn == whiteTurn) { PlayIAMove(); CheckFinished(); } } else { // Impossible de jouer ce coup } }
/// <summary> /// Commence ou recommence une partie. /// </summary> private void StartGame() { UpdateTitle(); // Le joueur noir commence toujours whiteTurn = false; // Création du contexte pour les infos des joueurs contextPlayers = new ContextPlayers(2, 2); // On bind les infos au DataContext de la fenêtre. DataContext = contextPlayers; // Nouveau plateau de jeu board = new Board(); cells = new CellButton[8, 8]; // Style des boutons (pions) Style resource = (Style)FindResource("PawnStyle"); var tabBoard = board.GetBoard(); for (int c = 0; c < 8; c++) { for (int l = 0; l < 8; l++) { // Création et ajout du pion dans le plateau de jeu var val = tabBoard[c, l]; CellButton pawnBtn = new CellButton(c, l, val) { Style = resource }; pawnBtn.Click += Pawn_Click; cells[c, l] = pawnBtn; // Ajout graphique du pion : Border(Grid(bouton transparent, ellipse visible)) Border border = new Border { BorderBrush = Brushes.White, BorderThickness = new Thickness(1, 1, 0, 0) }; if (c == 0) { border.BorderThickness = new Thickness(0, 1, 0, 0); if (l == 0) { border.BorderThickness = new Thickness(0, 0, 0, 0); } } else if (l == 0) { border.BorderThickness = new Thickness(1, 0, 0, 0); } Grid grid = new Grid { Background = Brushes.Green }; Viewbox viewbox = new Viewbox { Child = pawnBtn.Ellipse, Margin = new Thickness(4) }; grid.Children.Add(viewbox); grid.Children.Add(pawnBtn); border.Child = grid; Grid.SetColumn(border, c + 1); Grid.SetRow(border, l + 1); gridBoard.Children.Add(border); } } // Ajout des en-têtes au plateau (A-H dans les colonnes, 1-8 pour les lignes) AddHeader(); // Refresh de la GUI UpdateUI(false); }