Home‎ > ‎

Chess AI

public Move analyze(double initialScore, double alpha, double beta, boolean isBlacksMove, int depth)
    {
        ArrayList<Move> moves = new ArrayList<Move>();
        if (isBlacksMove == true)
            moves = getAllPossibleAllyMoves();
        else
            moves = getAllPossibleEnemyMoves();
        
        //SORT
        if (depth > 0)
        {
            for(int i = 0; i < moves.size(); i++)
            {
                Actor tempPiece = null;
                if (grid.get(moves.get(i).getEnd()) != null)
                    {
                        tempPiece = grid.get(moves.get(i).getEnd());
                        if (tempPiece.getColor().equals(Color.BLACK))
                            initialScore -= tempPiece.getValue();
                        else    
                            initialScore += tempPiece.getValue();
                        grid.remove(moves.get(i).getEnd());
                    }
                moves.get(i).getPiece().moveTo(moves.get(i).getEnd());
                
                moves.get(i).setStrength(scorePosition(initialScore));
                
                moves.get(i).getPiece().moveTo(moves.get(i).getStart());
                if (tempPiece != null)
                    {
                        grid.put(moves.get(i).getEnd(), tempPiece);
                        if (tempPiece.getColor().equals(Color.BLACK))
                            initialScore += tempPiece.getValue();
                        else    
                            initialScore -= tempPiece.getValue();
                    }
            }
            Collections.sort(moves);
            if (!isBlacksMove)
                Collections.reverse(moves);
        }   

//ALPHABETA
        for(int i = 0; i < moves.size(); i++)
        {
                Piece tempPiece = null;
                if (grid.get(moves.get(i).getEnd()) != null)
                {
                    tempPiece = grid.get(moves.get(i).getEnd());
                    if (tempPiece.getColor().equals(Color.BLACK))
                        initialScore -= tempPiece.getValue();
                    else    
                        initialScore += tempPiece.getValue();
                    grid.remove(moves.get(i).getEnd());
                }
                moves.get(i).getPiece().moveTo(moves.get(i).getEnd());
                
                if (i>0)
                    if (isBlacksMove)
                    {
                        if (moves.get(i-1).getStrength() > beta)
                            beta = moves.get(i-1).getStrength();
                    }
                    else
                        if (moves.get(i-1).getStrength() < alpha)
                            alpha = moves.get(i-1).getStrength();
                        
                if (depth > 0 || (temp != null && temp.getValue() <= moves.get(i).getPiece().getValue()))
                    moves.get(i).setStrength(analyze(initialScore, alpha, beta, !isBlacksMove, depth - 1).getStrength());
                else
                    moves.get(i).setStrength(scorePosition(initialScore));
                    
                moves.get(i).getPiece().moveTo(moves.get(i).getStart());
                if (tempPiece != null)
                {
                    grid.put(moves.get(i).getEnd(), tempPiece);
                    if (tempPiece.getColor().equals(Color.BLACK))
                        initialScore += tempPiece.getValue();
                    else    
                        initialScore -= tempPiece.getValue();
                }
                
                if (isBlacksMove)
                {
                    if (moves.get(i).getStrength() > alpha)
                        break;
                }
                else
                    if (moves.get(i).getStrength() < beta)
                        break;
        }
        Collections.sort(moves);
        if (!isBlacksMove)
            Collections.reverse(moves);
        return moves.get(0);
    }
Comments