|
using System;
using System.Collections;
using System.Drawing;
namespace tictactoe_basic
{
/// <summary>
/// Summary description for TTTModel.
/// </summary>
public class TTTModel
{
private Players mPlayers = new Players();
private StatusDetector mStatus = new StatusDetector_Hardcoded();
private TTTBoard mBoard = new TTTBoard();
public TTTModel()
{
mBoard.NewGame();
}
public delegate void UpdatedModel();
public event UpdatedModel Updated;
public StatusDetector.ResultEnum Result
{
get { return mStatus.GetStatus(mBoard); }
}
public bool MyTurn
{
get { return mPlayers.MyTurn; }
}
public void SetPlayerType(Player p)
{
mPlayers.SetPlayerType(p);
}
public void MakeMove(GridCoordinate gc)
{
if (Result != StatusDetector.ResultEnum.NotDone) return;
if (mBoard.CellOccupied(gc)) return;
mPlayers.Move(mBoard, gc);
mPlayers.NextPlayer();
NotifyOfUpdate();
if (Result != StatusDetector.ResultEnum.NotDone) return;
if (!mPlayers.CurrentPlayerIsHuman())
{
mPlayers.Move(mBoard, mPlayers.CurrentPlayersMove(mBoard));
mPlayers.NextPlayer();
NotifyOfUpdate();
}
}
public bool CellIsX(GridCoordinate gc)
{
return mBoard.CellIsX(gc);
}
public bool CellIsO(GridCoordinate gc)
{
return mBoard.CellIsO(gc);
}
public void NewGame()
{
mPlayers.NewGame();
mStatus.NewGame();
mBoard.NewGame();
NotifyOfUpdate();
}
public GridCoordinate GetWinnerSlashStart
{
get {return mStatus.GetWinnerSlashStart; }
}
public GridCoordinate GetWinnerSlashEnd
{
get {return mStatus.GetWinnerSlashEnd; }
}
private void NotifyOfUpdate()
{
if (Updated != null)
Updated();
}
}
}
|