/// <summary> /// Initialises a new game with specifed grid size. /// </summary> /// <param name="gridColumns">No. of columns in grid</param> /// <param name="gridRows">No. of rows in grid</param> public Connect4(IBoardSettings boardSettings, IMessage message) { //Initialise _Message = message; Winner = false; GameState = new State(boardSettings); }
/// <summary> /// New state base on old state /// </summary> /// <param name="original"></param> public State(State original) { Values = (int[,])original.Values.Clone(); RowCount = (int[])original.RowCount.Clone(); Turn = original.Turn; MoveCount = original.MoveCount; }
/// <summary> /// Initialises a new game with specifed grid size. /// </summary> /// <param name="gridColumns">No. of columns in grid</param> /// <param name="gridRows">No. of rows in grid</param> public Connect4(IBoardSettings boardSettings, IMessage message) { //Initialise _Message = message; Winner = false; GameState = new State(boardSettings.Columns,boardSettings.Rows); GameState.Turn = 1; }
public bool Turn(int move) { try { State state = GameState.Move(move); if (state == null) return false; GameState = state; } catch(Exception ex) { _Message.WriteLine(string.Format("Invalid move - {0}", ex.Message)); } return true; }
/// <summary> /// Creates a new state after the move /// </summary> /// <param name="iMove">A number between 1-7 representing the chosen column.</param> /// <returns></returns> public State Move(int iMove) { State state = new State(this); if (iMove < 1 || iMove > Columns) { throw new ArgumentOutOfRangeException(string.Format("Specified column {1} is not valid. Column index must be between 1 and {0}.", Columns, iMove)); } int m = iMove - 1; if (state.RowCount[m] == Rows) return null; //column full. state.RowCount[m]++; state.Values[m, (Rows - state.RowCount[m])] = state.Turn; //updates the board. state.Turn = (state.Turn == 1) ? 2 : 1; //switch player. state.MoveCount++; return state; }