使用多个课程

时间:2017-09-24 09:40:13

标签: java

我是java新手,使用udacity.com从家里学习java,他们给出了一个问题,我被困住了,无法让它工作。

项目只是检查玩家移动是否在国际象棋游戏中不受限制,然后查看女王的移动是否有效。我们必须看到这三件事应该有用。

  1. 在女王班级中,覆盖isValidMove方法
  2. 首先致电父母isValidMove以检查边界。
  3. 添加更多代码以检查女王特定的移动效度。
  4. 我有Main class,Game class,Position class,Piece class(Parent class)Queen class(child)。 我有1和3工作,但无法理解如何获得第二次工作,如果我在Piece.isValidMove之前尝试在main中调用Queen.isValidMove,则会给我错误。

    我的代码如下

    Main.java

    public class Main {
        public static void main(String[] args) {
            Piece piece = new Piece();
            Queen queen = new Queen();
            Position testPosition = new Position(3,7);
            if(queen.isValidMove(testPosition)){
                System.out.println("Yes, I can move there.");
            }
            else {
                System.out.println("Nope, can't do!");
            }
        }
    }
    

    Game.java

    public class Game {
        Piece [][] board;
        // Constructor creates an empty board
        Game(){
            board = new Piece[8][8];
        }
    }
    

    Position.java

    public class Position {
        int row;
        int column;
        // Constructor using row and column values
        Position(int r, int c){
            this.row = r;
            this.column = c;
        }
    }
    

    Piece.java

    public class Piece {
        Position position;
    
        boolean isValidMove(Position newPosition){
            if(position.row>0 && position.column>0
                    && position.row<8 && position.column<8){
                return true;
            }
            else{
                return false;
            }
        }
    }
    

    Queen.java

    public class Queen extends Piece {
        int row;
        int column;
        boolean isValidMove(Position newPosition){
            if(newPosition.column == this.column || newPosition.row == this.row|| Math.abs(newPosition.column - this.column) == Math.abs(newPosition.row - this.row)){
                return true;
            }
            else{
                return false;
            }
        }
    }
    

    谢谢。

1 个答案:

答案 0 :(得分:1)

  

但是如果我在Queen.isValidMove之前尝试在main中调用Piece.isValidMove,则无法理解如何获得第二次工作会给我错误

该任务表示您需要致电isValidMove中的父Queen.isValidMove,而不是Main。您需要的语法是super.isValidMove。所以在Queen.java中,请执行

boolean isValidMove(Position newPosition){
    // combine super.isValidMove(newPosition) and your current code
}

您不需要更改Main