private void transferToLogicTheMoveChoosed(Coordination i_Source, Coordination i_Destination) { bool isGameOver; bool isDrawGame; bool isOneMoreTurn = false; try { isOneMoreTurn = m_CheckersGameLogic.ExecuteTheMove(i_Source, i_Destination, out isGameOver, out isDrawGame); updateStatusGameOnForm(isGameOver, isDrawGame); if (isGameOver == false) { if (isOneMoreTurn == false) { if (m_CheckersGameLogic.CurrentPlayer.TypePlayer == PlayerType.RivalComputerPlayer) { m_CheckersGameLogic.ExecuteTheMove(i_Source, i_Destination, out isGameOver, out isDrawGame); updateStatusGameOnForm(isGameOver, isDrawGame); } } else { MessageBox.Show(this, "Note: Because the rule of must eat when you can, so you have one more turn!"); } } } catch (Exception generalException) { MessageBox.Show(generalException.Message); } }
public GameStep(Player i_CurrentTurnPlayer, Board i_TheBoard, Coordination i_Source, Coordination i_Destantion) // C'TOR { m_CurrentTurnPlayer = i_CurrentTurnPlayer; m_TheBoard = i_TheBoard; m_Source = i_Source; m_Destination = i_Destantion; }
private void eatAndRemoveSoldier(Coordination i_BaseCoordination, Coordination i_DestinationCoordination) { int x, y; Soldier willKillSoldier; Coordination deleteCoordination; if (i_BaseCoordination.GetX() < i_DestinationCoordination.GetX()) { x = i_BaseCoordination.GetX() + 1; } else { x = i_BaseCoordination.GetX() - 1; } if (i_BaseCoordination.GetY() < i_DestinationCoordination.GetY()) { y = i_BaseCoordination.GetY() + 1; } else { y = i_BaseCoordination.GetY() - 1; } deleteCoordination = new Coordination(x, y); willKillSoldier = m_TheBoard.GetSoliderFromCoordination(x, y); willKillSoldier.PlayerOfSoldier.SoldiersList.Remove(willKillSoldier); m_TheBoard.RemoveOneSoldierOnBoard(deleteCoordination); }
private void checkIfIsPossibleMoveAndExecuteIt(Coordination i_BaseCoordination, Coordination i_DestinationCoordination, List <BaseAndDestinationCoordinations> i_EatCoordinations) { Soldier baseSoldierToMove = m_TheBoard.GetSoliderFromCoordination(i_BaseCoordination.GetX(), i_BaseCoordination.GetY()); if (baseSoldierToMove == null) { throw new Exception("Error: Invalid source point to move!"); } else if (baseSoldierToMove.SoldierPlayerType != m_CurrentTurnPlayer.TypePlayer) { throw new Exception("Error: You cant move soldier of your rival! Please choose your soldier!"); } else { if (isValidDestination(i_BaseCoordination, i_DestinationCoordination, baseSoldierToMove, i_EatCoordinations)) { baseSoldierToMove.UpdateSoldierOnBoard(m_TheBoard, i_BaseCoordination, i_DestinationCoordination); } else { throw new Exception("Error: Invalid Move! Try Again!"); } } }
private string buildStringOfStep(Coordination i_BaseCoordination, Coordination i_DestantionCoordination) { char xBase = (char)(i_BaseCoordination.GetX() + (int)'A'); char yBase = (char)(i_BaseCoordination.GetY() + (int)'a'); char xDestantion = (char)(i_DestantionCoordination.GetX() + (int)'A'); char yDestantion = (char)(i_DestantionCoordination.GetY() + (int)'a'); string theStep = string.Format("{0}{1}>{2}{3}", xBase, yBase, xDestantion, yDestantion); return(theStep); }
public void UpdateSoldierOnBoard(Board i_Board, Coordination i_BaseCoordination, Coordination i_SoldierDestination) { this.SetCoordination(i_SoldierDestination.GetX(), i_SoldierDestination.GetY()); i_Board.UpdateOneSoldierOnBoard(this, i_BaseCoordination, i_SoldierDestination); if (this.PlayerOfSoldier.TypePlayer == PlayerType.MainRealPlayer && this.GetYCoordination() == 0) { this.TypeOfSoldier = SoldierType.KingSoldier; } if (this.PlayerOfSoldier.TypePlayer != PlayerType.MainRealPlayer && this.GetYCoordination() == i_Board.BoardSize - 1) { this.TypeOfSoldier = SoldierType.KingSoldier; } }
private bool checkIfValidEatMove(Coordination i_BaseCoordination, Coordination i_DestinationCoordination, List <BaseAndDestinationCoordinations> i_EatCoordinations) { bool isCompatableCoordinations = false; foreach (BaseAndDestinationCoordinations currentEatCoordinations in i_EatCoordinations) { if (currentEatCoordinations.BaseCoordination.GetX() == i_BaseCoordination.GetX() && currentEatCoordinations.BaseCoordination.GetY() == i_BaseCoordination.GetY() && currentEatCoordinations.DestantionCoordination.GetX() == i_DestinationCoordination.GetX() && currentEatCoordinations.DestantionCoordination.GetY() == i_DestinationCoordination.GetY()) { isCompatableCoordinations = true; break; } } return(isCompatableCoordinations); }
private void getCoordinationFromClick(ref Coordination i_Coordination, Button i_PressedButton) { int widthBoard = m_CoordinationButtons.GetLength(0); int heightBoard = m_CoordinationButtons.GetLength(1); for (int x = 0; x < widthBoard; ++x) { for (int y = 0; y < heightBoard; ++y) { if (m_CoordinationButtons[x, y].Equals(i_PressedButton)) { i_Coordination.SetCoordination(x, y); } } } }
private bool isValidDestination(Coordination i_BaseCoordination, Coordination i_DestinationCoordination, Soldier i_BaseSoldier, List <BaseAndDestinationCoordinations> i_EatCoordinations) { bool isValid = false; bool soldierIsKing = false; if (i_BaseSoldier.TypeOfSoldier == SoldierType.KingSoldier) { soldierIsKing = true; } if (i_EatCoordinations.Count == 0) { if (m_CurrentTurnPlayer.TypePlayer == PlayerType.MainRealPlayer || soldierIsKing == true) { if ((i_DestinationCoordination.GetX() == i_BaseCoordination.GetX() + 1 || i_DestinationCoordination.GetX() == i_BaseCoordination.GetX() - 1) && i_DestinationCoordination.GetY() == i_BaseCoordination.GetY() - 1 && i_DestinationCoordination.GetY() < m_TheBoard.BoardSize && i_DestinationCoordination.GetY() >= 0 && m_TheBoard.GetBoard()[i_DestinationCoordination.GetX(), i_DestinationCoordination.GetY()] == null) { isValid = true; } } if (m_CurrentTurnPlayer.TypePlayer == PlayerType.RivalComputerPlayer || m_CurrentTurnPlayer.TypePlayer == PlayerType.RivalRealPlayer || soldierIsKing == true) { if ((i_DestinationCoordination.GetX() == i_BaseCoordination.GetX() + 1 || i_DestinationCoordination.GetX() == i_BaseCoordination.GetX() - 1) && i_DestinationCoordination.GetY() == i_BaseCoordination.GetY() + 1 && i_DestinationCoordination.GetY() < m_TheBoard.BoardSize && i_DestinationCoordination.GetY() >= 0 && m_TheBoard.GetBoard()[i_DestinationCoordination.GetX(), i_DestinationCoordination.GetY()] == null) { isValid = true; } } } else { if (checkIfValidEatMove(i_BaseCoordination, i_DestinationCoordination, i_EatCoordinations) == true) { eatAndRemoveSoldier(i_BaseCoordination, i_DestinationCoordination); isValid = true; } else { throw new Exception("Error: If you have option to eat - so you must to eat!"); } } return(isValid); }
private void buttonWas_Click(object sender, EventArgs e) { Button pressedButton = sender as Button; if (!m_isButtonwasChoosen) { pressedButton.BackColor = System.Drawing.Color.LightBlue; pressedButton.Click -= buttonWas_Click; pressedButton.Click += buttonWas_ClickAgain; m_isButtonwasChoosen = true; m_CurrentSource = new Coordination(); getCoordinationFromClick(ref m_CurrentSource, pressedButton); } else if (m_isButtonwasChoosen) { m_CurrentDestination = new Coordination(); getCoordinationFromClick(ref m_CurrentDestination, pressedButton); transferToLogicTheMoveChoosed(m_CurrentSource, m_CurrentDestination); m_isButtonwasChoosen = false; buttonWas_ClickAgain(m_CoordinationButtons[m_CurrentSource.GetX(), m_CurrentSource.GetY()], null); } }
public bool ExecuteTheMove(Coordination i_Source, Coordination i_Destantion, out bool o_GameOver, out bool o_DrawGame) { bool needEatAgain = false; bool nextTurnHaveValidMoves = true; GameStep CurrentStep = new GameStep(m_CurrentTurnPlayer, m_TheBoard, i_Source, i_Destantion); needEatAgain = CurrentStep.StartStep(); if (needEatAgain == false) { changeNextPlayerTurn(); } nextTurnHaveValidMoves = m_CurrentTurnPlayer.CheckIfHaveValidMove(m_TheBoard); if (nextTurnHaveValidMoves == false) { changeNextPlayerTurn(); } o_DrawGame = checkIfIsDraw(); o_GameOver = isGameOver(o_DrawGame); return(needEatAgain); }
public BaseAndDestinationCoordinations(int i_XBase, int i_YBase, int i_XDestination, int i_YDestination) { m_BaseCoordination = new Coordination(i_XBase, i_YBase); m_DestinationCoordination = new Coordination(i_XDestination, i_YDestination); }
private void computerRandomWithoutEat() { Random randomChooseSoldier = new Random(); Random leftOrRightOrUpOrDownRandom = new Random(); Soldier chooseSoldier; Coordination chooseSoldierCoordination = new Coordination(); Coordination newDestantion = new Coordination(); int xCoordinationOfChooseSoldier; int yCoordinationOfChooseSoldier; int indexFromRandom; int leftRightUpDownChoose; bool validMove = false; while (validMove == false) { indexFromRandom = randomChooseSoldier.Next(m_CurrentTurnPlayer.SoldiersList.Count); chooseSoldier = m_CurrentTurnPlayer.SoldiersList[indexFromRandom]; xCoordinationOfChooseSoldier = chooseSoldier.GetXCoordination(); yCoordinationOfChooseSoldier = chooseSoldier.GetYCoordination(); chooseSoldierCoordination.SetCoordination(xCoordinationOfChooseSoldier, yCoordinationOfChooseSoldier); if (chooseSoldier.TypeOfSoldier == SoldierType.KingSoldier) { leftRightUpDownChoose = leftOrRightOrUpOrDownRandom.Next(1, 5); // 4 moves can if king (so random from 4) } else { leftRightUpDownChoose = leftOrRightOrUpOrDownRandom.Next(1, 3); // 2 moves can if king (so random from 2) } if (leftRightUpDownChoose == 1) { validMove = chooseSoldier.CheckMoveLeftDown(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier - 1, yCoordinationOfChooseSoldier + 1); } else { validMove = chooseSoldier.CheckMoveRightDown(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier + 1, yCoordinationOfChooseSoldier + 1); } else { if (chooseSoldier.TypeOfSoldier == SoldierType.KingSoldier) { validMove = chooseSoldier.CheckMoveRightUp(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier + 1, yCoordinationOfChooseSoldier - 1); } else { validMove = chooseSoldier.CheckMoveLeftUp(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier - 1, yCoordinationOfChooseSoldier - 1); } } } } } } else if (leftRightUpDownChoose == 2) { validMove = chooseSoldier.CheckMoveRightDown(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier + 1, yCoordinationOfChooseSoldier + 1); } else { validMove = chooseSoldier.CheckMoveLeftDown(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier - 1, yCoordinationOfChooseSoldier + 1); } else { if (chooseSoldier.TypeOfSoldier == SoldierType.KingSoldier) { validMove = chooseSoldier.CheckMoveRightUp(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier + 1, yCoordinationOfChooseSoldier - 1); } else { validMove = chooseSoldier.CheckMoveLeftUp(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier - 1, yCoordinationOfChooseSoldier - 1); } } } } } } else if (leftRightUpDownChoose == 3) { validMove = chooseSoldier.CheckMoveRightUp(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier + 1, yCoordinationOfChooseSoldier - 1); } else { validMove = chooseSoldier.CheckMoveLeftUp(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier - 1, yCoordinationOfChooseSoldier - 1); } else { validMove = chooseSoldier.CheckMoveLeftDown(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier - 1, yCoordinationOfChooseSoldier + 1); } else { validMove = chooseSoldier.CheckMoveRightDown(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier + 1, yCoordinationOfChooseSoldier + 1); } } } } } else if (leftRightUpDownChoose == 4) { validMove = chooseSoldier.CheckMoveLeftUp(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier - 1, yCoordinationOfChooseSoldier - 1); } else { validMove = chooseSoldier.CheckMoveRightUp(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier + 1, yCoordinationOfChooseSoldier - 1); } else { validMove = chooseSoldier.CheckMoveLeftDown(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier - 1, yCoordinationOfChooseSoldier + 1); } else { validMove = chooseSoldier.CheckMoveRightDown(m_TheBoard); if (validMove == true) { newDestantion.SetCoordination(xCoordinationOfChooseSoldier + 1, yCoordinationOfChooseSoldier + 1); } } } } } if (validMove == true) { chooseSoldier.UpdateSoldierOnBoard(m_TheBoard, chooseSoldierCoordination, newDestantion); } } }
private bool checkAndExecuteIfIsValidEatAgainMove(Soldier i_SoldierEatAgain, List <BaseAndDestinationCoordinations> i_SoldierNewDestantionsForEatAgain, Coordination i_PlayerBaseInput, Coordination i_PlayerDestantionInput) { bool validEatAgain = false; foreach (BaseAndDestinationCoordinations currentSoldierNewDestantionsForEatAgain in i_SoldierNewDestantionsForEatAgain) { if (currentSoldierNewDestantionsForEatAgain.DestantionCoordination.GetX() == i_PlayerDestantionInput.GetX() && currentSoldierNewDestantionsForEatAgain.DestantionCoordination.GetY() == i_PlayerDestantionInput.GetY() && i_SoldierEatAgain.GetXCoordination() == i_PlayerBaseInput.GetX() && i_SoldierEatAgain.GetYCoordination() == i_PlayerBaseInput.GetY()) { eatAndRemoveSoldier(i_PlayerBaseInput, i_PlayerDestantionInput); i_SoldierEatAgain.UpdateSoldierOnBoard(m_TheBoard, i_PlayerBaseInput, i_PlayerDestantionInput); validEatAgain = true; break; } } return(validEatAgain); }
public void RemoveOneSoldierOnBoard(Coordination i_Coordination) { m_TheBoard[i_Coordination.GetX(), i_Coordination.GetY()] = null; }
public void UpdateOneSoldierOnBoard(Soldier i_Soldier, Coordination i_BaseCoordination, Coordination i_SoldierDestination) { m_TheBoard[i_BaseCoordination.GetX(), i_BaseCoordination.GetY()] = null; m_TheBoard[i_SoldierDestination.GetX(), i_SoldierDestination.GetY()] = i_Soldier; }