예제 #1
0
        private int maxMin(GameBoard i_Board, GameEngien.ePlayers i_CurrenPlayer, int i_Depht, int i_MaxDeapth)
        {
            if (i_Depht == i_MaxDeapth)
            {
                return(evaluation(i_Board, i_CurrenPlayer));
            }
            else
            {
                List <Point>        moveOptions     = null;
                List <int>          sonsEvaluations = new List <int>();
                GameEngien.ePlayers OtherPlayer;

                if (i_CurrenPlayer == GameEngien.ePlayers.FirstPlayer)
                {
                    OtherPlayer = GameEngien.ePlayers.SecondPlayer;
                }
                else
                {
                    OtherPlayer = GameEngien.ePlayers.FirstPlayer;
                }

                if (i_Board.IsThereOptionsToPlay(i_CurrenPlayer, ref moveOptions))
                {
                    foreach (Point location in moveOptions)
                    {
                        sonsEvaluations.Add(maxMin(i_Board.BoardDuplicatewithNewPoint(i_Board, location, i_CurrenPlayer), OtherPlayer, i_Depht + 1, i_MaxDeapth));
                    }

                    if (i_Depht % 2 == 1)
                    {
                        return(returnMaxInt(sonsEvaluations));
                    }
                    else
                    {
                        return(returnMinInt(sonsEvaluations));
                    }
                }
                else
                {
                    return(0);
                }
            }
        }
예제 #2
0
        public Point AiTurn(GameBoard i_Board, GameEngien.ePlayers i_CurrenPlayer)
        {
            GameEngien.ePlayers OtherPlayer;
            Point        returnTurn      = null;
            List <Point> moveOptions     = null;
            List <int>   sonsEvaluations = new List <int>();

            if (i_CurrenPlayer == GameEngien.ePlayers.FirstPlayer)
            {
                OtherPlayer = GameEngien.ePlayers.SecondPlayer;
            }
            else
            {
                OtherPlayer = GameEngien.ePlayers.FirstPlayer;
            }

            if (i_Board.IsThereOptionsToPlay(i_CurrenPlayer, ref moveOptions))
            {
                foreach (Point location in moveOptions)
                {
                    sonsEvaluations.Add(maxMin(i_Board.BoardDuplicatewithNewPoint(i_Board, location, i_CurrenPlayer), OtherPlayer, 1, 6));
                }
            }

            int maxvalue = returnMaxInt(sonsEvaluations);

            for (int i = 0; i < sonsEvaluations.Count; i++)
            {
                if (sonsEvaluations[i] == maxvalue)
                {
                    returnTurn = moveOptions[i];
                }
            }

            return(returnTurn);
        }