//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); }
//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] }); } }