Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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!");
                }
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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;
            }
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
                    }
                }
            }
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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);
            }
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
 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);
 }
Esempio n. 13
0
        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);
                }
            }
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
 public void RemoveOneSoldierOnBoard(Coordination i_Coordination)
 {
     m_TheBoard[i_Coordination.GetX(), i_Coordination.GetY()] = null;
 }
Esempio n. 16
0
 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;
 }