设计一个中国象棋游戏,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:向右
向后移动一格
马 象 仕 将 仕 象 马 车
卒 卒 卒 卒
车
兵 兵 兵 炮 兵
炮 炮
象 马 帅 仕 象 车
展示一张