Untitled
unknown
plain_text
2 years ago
7.8 kB
1
Indexable
using System; using System.Windows.Forms; namespace Piskvorky_JanNeuC3a { class Presenter { private IMainForm _view; private bool _playerUseX = true; private TicTacToe _ticTacToe; private Board _board = new Board(); public Presenter(IMainForm view) { _view = view; _view.BtnChooseX.Enabled = false; _view.BtnChooseX.BackColor = Color.DarkGray; _view.ComboBoxOpponentChanged += _view_ComboBoxOpponentChanged; _view.BtnChooseXClicked += _view_BtnChooseXClicked; _view.BtnChooseOClicked += _view_BtnChooseOClicked; _view.BtnConfirmClicked += _view_BtnConfirmClicked; _view.BtnClicked += _view_BtnClicked; _view.BtnBackClicked += _view_BtnBackClicked; _view.BtnRefreshClicked += _view_BtnRefreshClicked; _view.ComboBoxOpponent.DataSource = Enum.GetValues(typeof(PlayerType)); _view.ComboBoxDifficulty.DataSource = Enum.GetValues(typeof(DifficultyType)); } #region CallBackMethods private void _view_BtnRefreshClicked(object sender, EventArgs e) { _view.LabelTurn.Text = "X moves"; StartGame(); } private void _view_BtnBackClicked(object sender, EventArgs e) { _view.PanelMenu.Show(); _ticTacToe.Reset(); _board.Clean(); _view.LabelTurn.Text = "X moves"; } private void _view_BtnChooseOClicked(object sender, EventArgs e) { _view.BtnChooseO.Enabled = false; _view.BtnChooseX.Enabled = true; _view.BtnChooseO.BackColor = Color.DarkGray; _view.BtnChooseX.BackColor = Color.WhiteSmoke; _playerUseX = false; } private void _view_BtnChooseXClicked(object sender, EventArgs e) { _view.BtnChooseO.Enabled = true; _view.BtnChooseX.Enabled = false; _view.BtnChooseX.BackColor = Color.DarkGray; _view.BtnChooseO.BackColor = Color.WhiteSmoke; _playerUseX = true; } private void _view_ComboBoxOpponentChanged(object sender, EventArgs e) { var comboBox = (ComboBox)sender; Enum.TryParse(comboBox.SelectedValue.ToString(), out PlayerType playerType); if (playerType == PlayerType.Computer) { _view.GroupBoxDifficulty.Show(); } else { _view.GroupBoxDifficulty.Hide(); } } private void _view_BtnClicked(object sender, EventArgs e) { _view.BtnRefresh.Enabled = true; Button button = (Button)sender; button.Enabled = false; if (_ticTacToe.CurrentTurn == TicTacToe.Turn.PlayerX) { button.Text = "X"; } else { button.Text = "O"; } _ticTacToe.PlayerMoved(); _ticTacToe.UpdateBoard(_view.BtnsTicTacToe); } private void _view_BtnConfirmClicked(object sender, EventArgs e) { _view.PanelMenu.Hide(); StartGame(); } /// <summary> /// If UIBoard changes - change board so that they are matched /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void _ticTacToe_UIBoardChanged(object sender, EventArgs e) { Action action = () => { var board = (Board)sender; for (var i = 0; i < _board.WIDTH; i++) { for (var j = 0; j < _board.HEIGHT; j++) { if (board[i, j] == Board.ElementType.X) { _view.BtnsTicTacToe[i, j].Text = "X"; _view.BtnsTicTacToe[i, j].Enabled = false; } else if (board[i, j] == Board.ElementType.O) { _view.BtnsTicTacToe[i, j].Text = "O"; _view.BtnsTicTacToe[i, j].Enabled = false; } } } }; _view.ExecuteDelegateOnUIThread(action); } private void _ticTacToe_GameFinishedTie(string message) { _view.LabelTurn.Text = message; } private void _ticTacToe_GameFinishedWin(string message, int[,] winningIndexes) { _view.LabelTurn.Text = message; for (var i = 0; i < _board.WIDTH; i++) { int x = winningIndexes[i, 0]; int y = winningIndexes[i, 1]; _view.BtnsTicTacToe[x, y].BackColor = Color.AliceBlue; } for (var i = 0; i < _board.WIDTH; i++) { for (var j = 0; j < _board.HEIGHT; j++) { _view.BtnsTicTacToe[i, j].Enabled = false; } } } #endregion private void RefreshButtons() { for (int i = 0; i < _board.WIDTH; i++) { for (int j = 0; j < _board.HEIGHT; j++) { _view.BtnsTicTacToe[i, j].BackColor = Color.Gray; _view.BtnsTicTacToe[i, j].Text = ""; _view.BtnsTicTacToe[i, j].Enabled = true; } } } private void StartGame() { _ticTacToe?.Reset(); _view.BtnRefresh.Enabled = false; _board.Clean(); RefreshButtons(); var opponentComboBox = _view.ComboBoxOpponent; Enum.TryParse(opponentComboBox.SelectedItem.ToString(), out PlayerType opponentType); var difficultyComboBox = _view.ComboBoxDifficulty; Enum.TryParse(difficultyComboBox.SelectedItem.ToString(), out DifficultyType difficultyType); Player player1 = new HumanPlayer(); Player player2 = null; if (opponentType == PlayerType.Human) { player2 = new HumanPlayer(); } else { player2 = new ComputerPlayer(difficultyType); } player1.PlayersTurn = TicTacToe.Turn.PlayerX; player2.PlayersTurn = TicTacToe.Turn.PlayerO; _ticTacToe = new TicTacToe(_board, player1, player2, difficultyType); _ticTacToe.GameFinishedWin += _ticTacToe_GameFinishedWin; _ticTacToe.GameFinishedTie += _ticTacToe_GameFinishedTie; _ticTacToe.UIBoardChanged += _ticTacToe_UIBoardChanged; _ticTacToe.TurnChanged += _ticTacToe_TurnChanged; if (!_playerUseX) { player2.PlayersTurn = TicTacToe.Turn.PlayerX; player1.PlayersTurn = TicTacToe.Turn.PlayerO; _ticTacToe.PlayerX = player2; _ticTacToe.PlayerO = player1; } _ticTacToe.Start(); } private void _ticTacToe_TurnChanged() { if (_ticTacToe.CurrentTurn == TicTacToe.Turn.PlayerX) { _view.LabelTurn.Text = "X moves"; } else { _view.LabelTurn.Text = "O moves"; } } } }
Editor is loading...