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

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

也没有用图形化界面

父类

package nchuplay.demo;public abstract class ChessPiece {private int x;private int y;       //棋的初始位置private boolean color;  //红true,黑falseprivate 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;}}elsereturn 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 -> {}}}elsereturn 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 -> {}}}elsereturn 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:向右
向后移动一格马  象  仕  将  仕  象  马  车 卒      卒      卒      卒 车                                 兵      兵      兵  炮  兵 炮                      炮     象  马  帅  仕  象      车 

展示一张

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

  1. 朋友写的一个中国象棋游戏,JAVA代码

    朋友写的一个中国象棋游戏,JAVA代码.有兴趣的可以这里下载:中国象棋下载 (1)地址,不知现在还能下否....中国象棋历史悠久,吸引了无数的人研究,现对中国象棋的对战和实现棋谱的制作做如下的设计和说 ...

  2. 【180928】中国象棋游戏源码

    一.源码特点     采用c#winform编的象棋游戏,不带人工智能,棋子可以正常的行动,但功能上还有待完善 二.功能介绍     本源码是一个中国象棋游戏源码,由于没有人工智能,所以只能自己跟自己 ...

  3. 基于python的游戏设计与实现-基于Python的网络中国象棋游戏设计与实现

    基于Python的网络中国象棋游戏设计与实现 摘要中国象棋是一种家喻户晓的棋类游戏,随着互联网时代的到来,人们的娱乐方式也逐渐向PC端和移动端上发展.本文将传统的中国象棋游戏和当下的互联网技术结合作为 ...

  4. c语言编程一个象棋游戏,急求:C语言编写的中国象棋游戏一个

    急求:C语言编写的中国象棋游戏一个 來源:互聯網  2009-09-08 12:30:35  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: 由于学习 ...

  5. 基于Java的中国象棋游戏的设计与实现

    技术:Java等 摘要: 近些年,Java技术日趋成熟,它的跨平台性,健壮性以及使用人数的增多都表明了它的受欢迎程度不断攀升,因此选用了Java语言作为中国象棋游戏的开发语言.并且中国象棋文化源远流长 ...

  6. 基于Java+Swing实现中国象棋游戏

    基于Java+Swing实现中国象棋游戏 一.系统介绍 二.功能展示 三.其他系统 四.获取源码 前言 中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味 ...

  7. Qt终极教程——用Qt编程实现中国象棋游戏(提供源代码和程序编译运行教程)

    Qt终极教程--用Qt编程实现中国象棋游戏 目录 Qt终极教程--用Qt编程实现中国象棋游戏 简介 运行可执行程序体验象棋游戏 Qt 安装 源代码的编译.运行与调试 生成预编译的可执行程序 简介 本文 ...

  8. C++900行代码实现中国象棋游戏规则以及相关功能

    本文章通过C++中的900行代码实现中国象棋游戏以及相关功能,主要的内容如下: 1.设置未进入游戏前的主页面: 2.绘制棋盘(如果有刚好尺寸的图片也可直接加载),包括棋盘网格,炮与兵的特殊标记绘制: ...

  9. 中国象棋游戏Chess(3) - 实现走棋规则

    棋盘的绘制和走棋参看博文:中国象棋游戏Chess(1) - 棋盘绘制以及棋子的绘制,中国象棋游戏Chess(2) - 走棋 现在重新整理之前写的代码,并且对于每个棋子的走棋规则都进行了限制,不像之前那 ...

最新文章

  1. 根据CPU核数合理设置线程池大小
  2. 【Qt】通过QtCreator源码学习Qt(八):插件生命周期及对应状态(代码走读)
  3. SAP WM中阶存储类型里的Full stk rmvl 字段和Return Storage type字段
  4. acm第二节2020.4.2-4.4补
  5. 返回值与返回引用的问题
  6. POJ1459-Power Network
  7. IDEA中的HTTP Client Editor测试API
  8. CSS浮动(float)属性学习经验分享
  9. Java中的类变量(静态变量static的具体用法快速入门))
  10. Java实现穷举_LeetCode 28:实现strStr() Implement strStr()
  11. ITSM群(48132184)讨论精选
  12. win7下让不支持代理的程序使用代理
  13. 计算机应用基础图表填空,计算机应用基础试题
  14. 哎 !互联网又偷偷进行了裁员
  15. onclick和onfocus的区别
  16. tableViewCell、collectionViewCell、组头组尾等总结
  17. 考研英语近义词与反义词·八
  18. WebGIS学习(九)WebGIS中的矢量查询(针对AGS和GeoServer)
  19. load average 的含义
  20. 易鑫集团Java面试题_史上最全!2020面试阿里,字节跳动90%被问到的JVM面试题(附答案)...

热门文章

  1. Kernel Knights (Gym - 101480K)
  2. bzoj 1671: [Usaco2005 Dec]Knights of Ni 骑士
  3. Oracle的查询排序,增加总计列,或者增加总计行
  4. 计算机网络 - 练习(二百三十三)
  5. 334. 递增的三元子序列
  6. Android BLE(低功耗蓝牙)在Android不同版本的适配问题,华为Mate30扫描不到蓝牙模块
  7. [转] 疯狂猎鸟项目小结
  8. 常用autojs命令
  9. 基于matlab的人脸识别系统设计与仿真
  10. vue根据数组对象字段属性字符 的首字母 按照拼音abcd...进行分类排序 类似通讯录 排序