abstract class Rule {
    public abstract short check(Chess[][] ChessStatus);

    public abstract void eat(Chess[][] ChessStatus);
}

class GoRule extends Rule {

    @Override
    public short check(final Chess[][] ChessStatus) {
        // TODO: GO/FinishCheck
        return Const.NO_WIN;
    }

    @Override
    public void eat(Chess[][] ChessStatus) {
        // TODO: Eat Dot
    }
}

class GomokuRule extends Rule {
    // Fixme: Change to short and return who win
    @Override
    public short check(final Chess[][] ChessStatus) {
        int Row_len = ChessStatus.length, Col_len = ChessStatus[0].length;

        for (int i = 0; i < Row_len; i++) {
            for (int j = i; j < Col_len; j++) {
                if (ChessStatus[i][j] != null) {
                    int CheckPoint = i, CheckLocX = 1, CheckLocY = 1;
                    boolean CheckResault = false;
                    short nowColor = ChessStatus[i][j].getColor();

                    while (CheckPoint + 1 < Col_len && CheckPoint < j + 4) {
                        if (ChessStatus[i][CheckPoint].getColor() != nowColor) {
                            CheckResault = false;
                            break;
                        } else {
                            CheckResault = true;
                        }
                        CheckPoint++;
                    }
                    if (CheckResault == true) {
                        return true;
                    }
                    CheckPoint = i;
                    while (CheckPoint + 1 < Row_len && CheckPoint < i + 4) {
                        if (ChessStatus[CheckPoint][j].getColor() != nowColor) {
                            CheckResault = false;
                            break;
                        } else {
                            CheckResault = true;
                        }
                        CheckPoint++;
                    }
                    if (CheckResault == true) {
                        return true;
                    }
                    CheckLocX = 1;
                    CheckLocY = 1;
                    while (CheckLocX + i < Row_len && CheckLocY + j < CheckLocY) {
                        if (ChessStatus[CheckLocX + i][CheckLocY + j].getColor() != nowColor) {
                            CheckResault = false;
                            break;
                        } else {
                            CheckResault = true;
                        }
                        if (CheckLocX < 5) {
                            CheckLocX++;
                            CheckLocY++;
                        }
                    }
                    if (CheckResault == true) {
                        return true;
                    }
                    CheckLocX = 1;
                    CheckLocY = 1;
                    while (CheckLocX + i < Row_len && CheckLocY + j < CheckLocY) {
                        if (ChessStatus[CheckLocX + i][j - CheckLocY].getColor() != nowColor) {
                            CheckResault = false;
                            break;
                        } else {
                            CheckResault = true;
                        }
                        if (CheckLocX < 5) {
                            CheckLocX++;
                            CheckLocY++;
                        }
                    }
                    if (CheckResault == true) {
                        return true;
                    }else {
                        return false;
                    }
                }
            }
        }
        return false;
    }

    @Override
    @Deprecated
    public void eat(Chess[][] ChessStatus) {
        // Do nothing
    }
}

@@ -68,24 +68,47 @@
 ssStatus);%0A%0A
+%7D%0A%0Ainterface Eatable %7B%0A
     public a
@@ -106,25 +106,16 @@
  public 
-abstract 
 void eat
@@ -168,16 +168,35 @@
 ds Rule 
+implements Eatable 
 %7B%0A%0A    @
@@ -3632,111 +3632,7 @@
    %7D
-%0A%0A    @Override%0A    @Deprecated%0A    public void eat(Chess%5B%5D%5B%5D ChessStatus) %7B%0A        // Do nothing%0A    %7D
 %0A%7D%0A

Add eatable