Beispiel #1
0
        //evaluation function for picking a piece (opposite of playing a piece)
        public double StaticPickEvaluate(Board b, Piece p, AvailablePieces a)
        {
            List <int[]> playableLocations = b.GetOpenSpots();
            double       value             = 0;

            foreach (int[] i in playableLocations)
            {
                AvailablePieces temp = a.Copy();
                temp.RemovePiece(p);
                if (StaticPlayEvaluate(b, p, i, temp) > value)
                {
                    value = StaticPlayEvaluate(b, p, i, temp);
                }
                //value += StaticPlayEvaluate(b, p, i, temp);
            }
            return(value);
        }
Beispiel #2
0
        //MinMax pick algorithm
        //[piece, value]
        public object[] MinMaxPick(Board b, AvailablePieces av, int depth, double value, bool opponent)
        {
            Piece           p    = PickPiece(b, av);
            AvailablePieces copy = av.Copy();

            value -= StaticPickEvaluate(b, p, av);

            if (depth == 0)
            {
                if (value == 0)
                {
                    value = 0.0;
                }
                return(new object[] { p, value });
            }
            else
            {
                copy.RemovePiece(p);
                object[] evaluation = MinMaxPlay(b, p, av, depth - 1, value, !opponent);
                return(new object[] { p, evaluation[2] });
            }
        }