// in make a move there is the logic of switcing turns // the rule is that after MakeAMove() the player that is playing the next move will be in current player in sessionData class public void MakeAMove(CheckersGameStep io_MoveToExecute, GameBoard io_CheckersBoard) { GameBoard.Soldier currentSoldierToMove = io_CheckersBoard.GetSoldierFromMatrix(io_MoveToExecute.CurrentPosition); io_CheckersBoard.MoveSoldier(io_MoveToExecute); if (io_MoveToExecute.MoveTypeInfo.KingMove) { currentSoldierToMove.BecomeAKing(); } if (io_MoveToExecute.MoveTypeInfo.TypeIndicator != eMoveTypes.EatMove) { SessionData.ChangeTurn(); } else { currentSoldierToMove.calculatePossibleMovements(ref io_CheckersBoard); if (currentSoldierToMove.eatPossibleMovements.Count == 0) { SessionData.ChangeTurn(); } } // here was supposed to be else --> do nothing cuz we dont want switch turns --> player ate a soldier and can creat a combo }
private Point calculatePositionOfEatenSoldier(CheckersGameStep i_move) { Point resultPosition = new Point(); resultPosition.XCoord = i_move.CurrentPosition.XCoord + ((i_move.RequestedPosition.XCoord - i_move.CurrentPosition.XCoord) / 2); resultPosition.YCooord = i_move.CurrentPosition.YCooord + ((i_move.RequestedPosition.YCooord - i_move.CurrentPosition.YCooord) / 2); return(resultPosition); }
public static CheckersGameStep CreateCheckersGameStep(Point i_currentSoldierPosition, Point i_requestedSoldierPosition, bool i_ToQuit = false) { CheckersGameStep result = new CheckersGameStep(); result.CurrentPosition = i_currentSoldierPosition; result.RequestedPosition = i_requestedSoldierPosition; result.MoveTypeInfo = MoveType.CalculateMoveType(result); result.m_quitIndicator = i_ToQuit; return(result); }
public bool Equals(CheckersGameStep i_step) { bool validity = true; if (!(i_step.CurrentPosition.XCoord == CurrentPosition.XCoord && i_step.CurrentPosition.XCoord == CurrentPosition.XCoord && i_step.CurrentPosition.YCooord == CurrentPosition.YCooord && i_step.CurrentPosition.YCooord == CurrentPosition.YCooord)) { validity = false; } return(validity); }
public static MoveType CalculateMoveType(CheckersGameStep i_requestedStep) { MoveType result = new MoveType(); int distanceY = 0; int distanceX = 0; int indexForLastLineOnBoard = 0; distanceY = Abs(i_requestedStep.RequestedPosition.YCooord - i_requestedStep.CurrentPosition.YCooord); distanceX = Abs(i_requestedStep.RequestedPosition.XCoord - i_requestedStep.CurrentPosition.XCoord); if (distanceY == 2 && distanceX == 2) { result.m_MoveType = eMoveTypes.EatMove; } else if (distanceY == 1 && distanceX == 1) { result.m_MoveType = eMoveTypes.RegularMove; } else { result.m_MoveType = eMoveTypes.Undefined; } if (distanceX > 2 || distanceY > 2 || distanceX < 1 || distanceY < 1) { result.m_MoveType = eMoveTypes.Undefined; } switch (SessionData.m_CurrentActivePlayer) { case ePlayerOptions.Player1: indexForLastLineOnBoard = 0; break; case ePlayerOptions.ComputerPlayer: case ePlayerOptions.Player2: indexForLastLineOnBoard = (int)SessionData.m_BoardSize - 1; break; } if (i_requestedStep.RequestedPosition.YCooord == indexForLastLineOnBoard) { result.KingMove = true; } else { result.KingMove = false; } return(result); }
internal void MoveSoldier(CheckersGameStep io_MoveToExecute) { Soldier theOneWeMove = GetSoldierFromMatrix(io_MoveToExecute.CurrentPosition); theOneWeMove.Position = io_MoveToExecute.RequestedPosition; m_CheckersBoard[io_MoveToExecute.CurrentPosition.YCooord, io_MoveToExecute.CurrentPosition.XCoord] = null; m_CheckersBoard[io_MoveToExecute.RequestedPosition.YCooord, io_MoveToExecute.RequestedPosition.XCoord] = theOneWeMove; if (io_MoveToExecute.MoveTypeInfo.TypeIndicator == eMoveTypes.EatMove) { Point eatenSoldierPosition = calculatePositionOfEatenSoldier(io_MoveToExecute); Soldier eatenSoldier = GetSoldierFromMatrix(eatenSoldierPosition); GameBoard gb = this; eatenSoldier.killed(gb); m_CheckersBoard[eatenSoldier.Position.YCooord, eatenSoldier.Position.XCoord] = null; } }
private static List <CheckersGameStep> resetPossibleMovesArray(int i_indexOfTopRow, Point i_CurrentSoldierPosition, ePlayerOptions i_playerId) { List <CheckersGameStep> resultPossibleMovesArray = new List <CheckersGameStep>(); CheckersGameStep stepToTheLeft = new CheckersGameStep(); CheckersGameStep stepToTheRight = new CheckersGameStep(); if (i_CurrentSoldierPosition.YCooord == i_indexOfTopRow) { Point MoveToTheLeft = new Point(); Point MoveToTheRight = new Point(); stepToTheLeft.CurrentPosition = i_CurrentSoldierPosition; stepToTheRight.CurrentPosition = i_CurrentSoldierPosition; if (i_playerId == ePlayerOptions.Player1) { MoveToTheLeft.XCoord = i_CurrentSoldierPosition.XCoord - 1; MoveToTheLeft.YCooord = i_CurrentSoldierPosition.YCooord - 1; MoveToTheRight.XCoord = i_CurrentSoldierPosition.XCoord + 1; MoveToTheRight.YCooord = i_CurrentSoldierPosition.YCooord - 1; } else { MoveToTheLeft.XCoord = i_CurrentSoldierPosition.XCoord - 1; MoveToTheLeft.YCooord = i_CurrentSoldierPosition.YCooord + 1; MoveToTheRight.XCoord = i_CurrentSoldierPosition.XCoord + 1; MoveToTheRight.YCooord = i_CurrentSoldierPosition.YCooord + 1; } stepToTheLeft.RequestedPosition = MoveToTheLeft; stepToTheRight.RequestedPosition = MoveToTheRight; if (stepToTheLeft.RequestedPosition.XCoord >= 0 && stepToTheLeft.RequestedPosition.XCoord < (int)SessionData.m_BoardSize) { resultPossibleMovesArray.Add(stepToTheLeft); } if (stepToTheRight.RequestedPosition.XCoord >= 0 && stepToTheRight.RequestedPosition.XCoord < (int)SessionData.m_BoardSize) { resultPossibleMovesArray.Add(stepToTheRight); } } return(resultPossibleMovesArray); }
public CheckersGameStep GetRandomMoveForPc() { Random stepToExecuteIndex = new Random(); CheckersGameStep returnedStep = new CheckersGameStep(); List <CheckersGameStep> arr = new List <CheckersGameStep>(); foreach (GameBoard.Soldier s in m_PlayerArmy) { foreach (CheckersGameStep step in s.m_PossibleEatMovements) { arr.Add(step); } foreach (CheckersGameStep step in s.m_PossibleRegularMovements) { arr.Add(step); } } returnedStep = arr[stepToExecuteIndex.Next(arr.Count)]; return(returnedStep); }
public void RunCheckersGame() { m_IsGameOn = true; Checkers_LogicAndDataSection.InitialGameSetting GameDemoSettings = setup();//Checkers_UI.class.setup Checkers_LogicAndDataSection.SessionData.initializeSessionData(GameDemoSettings); InitializePlayers(GameDemoSettings); InitializeGameBoard(); while (m_IsGameOn) { m_currentActivePlayer = GetNextPlayer(); while (!m_isRequestedMoveLegal) { m_RequestedMove = UI.ReadAndCheckInput(); if (Checkers_LogicAndDataSection.GameBoard.CheckIfMoveIsOk(m_RequestedMove)) { m_isRequestedMoveLegal = true; } } m_currentActivePlayer.MakeAMove(m_RequestedMove, m_CheckersBoard); //at the end of this method - we are ready to get the next move in the game } }
public void MakeAMove(CheckersGameStep m_RequestedMove, GameBoard i_CheckersBoard) { }
public CheckersGameStep.MoveType SortMoveType(CheckersGameStep i_RequestedMove, Player i_currentActivePlayer) { Soldier currentPositonSoldier = GetSoldierFromMatrix(i_RequestedMove.CurrentPosition); Soldier NextPositonSoldier = GetSoldierFromMatrix(i_RequestedMove.RequestedPosition); CheckersGameStep.MoveType result = new CheckersGameStep.MoveType(); List <CheckersGameStep> arrayOfMovements; bool validity = true; bool exists = false; if (currentPositonSoldier == null && !i_RequestedMove.WantsToQuitIndicator) { validity = false; } if (validity && currentPositonSoldier.Team != i_currentActivePlayer.Team) { validity = false; } if (validity && NextPositonSoldier != null) { validity = false; } if (validity && !i_RequestedMove.RequestedPosition.IsInsideBoard()) { validity = false; } if (validity && currentPositonSoldier.Rank != eSoldierRanks.King) { if (i_RequestedMove.RequestedPosition.YCooord > currentPositonSoldier.Position.YCooord && currentPositonSoldier.Team == ePlayerOptions.Player1) { validity = false; } else if (i_RequestedMove.RequestedPosition.YCooord < currentPositonSoldier.Position.YCooord && currentPositonSoldier.Team == ePlayerOptions.Player2) { validity = false; } } if (validity && i_currentActivePlayer.HasEatMoves() && CheckersGameStep.MoveType.CalculateMoveType(i_RequestedMove).TypeIndicator != eMoveTypes.EatMove && !i_RequestedMove.WantsToQuitIndicator) { validity = false; } if (validity) { result = CheckersGameStep.MoveType.CalculateMoveType(i_RequestedMove); if (result.TypeIndicator != eMoveTypes.Undefined) { if (currentPositonSoldier.m_PossibleEatMovements.Count != 0 && result.TypeIndicator == eMoveTypes.EatMove) { arrayOfMovements = currentPositonSoldier.eatPossibleMovements; } else { arrayOfMovements = currentPositonSoldier.regularPossibleMovements; } foreach (CheckersGameStep step in arrayOfMovements) { if (step.Equals(i_RequestedMove)) { exists = true; } } } else { arrayOfMovements = null; } } if (!validity || !exists) { result.TypeIndicator = eMoveTypes.Undefined; } return(result); }
internal void calculatePossibleMovements(ref GameBoard i_board) { m_PossibleEatMovements.Clear(); m_PossibleRegularMovements.Clear(); CheckersGameStep gameStep; List <Point> inspectedPoints = bringPossibleNeigboursPositions(m_CoordinateInMatrix); foreach (Point p in inspectedPoints) { Soldier s = i_board.GetSoldierFromMatrix(p); if (s == null) { if (Rank == eSoldierRanks.King) { gameStep = CheckersGameStep.CreateCheckersGameStep(m_CoordinateInMatrix, p); m_PossibleRegularMovements.Add(gameStep); } else { if (Team == ePlayerOptions.Player1) { if (p.YCooord - Position.YCooord < 0) { gameStep = CheckersGameStep.CreateCheckersGameStep(m_CoordinateInMatrix, p); m_PossibleRegularMovements.Add(gameStep); } } else { if (p.YCooord - Position.YCooord > 0) { gameStep = CheckersGameStep.CreateCheckersGameStep(m_CoordinateInMatrix, p); m_PossibleRegularMovements.Add(gameStep); } } } } else { Point PossibleEatingNextPosition = new Point(); Point localPointDiffrenceBetweenPoints = new Point(); localPointDiffrenceBetweenPoints.XCoord = p.XCoord - m_CoordinateInMatrix.XCoord; localPointDiffrenceBetweenPoints.YCooord = p.YCooord - m_CoordinateInMatrix.YCooord; if (Team != s.Team) { if (Rank == eSoldierRanks.King) { PossibleEatingNextPosition.XCoord = p.XCoord + localPointDiffrenceBetweenPoints.XCoord; PossibleEatingNextPosition.YCooord = p.YCooord + localPointDiffrenceBetweenPoints.YCooord; if (PossibleEatingNextPosition.IsInsideBoard()) { if (i_board.GetSoldierFromMatrix(PossibleEatingNextPosition) == null) { gameStep = CheckersGameStep.CreateCheckersGameStep(m_CoordinateInMatrix, PossibleEatingNextPosition); m_PossibleEatMovements.Add(gameStep); } } } else { if (Team == ePlayerOptions.Player1) { if (p.YCooord - Position.YCooord < 0) { PossibleEatingNextPosition.XCoord = p.XCoord + localPointDiffrenceBetweenPoints.XCoord; PossibleEatingNextPosition.YCooord = p.YCooord + localPointDiffrenceBetweenPoints.YCooord; if (PossibleEatingNextPosition.IsInsideBoard()) { if (i_board.GetSoldierFromMatrix(PossibleEatingNextPosition) == null) { gameStep = CheckersGameStep.CreateCheckersGameStep(m_CoordinateInMatrix, PossibleEatingNextPosition); m_PossibleEatMovements.Add(gameStep); } } } } else { if (p.YCooord - Position.YCooord > 0) { PossibleEatingNextPosition.XCoord = p.XCoord + localPointDiffrenceBetweenPoints.XCoord; PossibleEatingNextPosition.YCooord = p.YCooord + localPointDiffrenceBetweenPoints.YCooord; if (PossibleEatingNextPosition.IsInsideBoard()) { if (i_board.GetSoldierFromMatrix(PossibleEatingNextPosition) == null) { gameStep = CheckersGameStep.CreateCheckersGameStep(m_CoordinateInMatrix, PossibleEatingNextPosition); m_PossibleEatMovements.Add(gameStep); } } } } } } } } }