Untitled
unknown
plain_text
3 years ago
7.8 kB
4
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...