设计一个中国象棋游戏,ChessPiece为抽象类,提供代表一个棋子位置的属性和方法,和isMoveLegal();设计ChessPiece的具体实现类(如车,马,帅等)

设计一个中国象棋游戏,ChessPiece为抽象类,提供代表一个棋子位置的属性和方法,和isMoveLegal();设计ChessPiece的具体实现类(如车,马,帅等),这些类能够根据自身特点实现不同的isMoveLegal()。

很多移动合法性没有写,只能说勉强写了一个大概的能玩的,用的全是java基础的继承多态写的

也没有用图形化界面

父类

package nchuplay.demo;

public abstract class ChessPiece {
    private int x;
    private int y;       //棋的初始位置
    private boolean color;  //红true,黑false
    private boolean survive;  //是否存活

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public ChessPiece() {
    }

    public ChessPiece(int x, int y, boolean color, boolean survive) {
        this.x = x;
        this.y = y;
        this.color = color;
        this.survive = survive;
    }

    public ChessPiece(int x, int y, boolean color, boolean survive, String name) {
        this.x = x;
        this.y = y;
        this.color = color;
        this.survive = survive;
        this.name = name;
    }

    public boolean isColor() {
        return color;
    }

    public void setColor(boolean color) {
        this.color = color;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public boolean isSurvive() {
        return survive;
    }

    public void setSurvive(boolean survive) {
        this.survive = survive;
    }

    //检验移动合法性
    //行为:移动
    //行为:吃棋子,和被其它棋子吃
    public void move(int i,int j){
        int initial_x=getX();
        int initial_y=getY();
        boolean k=inspectionMove(i,j);
        System.out.println("移动棋子");//sout
    }

    public void move(ChessBoardQP qp,String d){}

    public void move(ChessBoardQP qp,int d){}

    public boolean inspectionMove(){
        System.out.println("检验合法性");
        return true;
    }
    public boolean inspectionMove(ChessBoardQP qp,String d){
        System.out.println("检验合法性");
        return true;
    }

    public boolean inspectionMove(ChessBoardQP qp,int d){
        System.out.println("检验合法性");
        return true;
    }

    public boolean inspectionMove(ChessBoardQP qp,String d,int D){
        return true;
    }

    public void move(ChessBoardQP qp, String d ,int D){}

    public boolean inspectionMove(int i,int j){
        int initial_x=getX();
        int initial_y=getY();
        System.out.println("检验合法性");
        return true;
    }

    public void beEat(ChessPiece be_eat){
        System.out.println("被吃了");
        setSurvive(false);
    }

    public void eat(ChessBoardQP qp,ChessPiece qz){
        System.out.println("吃掉了xxx");
    }


}

 小兵

package nchuplay.demo;

public class SoldierXB extends ChessPiece {  //小兵



    public SoldierXB() {
    }

    public SoldierXB(int x, int y, boolean color, boolean survive) {
        super(x, y, color, survive);
    }

    public SoldierXB(int x, int y, boolean color, boolean survive, String name) {
        super(x, y, color, survive, name);
    }

    public void move(ChessBoardQP qp, String d){
        int initial_x=getX();
        int initial_y=getY();
        int last_x=initial_x;
        int last_y=initial_y;
        //System.out.println(last_x);
        //System.out.println(last_y);
        //System.out.println("xyy");
        if(isSurvive()){
            //System.out.println("xyy");
            switch (d) {
                case "1" -> {
                    if (inspectionMove(qp, d)) {
                        //qp.Q[initial_x][initial_y] = null;  //改变位置
                        last_x = initial_x;
                        last_y = initial_y + 1;
                        System.out.println("向上移动一格");
                        break;
                    }

                    System.out.println("无法移动");
                }
                case "2" -> {
                    if (inspectionMove(qp, d)) {
                        //qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x;
                        last_y = initial_y - 1;
                        System.out.println("向后移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "3" -> {
                    if (inspectionMove(qp, d)) {
                        //qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x - 1;
                        last_y = initial_y;
                        System.out.println("向左移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "4" -> {
                    if (inspectionMove(qp, d)) {
                        //qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x + 1;
                        last_y = initial_y;
                        System.out.println("向右移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                default -> {
                }
            }
        }
        else return;
        //更新位置
        setX(last_x);
        setY(last_y);
        qp.Q[last_x][last_y]=qp.Q[initial_x][initial_y];
        qp.Q[initial_x][initial_y] = null;
    }


    public boolean inspectionMove(ChessBoardQP qp,String d){
        int initial_x=getX();
        int initial_y=getY();
        int last_x;
        int last_y;
        if(isSurvive()){
            System.out.println("1:向上  2:向下  3:向左  4:向右");
            switch(d){
                case "1":
                   // System.out.println("巴啦啦");
                    last_x=initial_x;
                    last_y=initial_y+1;
                    if(last_x<0|last_x>9)return false;if(last_y<0|last_y>10)return false;
                    return true;
                case "2":
                    // System.out.println("巴啦啦");
                    last_x=initial_x;
                    last_y=initial_y-1;
                    if(last_x<0|last_x>9)return false;if(last_y<0|last_y>10)return false;
                    return true;
                case "3":
                    last_x=initial_x-1;
                    last_y=initial_y;
                    if(last_x<0|last_x>9)return false;if(last_y>10)return false;
                    return true;
                case "4":
                    last_x=initial_x+1;
                    last_y=initial_y;
                    if(last_x<0|last_x>9)return false;if(last_y>10)return false;
                    return true;
                default:break;
            }
        }
        else
            return false;
        return false;
    }

    public void beEat(ChessPiece be_eat){
        setSurvive(false);
        System.out.println("被吃了");
    }

    public void eat(ChessBoardQP qp,ChessPiece qz){

        int last_x=getX();
        int last_y=getY();
        System.out.println(last_x);
        System.out.println(last_y);
        //qp.Q[last_x][last_y] = null;
        qp.Q[last_x][last_y]=qz;                  //捕食者覆盖
        System.out.println("吃掉了XXX");

    }

}

车 

package nchuplay.demo;
//车
public class Cart extends ChessPiece{

    public Cart() {
    }

    public Cart(int x, int y, boolean color, boolean survive) {
        super(x, y, color, survive);
    }

    public Cart(int x, int y, boolean color, boolean survive, String name) {
        super(x, y, color, survive, name);
    }

    public void move(ChessBoardQP qp, String d , int D){
        int initial_x=getX();
        int initial_y=getY();
        int last_x=initial_x;
        int last_y=initial_y;
        if(isSurvive()){
            System.out.println("1:向上  2:向下  3:向左  4:向右");
            switch (d) {
                case "1" -> {
                    if (inspectionMove(qp, d, D)) {
                        //qp.Q[initial_x][initial_y] = null;  //改变位置
                        last_x = initial_x;
                        last_y = initial_y + D;
                        System.out.println("向左移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "2" -> {
                    if (inspectionMove(qp, d, D)) {
                        //qp.Q[initial_x][initial_y] = null;  //改变位置
                        last_x = initial_x;
                        last_y = initial_y - D;
                        System.out.println("向后移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "3" -> {
                    if (inspectionMove(qp, d ,D)) {
                    //    qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x - D;
                        last_y = initial_y;
                        System.out.println("向左移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "4" -> {
                    if (inspectionMove(qp, d, D)) {
                       // qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x + D;
                        last_y = initial_y;
                        System.out.println("向右移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                default -> {
                }
            }
        }
        else return;
        //更新位置
        setX(last_x);
        setY(last_y);
        qp.Q[last_x][last_y]=qp.Q[initial_x][initial_y];
        qp.Q[initial_x][initial_y] = null;
    }


    public boolean inspectionMove(ChessBoardQP qp,String d,int D){
        int initial_x=getX();
        int initial_y=getY();
        int last_x;
        int last_y;
        if(isSurvive()){
            switch (d) {
                case "1" -> {
                    last_x = initial_x;
                    last_y = initial_y + D;
                    if (last_x < 0 | last_x > 9) return false;
                    if (last_y < 0 | last_y > 10) return false;
                    return true;
                }
                case "2" -> {
                    last_x = initial_x;
                    last_y = initial_y - D;
                    if (last_x < 0 | last_x > 9) return false;
                    if (last_y < 0 | last_y > 10) return false;
                    return true;
                }
                case "3" -> {
                    last_x = initial_x - D;
                    last_y = initial_y;
                    if (last_x < 0 | last_x > 9) return false;
                    if (last_y > 10) return false;
                    return true;
                }
                case "4" -> {
                    last_x = initial_x + D;
                    last_y = initial_y;
                    if (last_x < 0 | last_x > 9) return false;
                    if (last_y > 10) return false;
                    return true;
                }
                default -> {
                }
            }
        }
        else
            return false;
        return false;
    }

    public void beEat(ChessPiece be_eat){
        setSurvive(false);
        System.out.println("被吃了");
    }

    public void eat(ChessBoardQP qp,ChessPiece qz){

        int last_x=getX();
        int last_y=getY();
        qp.Q[last_x][last_y].setSurvive(false);   //被吃者标记为死
        qp.Q[last_x][last_y]=qz;                  //捕食者覆盖
        System.out.println("吃掉了XXX");

    }
}

护卫 

package nchuplay.demo;

public class BodyguardHW extends ChessPiece{

    public BodyguardHW() {
    }

    public BodyguardHW(int x, int y, boolean color, boolean survive) {
        super(x, y, color, survive);
    }

    public BodyguardHW(int x, int y, boolean color, boolean survive, String name) {
        super(x, y, color, survive, name);
    }

    public void move(ChessBoardQP qp, String d){
        int initial_x=getX();
        int initial_y=getY();
        int last_x=initial_x;
        int last_y=initial_y;
        if(isSurvive()){
            System.out.println("1:向右上  2:向上  3:向左上  4:向左  5:向左下  6:向下  7:向右下  8:向右");
            switch (d) {
                case "1" -> {
                    if (inspectionMove(qp, d)) {
                       // qp.Q[initial_x][initial_y] = null;  //改变位置
                        last_x = initial_x + 1;
                        last_y = initial_y + 1;
                        System.out.println("右上移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "2" -> {
                    if (inspectionMove(qp, d)) {
                       // qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x;
                        last_y = initial_y + 1;
                        System.out.println("向上移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "3" -> {
                    if (inspectionMove(qp, d)) {
                       // qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x - 1;
                        last_y = initial_y + 1;
                        System.out.println("向左上移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "4" -> {
                    if (inspectionMove(qp, d)) {
                       // qp.Q[initial_x][initial_y] = null;  //改变位置
                        last_x = initial_x - 1;
                        last_y = initial_y;
                        System.out.println("向左移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "5" -> {
                    if (inspectionMove(qp, d)) {
                      //  qp.Q[initial_x][initial_y] = null;  //改变位置
                        last_x = initial_x - 1;
                        last_y = initial_y - 1;
                        System.out.println("向左下移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "6" -> {
                    if (inspectionMove(qp, d)) {
                       // qp.Q[initial_x][initial_y] = null;  //改变位置
                        last_x = initial_x;
                        last_y = initial_y - 1;
                        System.out.println("向下移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "7" -> {
                    if (inspectionMove(qp, d)) {
                       // qp.Q[initial_x][initial_y] = null;  //改变位置
                        last_x = initial_x + 1;
                        last_y = initial_y - 1;
                        System.out.println("向右下移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "8" -> {
                    if (inspectionMove(qp, d)) {
                       // qp.Q[initial_x][initial_y] = null;  //改变位置
                        last_x = initial_x + 1;
                        last_y = initial_y;
                        System.out.println("向右移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                default -> {
                }
            }
        }
        else return;
        //更新位置=
        setX(last_x);
        setY(last_y);
        qp.Q[last_x][last_y]=qp.Q[initial_x][initial_y];
        qp.Q[initial_x][initial_y] = null;
    }


    public boolean inspectionMove(ChessBoardQP qp,String d){
        int initial_x=getX();
        int initial_y=getY();
        int last_x;
        int last_y;
        if(isSurvive()){
            switch (d) {
                case "1" -> {
                    last_x = initial_x + 1;
                    last_y = initial_y + 2;
                    if(isSurvive()){
                        if (last_x > 6 | last_x < 2 | last_y < 0 | last_y > 2) return false;
                    }
                    else{
                        if (last_x > 6 | last_x < 2 | last_y < 7 | last_y > 9) return false;
                    }
                    return true;
                }
                case "2" -> {
                    last_x = initial_x - 1;
                    last_y = initial_y;
                    if(isSurvive()){
                        if (last_x > 6 | last_x < 2 | last_y < 0 | last_y > 2) return false;
                    }
                    else{
                        if (last_x > 6 | last_x < 2 | last_y < 7 | last_y > 9) return false;
                    }
                    return true;
                }
                case "3" -> {
                    last_x = initial_x + 1;
                    last_y = initial_y;
                    if(isSurvive()){
                        if (last_x > 6 | last_x < 2 | last_y < 0 | last_y > 2) return false;
                    }
                    else{
                        if (last_x > 6 | last_x < 2 | last_y < 7 | last_y > 9) return false;
                    }
                    return true;
                }
                case "4" -> {
                    last_x = initial_x - 2;
                    last_y = initial_y - 1;
                    if(isSurvive()){
                        if (last_x > 6 | last_x < 2 | last_y < 0 | last_y > 2) return false;
                    }
                    else{
                        if (last_x > 6 | last_x < 2 | last_y < 7 | last_y > 9) return false;
                    }
                    return true;
                }
                case "5" -> {
                    last_x = initial_x - 1;
                    last_y = initial_y - 2;
                    if(isSurvive()){
                        if (last_x > 6 | last_x < 2 | last_y < 0 | last_y > 2) return false;
                    }
                    else{
                        if (last_x > 6 | last_x < 2 | last_y < 7 | last_y > 9) return false;
                    }
                    return true;
                }
                case "6" -> {
                    last_x = initial_x + 1;
                    last_y = initial_y - 2;
                    if(isSurvive()){
                        if (last_x > 6 | last_x < 2 | last_y < 0 | last_y > 2) return false;
                    }
                    else{
                        if (last_x > 6 | last_x < 2 | last_y < 7 | last_y > 9) return false;
                    }
                    return true;
                }
                case "7" -> {
                    last_x = initial_x + 2;
                    last_y = initial_y - 1;
                    if(isSurvive()){
                        if (last_x > 6 | last_x < 2 | last_y < 0 | last_y > 2) return false;
                    }
                    else{
                        if (last_x > 6 | last_x < 2 | last_y < 7 | last_y > 9) return false;
                    }
                    return true;
                }
                case "8" -> {
                    last_x = initial_x + 2;
                    last_y = initial_y + 1;
                    if(isSurvive()){
                        if (last_x > 6 | last_x < 2 | last_y < 0 | last_y > 2) return false;
                    }
                    else{
                        if (last_x > 6 | last_x < 2 | last_y < 7 | last_y > 9) return false;
                    }
                    return true;
                }
                default -> {
                }
            }
        }
        else return false;
        return false;
    }

    public void beEat(ChessPiece be_eat){
        setSurvive(false);
        System.out.println("被吃了");
    }

    public void eat(ChessBoardQP qp,ChessPiece qz){
        int last_x=getX();
        int last_y=getY();
        qp.Q[last_x][last_y].setSurvive(false);   //被吃者标记为死
        qp.Q[last_x][last_y]=qz;                  //捕食者覆盖
        System.out.println("吃掉了XXX");
    }
}

大炮 

package nchuplay.demo;

public class CannonDP extends ChessPiece{

    public CannonDP() {
    }

    public CannonDP(int x, int y, boolean color, boolean survive) {
        super(x, y, color, survive);
    }

    public CannonDP(int x, int y, boolean color, boolean survive, String name) {
        super(x, y, color, survive, name);
    }

    public void move(ChessBoardQP qp, String d , int D){
        int initial_x=getX();
        int initial_y=getY();
        int last_x=initial_x;
        int last_y=initial_y;
        if(isSurvive()){
            System.out.println("1:向上  2:向下  3:向左  4:向右");
            switch (d) {
                case "1" -> {
                    if (inspectionMove(qp, d, D)) {
                       // qp.Q[initial_x][initial_y] = null;  //改变位置
                        last_x = initial_x;
                        last_y = initial_y + D;
                        System.out.println("向左移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "2" -> {
                    if (inspectionMove(qp, d, D)) {
                     //   qp.Q[initial_x][initial_y] = null;  //改变位置
                        last_x = initial_x;
                        last_y = initial_y - D;
                        System.out.println("向后移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "3" -> {
                    if (inspectionMove(qp, d ,D)) {
                       // qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x - D;
                        last_y = initial_y;
                        System.out.println("向左移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "4" -> {
                    if (inspectionMove(qp, d, D)) {
                     //  qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x + D;
                        last_y = initial_y;
                        System.out.println("向右移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                default -> {
                }
            }
        }
        else return;
        //更新位置
        setX(last_x);
        setY(last_y);
        qp.Q[last_x][last_y]=qp.Q[initial_x][initial_y];
        qp.Q[initial_x][initial_y] = null;
    }


    public boolean inspectionMove(ChessBoardQP qp,String d,int D){
        int initial_x=getX();
        int initial_y=getY();
        int last_x;
        int last_y;
        if(isSurvive()){
            switch (d) {
                case "1" -> {
                    last_x = initial_x;
                    last_y = initial_y + D;
                    int count=0;
                    for(int i=1;i<D;i++){
                        if (qp.Q[initial_x][initial_y+i]!=null) {
                            count++;
                        }
                    }
                    //if (count!=1) return false;
                    if (last_x > 9) return false;
                    if (last_y < 0 | last_y > 10) return false;
                    return true;
                }
                case "2" -> {
                    last_x = initial_x;
                    last_y = initial_y - D;
                    int count=0;
                    for(int i=1;i<D;i++){
                        if (qp.Q[initial_x][initial_y-i]!=null) {
                            count++;
                        }
                    }
                    //if (count!=1) return false;
                    if (last_x > 9) return false;
                    if (last_y < 0 | last_y > 10) return false;
                    return true;
                }
                case "3" -> {
                    last_x = initial_x - D;
                    last_y = initial_y;
                    int count=0;
                    for(int i=1;i<D;i++){
                        if (qp.Q[initial_x-i][initial_y]!=null) {
                            count++;
                        }
                    }
                    //if (count!=1) return false;
                    if (last_x < 0 | last_x > 9) return false;
                    if (last_y > 10) return false;
                    return true;
                }
                case "4" -> {
                    last_x = initial_x + D;
                    last_y = initial_y;
                    int count=0;
                    for(int i=1;i<D;i++){
                        if (qp.Q[initial_x+i][initial_y]!=null) {
                            count++;
                        }
                    }
                   // if (count!=1) return false;
                    if (last_x < 0 | last_x > 9) return false;
                    if (last_y > 10) return false;
                    return true;
                }
                default -> {
                }
            }
        }
        else
            return false;
        return false;
    }

    //public boolean inspectionMoveDPJZ(){return true}

    public void beEat(ChessPiece be_eat){
        setSurvive(false);
        System.out.println("被吃了");
    }

    public void eat(ChessBoardQP qp,ChessPiece qz){

        int last_x=getX();
        int last_y=getY();
        qp.Q[last_x][last_y].setSurvive(false);   //被吃者标记为死
        qp.Q[last_x][last_y]=qz;                  //捕食者覆
        System.out.println("吃掉了XXX");

    }
}

 将军/帅

package nchuplay.demo;

public class CheckmateJJ extends ChessPiece{

    public CheckmateJJ() {
    }

    public CheckmateJJ(int x, int y, boolean color, boolean survive) {
        super(x, y, color, survive);
    }

    public CheckmateJJ(int x, int y, boolean color, boolean survive, String name) {
        super(x, y, color, survive, name);
    }

    public void move(ChessBoardQP qp, String d){
        int initial_x=getX();
        int initial_y=getY();
        int last_x=initial_x;
        int last_y=initial_y;
        if(isSurvive()){
            System.out.println("1:向上  2:向下  3:向左  4:向右");
            switch (d) {
                case "1" -> {
                    if (inspectionMove(qp, d)) {
                        //qp.Q[initial_x][initial_y] = null;  //原来所处的位置滞空
                        last_x = initial_x;
                        last_y = initial_y + 1;
                        System.out.println("向前移动一格");
                        break;
                    }
                    System.out.println("移动不合法");
                }
                case "2" -> {
                    if (inspectionMove(qp, d)) {
                       // qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x;
                        last_y = initial_y - 1;
                        System.out.println("向后移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "3" -> {
                    if (inspectionMove(qp, d)) {
                     //   qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x - 1;
                        last_y = initial_y;
                        System.out.println("向左移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "4" -> {
                    if (inspectionMove(qp, d)) {
                      //  qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x + 1;
                        last_y = initial_y;
                        System.out.println("向右移动一格");
                        break;
                    }
                    System.out.println("无法移动");
                }
                default -> {
                }
            }
        }
        else return;
        //更新位置
        setX(last_x);
        setY(last_y);
        qp.Q[last_x][last_y]=qp.Q[initial_x][initial_y];
        qp.Q[initial_x][initial_y] = null;
    }


    public boolean inspectionMove(ChessBoardQP qp,String d){
        int initial_x=getX();
        int initial_y=getY();
        int last_x;
        int last_y;
        if(isSurvive()){
            switch (d) {
                case "1" -> {
                    last_x = initial_x;
                    last_y = initial_y + 1;
                    if(isSurvive()){
                        if (last_x > 6 | last_x < 2 | last_y < 0 | last_y > 2) return false;
                    }
                    else{
                        if (last_x > 6 | last_x < 2 | last_y < 7 | last_y > 9) return false;
                    }
                    return true;
                }
                case "2" -> {
                    last_x = initial_x;
                    last_y = initial_y - 1;
                    if(isSurvive()){
                        if (last_x > 6 | last_x < 2 | last_y < 0 | last_y > 2) return false;
                    }
                    else{
                        if (last_x > 6 | last_x < 2 | last_y < 7 | last_y > 9) return false;
                    }
                    return true;
                }
                case "3" -> {
                    last_x = initial_x - 1;
                    last_y = initial_y;
                    if(isSurvive()){
                        if (last_x > 6 | last_x < 2 | last_y < 0 | last_y > 2) return false;
                    }
                    else{
                        if (last_x > 6 | last_x < 2 | last_y < 7 | last_y > 9) return false;
                    }
                    return true;
                }
                case "4" -> {
                    last_x = initial_x + 1;
                    last_y = initial_y;
                    if(isSurvive()){
                        if (last_x > 6 | last_x < 2 | last_y < 0 | last_y > 2) return false;
                    }
                    else{
                        if (last_x > 6 | last_x < 2 | last_y < 7 | last_y > 9) return false;
                    }
                    return true;
                }
                default -> {
                }
            }
        }
        else return false;
        return false;
    }

    public void beEat(ChessPiece be_eat){
        setSurvive(false);
        System.out.println("被吃了");
    }

    public void eat(ChessBoardQP qp,ChessPiece qz){

        int last_x=getX();
        int last_y=getY();
        qp.Q[last_x][last_y].setSurvive(false);   //被吃者标记为死
        qp.Q[last_x][last_y]=qz;                  //捕食者覆盖
        System.out.println("吃掉了XXX");

    }
}

 马

package nchuplay.demo;
//马
public class Horse extends ChessPiece{

        public Horse() {
        }

        public Horse(int x, int y, boolean color, boolean survive) {
            super(x, y, color, survive);
        }

    public Horse(int x, int y, boolean color, boolean survive, String name) {
        super(x, y, color, survive, name);
    }

    public void move(ChessBoardQP qp, String d){
            int initial_x=getX();
            int initial_y=getY();
            int last_x=initial_x;
            int last_y=initial_y;
            if(isSurvive()){
                System.out.println("1:向右上  2:向上  3:向左上  4:向左  5:向左下  6:向下  7:向右下  8:向右");
                switch (d) {
                    case "1" -> {
                        if (inspectionMove(qp, d)) {
                            //qp.Q[initial_x][initial_y] = null;  //改变位置
                            last_x = initial_x+1;
                            last_y = initial_y + 2;
                            System.out.println("向右上移动一格");
                            break;
                        }
                        System.out.println("无法移动");
                    }
                    case "2" -> {
                        if (inspectionMove(qp, d)) {
                            //qp.Q[initial_x][initial_y] = null;
                            last_x = initial_x - 1;
                            last_y = initial_y + 2;
                            System.out.println("向上移动一格");
                            break;
                        }
                        System.out.println("无法移动");
                    }
                    case "3" -> {
                        if (inspectionMove(qp, d)) {
                            //qp.Q[initial_x][initial_y] = null;
                            last_x = initial_x - 2;
                            last_y = initial_y + 1;
                            System.out.println("向左上移动一格");
                            break;
                        }
                        System.out.println("无法移动");
                    }
                    case "4" -> {
                        if (inspectionMove(qp, d)) {
                           // qp.Q[initial_x][initial_y] = null;  //改变位置
                            last_x = initial_x - 2;
                            last_y = initial_y - 1;
                            System.out.println("向左移动一格");
                            break;
                        }
                        System.out.println("无法移动");
                    }
                    case "5" -> {
                        if (inspectionMove(qp, d)) {
                            //qp.Q[initial_x][initial_y] = null;  //改变位置
                            last_x = initial_x - 1;
                            last_y = initial_y - 2;
                            System.out.println("向左下移动一格");
                            break;
                        }
                        System.out.println("无法移动");
                    }
                    case "6" -> {
                        if (inspectionMove(qp, d)) {
                            //qp.Q[initial_x][initial_y] = null;  //改变位置
                            last_x = initial_x + 1;
                            last_y = initial_y - 2;
                            System.out.println("向下移动一格");
                            break;
                        }
                        System.out.println("无法移动");
                    }
                    case "7" -> {
                        if (inspectionMove(qp, d)) {
                            //qp.Q[initial_x][initial_y] = null;  //改变位置
                            last_x = initial_x + 2;
                            last_y = initial_y - 1;
                            System.out.println("向右下移动一格");
                            break;
                        }
                        System.out.println("无法移动");
                    }
                    case "8" -> {
                        if (inspectionMove(qp, d)) {
                            //qp.Q[initial_x][initial_y] = null;  //改变位置
                            last_x = initial_x + 2;
                            last_y = initial_y + 1;
                            System.out.println("向右移动一格");
                            break;
                        }
                        System.out.println("无法移动");
                    }
                    default -> {
                    }
                }
            }
            else return;
            //更新位置=
            setX(last_x);
            setY(last_y);
            qp.Q[last_x][last_y]=qp.Q[initial_x][initial_y];
            qp.Q[initial_x][initial_y] = null;
        }


        public boolean inspectionMove(ChessBoardQP qp,String d){
            int initial_x=getX();
            int initial_y=getY();
            int last_x;
            int last_y;
            if(isSurvive()){
                switch (d) {
                    case "1" -> {
                        last_x = initial_x + 1;
                        last_y = initial_y + 2;
                        if (last_x < 0 | last_x > 9) return false;
                        if (last_y < 0 | last_y > 10) return false;
                        return true;
                    }
                    case "2" -> {
                        last_x = initial_x - 1;
                        last_y = initial_y;
                        if (last_x < 0 | last_x > 9) return false;
                        if (last_y < 0 | last_y > 10) return false;
                        return true;
                    }
                    case "3" -> {
                        last_x = initial_x + 1;
                        last_y = initial_y;
                        if (last_x < 0 | last_x > 9) return false;
                        if (last_y < 0 | last_y > 10) return false;
                        return true;
                    }
                    case "4" -> {
                        last_x = initial_x - 2;
                        last_y = initial_y - 1;
                        if (last_x < 0 | last_x > 9) return false;
                        if (last_y < 0 | last_y > 10) return false;
                        return true;
                    }
                    case "5" -> {
                        last_x = initial_x - 1;
                        last_y = initial_y - 2;
                        if (last_x < 0 | last_x > 9) return false;
                        if (last_y < 0 | last_y > 10) return false;
                        return true;
                    }
                    case "6" -> {
                        last_x = initial_x + 1;
                        last_y = initial_y - 2;
                        if (last_x < 0 | last_x > 9) return false;
                        if (last_y < 0 | last_y > 10) return false;
                        return true;
                    }
                    case "7" -> {
                        last_x = initial_x + 2;
                        last_y = initial_y - 1;
                        if (last_x < 0 | last_x > 9) return false;
                        if (last_y < 0 | last_y > 10) return false;
                        return true;
                    }
                    case "8" -> {
                        last_x = initial_x + 2;
                        last_y = initial_y + 1;
                        if (last_x < 0 | last_x > 9) return false;
                        if (last_y < 0 | last_y > 10) return false;
                        return true;
                    }
                    default -> {
                    }
                }
            }
            else return false;
            return false;
        }

        public void beEat(ChessPiece be_eat){
            setSurvive(false);
            System.out.println("被吃了");
        }

        public void eat(ChessBoardQP qp,ChessPiece qz){
            int last_x=getX();
            int last_y=getY();
                qp.Q[last_x][last_y].setSurvive(false);   //被吃者标记为死
                qp.Q[last_x][last_y]=qz;                  //捕食者覆盖
            System.out.println("吃掉了XXX");

        }

}

 大象

package nchuplay.demo;
//大象
public class Item extends ChessPiece{

    public Item() {
    }

    public Item(int x, int y, boolean color, boolean survive) {
        super(x, y, color, survive);
    }

    public Item(int x, int y, boolean color, boolean survive, String name) {
        super(x, y, color, survive, name);
    }

    public void move(ChessBoardQP qp, String d){
        int initial_x=getX();
        int initial_y=getY();
        int last_x=initial_x;
        int last_y=initial_y;
        if(isSurvive()){
            System.out.println("1:向右上  2:向左上  3:向左下  4:向右下");
            switch (d) {
                case "1" -> {
                    if (inspectionMove(qp, d)) {
                       // qp.Q[initial_x][initial_y] = null;  //改变位置
                        last_x = initial_x + 4;
                        last_y = initial_y + 4;
                        System.out.println("向右上移动");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "2" -> {
                    if (inspectionMove(qp, d)) {
                      //  qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x - 4;
                        last_y = initial_y + 4;
                        System.out.println("向左上移动");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "3" -> {
                    if (inspectionMove(qp, d)) {
                      //  qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x - 4;
                        last_y = initial_y - 4;
                        System.out.println("向左下移动");
                        break;
                    }
                    System.out.println("无法移动");
                }
                case "4" -> {
                    if (inspectionMove(qp, d)) {
                     //   qp.Q[initial_x][initial_y] = null;
                        last_x = initial_x + 4;
                        last_y = initial_y - 4;
                        System.out.println("向右下移动");
                        break;
                    }
                    System.out.println("无法移动");
                }
                default -> {
                }
            }
        }
        else return;
        //更新位置
        setX(last_x);
        setY(last_y);
        qp.Q[last_x][last_y]=qp.Q[initial_x][initial_y];
        qp.Q[initial_x][initial_y] = null;
    }


    public boolean inspectionMove(ChessBoardQP qp,String d){
        int initial_x=getX();
        int initial_y=getY();
        int last_x=initial_x;
        int last_y=initial_y;
        if(isSurvive()){
            switch (d) {
                case "1" -> {
                    last_x = initial_x + 4;
                    last_y = initial_y + 4;
                    if (last_x < 0 | last_x > 9) return false;
                    if (last_y < 0 | last_y > 10) return false;
                    return true;
                }
                case "2" -> {
                    last_x = initial_x - 4;
                    last_y = initial_y + 4;
                    if (last_x < 0 | last_x > 9) return false;
                    if (last_y < 0 | last_y > 10) return false;
                    return true;
                }
                case "3" -> {
                    last_x = initial_x - 4;
                    last_y = initial_y - 4;
                    if (last_x < 0 | last_x > 9) return false;
                    if (last_y < 0 | last_y > 10) return false;
                    return true;
                }
                case "4" -> {
                    last_x = initial_x + 4;
                    last_y = initial_y - 4;
                    if (last_x < 0 | last_x > 9) return false;
                    if (last_y < 0 | last_y > 10) return false;
                    return true;
                }
                default -> {
                }
            }
        }
        else return false;
        return false;
    }

    public void beEat(ChessPiece be_eat){
        setSurvive(false);
        System.out.println("被吃了");
    }

    public void eat(ChessBoardQP qp,ChessPiece qz){

        int last_x=getX();
        int last_y=getY();
            qp.Q[last_x][last_y].setSurvive(false);   //被吃者标记为死
            qp.Q[last_x][last_y]=qz;                  //捕食者覆盖

        System.out.println("吃掉了XXX");

    }
}

棋盘 

package nchuplay.demo;

public class ChessBoardQP {

    ChessPiece Q[][]=new ChessPiece[9][10];
    public ChessBoardQP() {
    }


    public ChessBoardQP(ChessPiece[][] q) {
        Q = q;
    }

    public void setQ(ChessPiece[][] q) {
        Q = q;
    }

    public ChessPiece[][] getQ() {
        return Q;
    }

    public void printQ(){
        for(int i=9;i>-1;i--){
            for(int j=0;j<9;j++){
                if(Q[j][i]!=null){
                     if(Q[j][i].isColor()){
                         System.out.print( " " + "\033[31;4m" + Q[j][i].getName()  + "\033[0m" + " " );
                     }
                     else{
                         System.out.print( " " +"\033[32;4m" + Q[j][i].getName()  + "\033[0m" + " "  );

                     }
                }
                else{
                    System.out.print("    ");
                }

            }
            System.out.println();
        }
    }
}

Test 

package nchuplay.demo;
import java.util.Scanner;
public class ChessPieceTest {
    public static void main(String[] args) {
        ChessBoardQP qp=new ChessBoardQP();
        //小兵初始化

        ChessPiece xb2=new SoldierXB(2,3,true,true,"兵");qp.Q[2][3]=xb2;
        ChessPiece xb1=new SoldierXB(0,3,true,true,"兵");qp.Q[0][3]=xb1;
        ChessPiece xb3=new SoldierXB(4,3,true,true,"兵");qp.Q[4][3]=xb3;
        ChessPiece xb4=new SoldierXB(6,3,true,true,"兵");qp.Q[6][3]=xb4;
        ChessPiece xb5=new SoldierXB(8,3,true,true,"兵");qp.Q[8][3]=xb5;
        //小卒初始化
        ChessPiece xz1=new SoldierXB(0,6,false,true,"卒");qp.Q[0][6]=xz1;
        ChessPiece xz2=new SoldierXB(2,6,false,true,"卒");qp.Q[2][6]=xz2;
        ChessPiece xz3=new SoldierXB(4,6,false,true,"卒");qp.Q[4][6]=xz3;
        ChessPiece xz4=new SoldierXB(6,6,false,true,"卒");qp.Q[6][6]=xz4;
        ChessPiece xz5=new SoldierXB(8,6,false,true,"卒");qp.Q[8][6]=xz5;
        //红马初始化
        ChessPiece xm1=new Horse(1,0,true,true,"马");qp.Q[1][0]=xm1;
        ChessPiece xm2=new Horse(7,0,true,true,"马");qp.Q[7][0]=xm2;
        //红大象初始化
        ChessPiece xx1=new Item(2,0,true,true,"象");qp.Q[2][0]=xx1;
        ChessPiece xx2=new Item(6,0,true,true,"象");qp.Q[6][0]=xx2;
        //黑马初始化
        ChessPiece dm1=new Horse(1,9,false,true,"马");qp.Q[1][9]=dm1;
        ChessPiece dm2=new Horse(7,9,false,true,"马");qp.Q[7][9]=dm2;
        //黑大象初始化
        ChessPiece dx1=new Item(2,9,false,true,"象");qp.Q[2][9]=dx1;
        ChessPiece dx2=new Item(6,9,false,true,"象");qp.Q[6][9]=dx2;
        //红炮初始化
        ChessPiece xp1=new CannonDP(1,2,true,true,"炮");qp.Q[1][2]=xp1;
        ChessPiece xp2=new CannonDP(7,2,true,true,"炮");qp.Q[7][2]=xp2;
        //红车初始化
        ChessPiece xc1=new Cart(0,0,true,true,"车");qp.Q[0][0]=xc1;
        ChessPiece xc2=new Cart(8,0,true,true,"车");qp.Q[8][0]=xc2;
        //黑炮初始化
        ChessPiece dp1=new CannonDP(1,7,false,true,"炮");qp.Q[1][7]=dp1;
        ChessPiece dp2=new CannonDP(7,7,false,true,"炮");qp.Q[7][7]=dp2;
        //黑车初始化
        ChessPiece dc1=new Cart(0,9,false,true,"车");qp.Q[0][9]=dc1;
        ChessPiece dc2=new Cart(8,9,false,true,"车");qp.Q[8][9]=dc2;
        //红侍卫初始化
        ChessPiece xsw1=new BodyguardHW(3,0,true,true,"仕");qp.Q[3][0]=xsw1;
        ChessPiece xsw2=new BodyguardHW(5,0,true,true,"仕");qp.Q[5][0]=xsw2;
        //黑侍卫初始化
        ChessPiece dsw1=new BodyguardHW(3,9,false,true,"仕");qp.Q[3][9]=dsw1;
        ChessPiece dsw2=new BodyguardHW(5,9,false,true,"仕");qp.Q[5][9]=dsw2;
        //红帅
        ChessPiece hs=new CheckmateJJ(4,0,true,true,"帅");qp.Q[4][0]=hs;
        //黑将
        ChessPiece hj=new CheckmateJJ(4,9,false,true,"将");qp.Q[4][9]=hj;
        qp.printQ();
        Scanner in=new Scanner(System.in);
        for(int i=1;i<1000;i++){
            if(i%2==1){
                System.out.println("当前为红色方阵营,请选择需要移动的棋子的坐标");
                int m=in.nextInt();
                int n=in.nextInt();
                System.out.println("当前为红色方阵营" + " 您选择了要移动的棋子是:" + qp.Q[m][n].getName() + ",请输入前进的方向");
                String d= in.next();
                if(qp.Q[m][n] instanceof SoldierXB)
                    qp.Q[m][n].move(qp,d);
                if(qp.Q[m][n] instanceof Item)
                    qp.Q[m][n].move(qp,d);
                if(qp.Q[m][n] instanceof Horse)
                    qp.Q[m][n].move(qp,d);
                if(qp.Q[m][n] instanceof CheckmateJJ)
                    qp.Q[m][n].move(qp,d);
                if(qp.Q[m][n] instanceof BodyguardHW)
                    qp.Q[m][n].move(qp,d);
                if(qp.Q[m][n] instanceof CannonDP){
                    System.out.println("请输入移动的距离");
                    int D=in.nextInt();
                    qp.Q[m][n].move(qp,d,D);
                }
                if(qp.Q[m][n] instanceof Cart){
                    System.out.println("请输入移动的距离");
                    int D=in.nextInt();
                    qp.Q[m][n].move(qp,d,D);
                }
            }
                else{
                    System.out.println("当前为黑色方阵营,请选择需要移动的棋子的坐标");
                    int m=in.nextInt();
                    int n=in.nextInt();
                    System.out.println("当前为黑色方阵营" + " 您选择了要移动的棋子是:" + qp.Q[m][n].getName() + ",请输入前进的方向");
                    String d= in.next();
                if(qp.Q[m][n] instanceof SoldierXB)
                    qp.Q[m][n].move(qp,d);
                if(qp.Q[m][n] instanceof Item)
                    qp.Q[m][n].move(qp,d);
                if(qp.Q[m][n] instanceof CheckmateJJ)
                    qp.Q[m][n].move(qp,d);
                if(qp.Q[m][n] instanceof BodyguardHW)
                    qp.Q[m][n].move(qp,d);
                if(qp.Q[m][n] instanceof CannonDP){
                    System.out.println("请输入移动的距离");
                    int D=in.nextInt();
                    qp.Q[m][n].move(qp,d,D);
                }
                if(qp.Q[m][n] instanceof Cart){
                    System.out.println("请输入移动的距离");
                    int D=in.nextInt();
                    qp.Q[m][n].move(qp,d,D);
                }
                    //0qp.Q[m][n].eat(qp,qp.Q[m][n]);
                }
                qp.printQ();
            }
            //System.out.println("请选择需要移动的棋子");

        }
}

运行结果我复制粘贴过来太多了

车  马  象  仕  将  仕  象  马  车 
                                    
     炮                      炮     
 卒      卒      卒      卒      卒 
                                    
                                    
 兵      兵      兵      兵      兵 
     炮                      炮     
                                    
 车  马  象  仕  帅  仕  象  马  车 
当前为红色方阵营,请选择需要移动的棋子的坐标
0 3
当前为红色方阵营 您选择了要移动的棋子是:兵,请输入前进的方向
1
1:向上  2:向下  3:向左  4:向右
向上移动一格
 车  马  象  仕  将  仕  象  马  车 
                                    
     炮                      炮     
 卒      卒      卒      卒      卒 
                                    
 兵                                 
         兵      兵      兵      兵 
     炮                      炮     
                                    
 车  马  象  仕  帅  仕  象  马  车 
当前为黑色方阵营,请选择需要移动的棋子的坐标
0 6
当前为黑色方阵营 您选择了要移动的棋子是:卒,请输入前进的方向
2
1:向上  2:向下  3:向左  4:向右
向后移动一格
 车  马  象  仕  将  仕  象  马  车 
                                    
     炮                      炮     
         卒      卒      卒      卒 
 卒                                 
 兵                                 
         兵      兵      兵      兵 
     炮                      炮     
                                    
 车  马  象  仕  帅  仕  象  马  车 
当前为红色方阵营,请选择需要移动的棋子的坐标
0 4
当前为红色方阵营 您选择了要移动的棋子是:兵,请输入前进的方向
1
1:向上  2:向下  3:向左  4:向右
向上移动一格
 车  马  象  仕  将  仕  象  马  车 
                                    
     炮                      炮     
         卒      卒      卒      卒 
 兵                                 
                                    
         兵      兵      兵      兵 
     炮                      炮     
                                    
 车  马  象  仕  帅  仕  象  马  车 
当前为黑色方阵营,请选择需要移动的棋子的坐标
0 9
当前为黑色方阵营 您选择了要移动的棋子是:车,请输入前进的方向
2
请输入移动的距离
4
1:向上  2:向下  3:向左  4:向右
向后移动一格
     马  象  仕  将  仕  象  马  车 
                                    
     炮                      炮     
         卒      卒      卒      卒 
 车                                 
                                    
         兵      兵      兵      兵 
     炮                      炮     
                                    
 车  马  象  仕  帅  仕  象  马  车 
当前为红色方阵营,请选择需要移动的棋子的坐标
0 0
当前为红色方阵营 您选择了要移动的棋子是:车,请输入前进的方向
1
请输入移动的距离
5
1:向上  2:向下  3:向左  4:向右
向左移动一格
     马  象  仕  将  仕  象  马  车 
                                    
     炮                      炮     
         卒      卒      卒      卒 
 车                                 
                                    
         兵      兵      兵      兵 
     炮                      炮     
                                    
     马  象  仕  帅  仕  象  马  车 
当前为黑色方阵营,请选择需要移动的棋子的坐标
1 7
当前为黑色方阵营 您选择了要移动的棋子是:炮,请输入前进的方向
2
请输入移动的距离
7
1:向上  2:向下  3:向左  4:向右
向后移动一格
     马  象  仕  将  仕  象  马  车 
                                    
                             炮     
         卒      卒      卒      卒 
 车                                 
                                    
         兵      兵      兵      兵 
     炮                      炮     
                                    
     炮  象  仕  帅  仕  象  马  车 
当前为红色方阵营,请选择需要移动的棋子的坐标
7 0
当前为红色方阵营 您选择了要移动的棋子是:马,请输入前进的方向
3
1:向右上  2:向上  3:向左上  4:向左  5:向左下  6:向下  7:向右下  8:向右
向左上移动一格
     马  象  仕  将  仕  象  马  车 
                                    
                             炮     
         卒      卒      卒      卒 
 车                                 
                                    
         兵      兵      兵      兵 
     炮                      炮     
                     马             
     炮  象  仕  帅  仕  象      车 
当前为黑色方阵营,请选择需要移动的棋子的坐标
1 0
当前为黑色方阵营 您选择了要移动的棋子是:炮,请输入前进的方向
4
请输入移动的距离
2
1:向上  2:向下  3:向左  4:向右
向右移动一格
     马  象  仕  将  仕  象  马  车 
                                    
                             炮     
         卒      卒      卒      卒 
 车                                 
                                    
         兵      兵      兵      兵 
     炮                      炮     
                     马             
         象  炮  帅  仕  象      车 
当前为红色方阵营,请选择需要移动的棋子的坐标
5 1
当前为红色方阵营 您选择了要移动的棋子是:马,请输入前进的方向
4
1:向右上  2:向上  3:向左上  4:向左  5:向左下  6:向下  7:向右下  8:向右
向左移动一格
     马  象  仕  将  仕  象  马  车 
                                    
                             炮     
         卒      卒      卒      卒 
 车                                 
                                    
         兵      兵      兵      兵 
     炮                      炮     
                                    
         象  马  帅  仕  象      车 
当前为黑色方阵营,请选择需要移动的棋子的坐标
7 7
当前为黑色方阵营 您选择了要移动的棋子是:炮,请输入前进的方向
2
请输入移动的距离
4
1:向上  2:向下  3:向左  4:向右
向后移动一格
     马  象  仕  将  仕  象  马  车 
                                    
                                    
         卒      卒      卒      卒 
 车                                 
                                    
         兵      兵      兵  炮  兵 
     炮                      炮     
                                    
         象  马  帅  仕  象      车 

展示一张

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值