Bug 556

Summary: The object generation may lead to incorrect result at game ending judgement
Product: Chinese Checker Reporter: yutongmen2-c
Component: Algorithm ComponentAssignee: yutongmen2-c
Status: CONFIRMED ---    
Severity: minor CC: yutongmen2-c
Priority: ---    
Version: unspecified   
Hardware: All   
OS: All   

Description yutongmen2-c 2021-11-12 19:49:11 HKT
The object generation may lead to incorrect result at game ending judgement. 

Former implementation of method GameisEnd():

public static boolean GameisEnd(){
        boolean isEnd = false;
        if (Graph.getInstance().chessboard[0][0].equals(new Point(0,0,2)) &&
            Graph.getInstance().chessboard[0][1].equals(new Point(0,1,2)) &&
            Graph.getInstance().chessboard[0][2].equals(new Point(0,2,2)) &&
            Graph.getInstance().chessboard[0][3].equals(new Point(0,3,2)) &&
            Graph.getInstance().chessboard[1][0].equals(new Point(1,0,2)) &&
            Graph.getInstance().chessboard[1][1].equals(new Point(1,1,2)) &&
            Graph.getInstance().chessboard[1][2].equals(new Point(1,2,2)) &&
            Graph.getInstance().chessboard[2][0].equals(new Point(2,0,2)) &&
            Graph.getInstance().chessboard[2][1].equals(new Point(2,1,2)) &&
            Graph.getInstance().chessboard[3][0].equals(new Point(3,0,2))
            ){
            winner = 2;
            return true;
        }
        else if(Graph.getInstance().chessboard[8][8].equals(new Point(8,8,1)) &&
                Graph.getInstance().chessboard[8][7].equals(new Point(8,7,1)) &&
                Graph.getInstance().chessboard[8][6].equals(new Point(8,6,1)) &&
                Graph.getInstance().chessboard[8][5].equals(new Point(8,5,1)) &&
                Graph.getInstance().chessboard[7][8].equals(new Point(7,8,1)) &&
                Graph.getInstance().chessboard[7][7].equals(new Point(7,7,1)) &&
                Graph.getInstance().chessboard[7][6].equals(new Point(7,6,1)) &&
                Graph.getInstance().chessboard[6][8].equals(new Point(6,8,1)) &&
                Graph.getInstance().chessboard[6][7].equals(new Point(6,7,1)) &&
                Graph.getInstance().chessboard[5][8].equals(new Point(5,8,1))

        ){
            winner = 1;
            return true;
        }
        else{
            return false;
        }
    }

Modified code:

    public static boolean GameisEnd(){
        // boolean isEnd = false;
        if (Graph.getInstance().chessboard[0][0].equals(new Point(0,0,2)) &&
            Graph.getInstance().chessboard[0][1].equals(new Point(0,1,2)) &&
            Graph.getInstance().chessboard[0][2].equals(new Point(0,2,2)) &&
            Graph.getInstance().chessboard[0][3].equals(new Point(0,3,2)) &&
            Graph.getInstance().chessboard[1][0].equals(new Point(1,0,2)) &&
            Graph.getInstance().chessboard[1][1].equals(new Point(1,1,2)) &&
            Graph.getInstance().chessboard[1][2].equals(new Point(1,2,2)) &&
            Graph.getInstance().chessboard[2][0].equals(new Point(2,0,2)) &&
            Graph.getInstance().chessboard[2][1].equals(new Point(2,1,2)) &&
            Graph.getInstance().chessboard[3][0].equals(new Point(3,0,2))
            ){
            winner = 2;
            return true;
        }
        else if(Graph.getInstance().chessboard[8][8].equals(new Point(8,8,1)) &&
                Graph.getInstance().chessboard[8][7].equals(new Point(8,7,1)) &&
                Graph.getInstance().chessboard[8][6].equals(new Point(8,6,1)) &&
                Graph.getInstance().chessboard[8][5].equals(new Point(8,5,1)) &&
                Graph.getInstance().chessboard[7][8].equals(new Point(7,8,1)) &&
                Graph.getInstance().chessboard[7][7].equals(new Point(7,7,1)) &&
                Graph.getInstance().chessboard[7][6].equals(new Point(7,6,1)) &&
                Graph.getInstance().chessboard[6][8].equals(new Point(6,8,1)) &&
                Graph.getInstance().chessboard[6][7].equals(new Point(6,7,1)) &&
                Graph.getInstance().chessboard[5][8].equals(new Point(5,8,1))

        ){
            winner = 1;
            return true;
        }
        else{
            return false;
        }
    }