象棋的吃子规则代码

发布时间 2023-06-15 11:28:12作者: 东陌

 


/**卒吃棋规则*/
public void armsRule(JLabel play1,JLabel play2){
//向右走
if ((play2.getX() - play1.getX()) <= 112 && (play2.getX() - play1.getX()) >= 57 && (play1.getY() - play2.getY()) < 57
&& (play1.getY() - play2.getY()) > 0 && play2.isVisible() &&
play1.getName().charAt(1)!=play2.getName().charAt(1)){
//黑棋要过河才能右吃棋
if (play1.getName().charAt(1) == '1' && play1.getY() > 284 && play1.getName().charAt(1) != play2.getName().charAt(1)){

play2.setVisible(false);
//把对方的位置给自己
play1.setBounds(play2.getX(),play2.getY(),55,55);
}

//红棋要过河才左能吃棋
else if (play1.getName().charAt(1) == '2' && play1.getY() < 341 && play1.getName().charAt(1) != play2.getName().charAt(1)){
play2.setVisible(false);
//把对方的位置给自己
play1.setBounds(play2.getX(),play2.getY(),55,55);
}
}

//向左走
else if ((play1.getX() - play2.getX()) <= 112 && (play1.getX() - play2.getX()) >= 57 && (play1.getY() - play2.getY()) < 57 && (play1.getY() - play2.getY()) > 0 && play2.isVisible() && play1.getName().charAt(1)!=play2.getName().charAt(1)){
//黑棋要过河才能左吃棋
if (play1.getName().charAt(1) == '1' && play1.getY() > 284 && play1.getName().charAt(1) != play2.getName().charAt(1)){
play2.setVisible(false);
//把对方的位置给自己
play1.setBounds(play2.getX(),play2.getY(),55,55);
}

//红棋要过河才能右吃棋
else if (play1.getName().charAt(1) == '2' && play1.getY() < 341 && play1.getName().charAt(1) != play2.getName().charAt(1)){
play2.setVisible(false);
//把对方的位置给自己
play1.setBounds(play2.getX(),play2.getY(),55,55);
}
}

//向上走 向下走
else if (play1.getX() - play2.getX() >= -57 && play1.getX() - play2.getX() <= 57 && play1.getY() - play2.getY() >= -112 && play1.getY() - play2.getY() <= 112){
//黑棋不能向上吃棋
if (play1.getName().charAt(1) == '1' && play1.getY() < play2.getY() && play1.getName().charAt(1) != play2.getName().charAt(1)){
play2.setVisible(false);
//把对方的位置给自己
play1.setBounds(play2.getX(),play2.getY(),55,55);
}

//红棋不能向下吃棋
else if (play1.getName().charAt(1) == '2' && play1.getY() > play2.getY() && play1.getName().charAt(1) != play2.getName().charAt(1)){
play2.setVisible(false);
//把对方的位置给自己
play1.setBounds(play2.getX(),play2.getY(),55,55);
}
}

}//卒吃结束

/**炮、车吃棋规则*/
public void cannonRule(int Chess,JLabel play,JLabel playTake,JLabel playQ[],MouseEvent me){
//起点和终点之间是否有棋子
int Count = 0;


//所有的棋子
for (int j=0;j<32;j++){
//找出在同一条竖线的所有棋子、并不包括自己
//坐标模糊合成法
if (playQ[j].getX() - play.getX() >= -27 && playQ[j].getX() - play.getX() <= 27 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){

//自己是起点被吃的是终点(从上到下) 下吃上
for (int k=play.getY()+57;k<playTake.getY();k+=57){
//大于起点、小于终点的坐标就可以知道中间是否有棋子
if (playQ[j].getY() < playTake.getY() && playQ[j].getY() > play.getY()){
//计算起点和终点的棋子个数
Count++;
break;
}
}//for

//自己是起点被吃的是终点(从下到上) 上吃下
for (int k=playTake.getY();k<play.getY();k+=57){
//找起点和终点的棋子
if (playQ[j].getY() < play.getY() && playQ[j].getY() > playTake.getY()){
Count++;
break;
}
}//for
}//if

//找出在同一条竖线的所有棋子、并不包括自己
else if (playQ[j].getY() - play.getY() >= -10 && playQ[j].getY() - play.getY() <= 10 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){
//自己是起点被吃的是终点(从左到右)
for (int k=play.getX()+50;k<playTake.getX();k+=57){
//大于起点、小于终点的坐标就可以知道中间是否有棋子
if (playQ[j].getX() < playTake.getX() && playQ[j].getX() > play.getX()){
Count++;
break;
}
}//for

//自己是起点被吃的是终点(从右到左)
for (int k=playTake.getX();k<play.getX();k+=57){
//找起点和终点的棋子
if (playQ[j].getX() < play.getX() && playQ[j].getX() > playTake.getX()){
Count++;
break;
}
}//for
}//if
}//for

//起点和终点之间要一个棋子是炮的规则、并不能吃自己的棋子
if (Count == 1 && Chess == 0 && playTake.getName().charAt(1) != play.getName().charAt(1)){
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),55,55);
}

//起点和终点之间没有棋子是车的规则、并不能吃自己的棋子
else if (Count ==0 && Chess == 1 && playTake.getName().charAt(1) != play.getName().charAt(1)){
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),55,55);
}

}//炮、车吃棋方法结束

/**马吃棋规则*/
public void horseRule(JLabel play,JLabel playTake ,JLabel playQ[],MouseEvent me){
//障碍
int Move=0;
boolean Chess=false;

//上移、左吃
if (play.getName().charAt(1)!=playTake.getName().charAt(1) && play.getX() - playTake.getX() == 57 && play.getY() - playTake.getY() == 114 ){
//正前方是否有别的棋子
for (int i=0;i<32;i++){
if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == 57){
Move = 1;
break;
}
}//for

Chess = true;

}//if

//上移、右吃
else if (play.getY() - playTake.getY() == 114 && playTake.getX() - play.getX() == 57 ){
//正前方是否有别的棋子
for (int i=0;i<32;i++){
if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == 57){
Move = 1;
break;
}
}//for

Chess = true;

}//else

//左移、上吃
else if (play.getY() - playTake.getY() == 57 && play.getX() - playTake.getX() == 114 ){
//正左方是否有别的棋子
for (int i=0;i<32;i++){
if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && play.getX() - playQ[i].getX() == 57){
Move = 1;
break;
}
}//for

Chess = true;

}//else

//左移、下吃
else if (playTake.getY() - play.getY() == 57 && play.getX() - playTake.getX() == 114 ){
//正左方是否有别的棋子
for (int i=0;i<32;i++){
if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && play.getX() - playQ[i].getX() == 57){
Move = 1;
break;
}
}//for

Chess = true;

}//else

//右移、上吃
else if (play.getY() - playTake.getY() == 57 && playTake.getX() - play.getX() == 114 ){
//正右方是否有别的棋子
for (int i=0;i<32;i++){
if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && playQ[i].getX() - play.getX() == 57){
Move = 1;
break;
}
}//for

Chess = true;

}//else

//右移、下吃
else if (playTake.getY() - play.getY() == 57 && playTake.getX() - play.getX() == 114 ){
//正右方是否有别的棋子
for (int i=0;i<32;i++){
if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && playQ[i].getX() - play.getX() == 57){
Move = 1;
break;
}
}//for

Chess = true;

}//else

//下移、左吃
else if (playTake.getY() - play.getY() == 114 && play.getX() - playTake.getX() == 57 ){
//正下方是否有别的棋子
for (int i=0;i<32;i++){
if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == -57 ){
Move = 1;
break;

}
}//for

Chess = true;

}//else

//下移、右吃
else if (playTake.getY() - play.getY() == 114 && playTake.getX() - play.getX() == 57){
//正下方是否有别的棋子
for (int i=0;i<32;i++){
if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == -57 ){
Move = 1;
break;
}
}//for

Chess = true;

}//else

//没有障碍、并可以吃棋、不能吃自己颜色
if (Chess && Move == 0 && playTake.getName().charAt(1) != play.getName().charAt(1)){
//当前记录添加到集合(用于悔棋)
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),55,55);
}
}

/**相、象吃棋规则*/
public void elephantRule(JLabel play,JLabel playTake,JLabel playQ[]){
//障碍
int Move=0;
boolean Chess=false;

//吃左上方的棋子
if (play.getX() - playTake.getX() >= 87 && play.getX() - playTake.getX() <= 141 && play.getY() - playTake.getY() >= 87 && play.getY() - playTake.getY() <= 141){
//左上方是否有棋子
for (int i=0;i<32;i++){
if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 57 && play.getY() - playQ[i].getY() == 57){
Move++;
break;
}
}//for

Chess=true;

}//if

//吃右上方的棋子
else if (playTake.getX() - play.getX() >= 87 && playTake.getX() - play.getX() <= 141 && play.getY() - playTake.getY() >= 87 && play.getY() - playTake.getY() <= 141 ){
//右上方是否有棋子
for (int i=0;i<32;i++){
if (playQ[i].isVisible() && playQ[i].getX() - play.getX() == 57 && play.getY() - playQ[i].getY() == 57 ){
Move++;
break;
}
}//for

Chess=true;
}//else

//吃下左方的棋子
else if (play.getX() - playTake.getX() >= 87 && play.getX() - playTake.getX() <= 141 && playTake.getY() - play.getY() >= 87 && playTake.getY() - play.getY() <= 141){
//下左方是否有棋子
for (int i=0;i<32;i++){
if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 57 && play.getY() - playQ[i].getY() == -57 ){
Move++;
break;
}
}//for

Chess=true;
}//else

//吃下右放的棋子
else if (playTake.getX() - play.getX() >= 87 && playTake.getX() - play.getX() <= 141 && playTake.getY() - play.getY() >= 87 && playTake.getY() - play.getY() <= 141){
//下右方是否有棋子
for (int i=0;i<32;i++){
if (playQ[i].isVisible() && playQ[i].getX() - play.getX() == 57 && playQ[i].getY() - play.getY() == 57 ){
Move = 1;
break;
}
}//for

Chess=true;

}//else

//没有障碍、并不能吃自己的棋子
if (Chess && Move == 0 && playTake.getName().charAt(1) != play.getName().charAt(1)){
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),55,55);
}

}//相、象吃棋规则结束

/**士、仕吃棋规则*/
public void chapRule(int Man ,JLabel play,JLabel playTake,JLabel playQ[]){
//当前状态
boolean Chap = false;

//上、右
if (playTake.getX() - play.getX() >= 20 && playTake.getX() - play.getX() <= 114 && play.getY() - playTake.getY() >= 2 && play.getY() - playTake.getY() <= 87){
//被吃的棋子是否和当前士相近
if (Man < 14 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170 && playTake.isVisible()){
Chap = true;
}

//被吃的棋子是否和当前仕相近
else if (Man > 13 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() >= 455 && playTake.isVisible()){
Chap = true;
}
}//if

//上、左
else if (play.getX() - playTake.getX() <= 114 && play.getX() - playTake.getX() >= 25 && play.getY() - playTake.getY() >= 2 && play.getY() - playTake.getY() <= 87){
//被吃的棋子是否和当前士相近
if (Man < 14 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170 && playTake.isVisible()){
Chap = true;
}

//被吃的棋子是否和当前仕相近
else if (Man > 13 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() >= 455 && playTake.isVisible()){
Chap = true;
}
}// else if

//下、左
else if (play.getX() - playTake.getX() <= 114 && play.getX() - playTake.getX() >= 25 && playTake.getY() - play.getY() >= 2 && playTake.getY() - play.getY() <= 87){
//被吃的棋子是否和当前士相近
if (Man < 14 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170 && playTake.isVisible()){
Chap = true;
}

//被吃的棋子是否和当前仕相近
else if (Man > 13 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() >= 455 && playTake.isVisible()){
Chap = true;
}
}// else if

//下、右
else if (playTake.getX() - play.getX() >= 25 && playTake.getX() - play.getX() <= 114 && playTake.getY() - play.getY() >= 2 && playTake.getY() - play.getY() <= 87){
//被吃的棋子是否和当前士相近
if (Man < 14 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170 && playTake.isVisible()){
Chap = true;
}

//被吃的棋子是否和当前仕相近
else if (Man > 13 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() >= 455 && playTake.isVisible()){
Chap = true;
}
}//else if

//可移动、并不能吃自己的棋子
if (Chap && playTake.getName().charAt(1) != play.getName().charAt(1)){
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),55,55);
}

}//士、仕吃棋规则结束

public void willRule(int Man ,JLabel play,JLabel playTake ,JLabel playQ[]){
//当前状态
boolean will = false;

//向上吃
if (play.getX() - playTake.getX() >= 0 && play.getX() - playTake.getX() <= 55 && play.getY() - playTake.getY() >= 27 && play.getY() - playTake.getY() <= 87 && playTake.isVisible()){
//被吃的棋子是否和当前将相近
if (Man == 30 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170){
will = true;
}

//被吃的棋子是否和当前帅相近
else if (Man == 31 && playTake.getY() >= 455 && playTake.getX() >= 195 && playTake.getX() <= 309){
will = true;
}
}

//向左吃
else if (play.getX() - playTake.getX() >= 2 && play.getX() - playTake.getX() <= 57 && playTake.getY() - play.getY() <= 27 && playTake.getY() - play.getY() >= -27 && playTake.isVisible()){
//被吃的棋子是否和当前将相近
if (Man == 30 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170){
will = true;
}

//被吃的棋子是否和当前帅相近
else if (Man == 31 && playTake.getY() >= 455 && playTake.getX() >= 195 && playTake.getX() <= 309){
will = true;
}
}

//向右吃
else if (playTake.getX() - play.getX() >= 2 && playTake.getX() - play.getX() <= 57 && playTake.getY() - play.getY() <= 27 && playTake.getY() - play.getY() >= -27 && playTake.isVisible()){
//被吃的棋子是否和当前将相近
if (Man == 30 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170){
will = true;
}

//被吃的棋子是否和当前帅相近
else if (Man == 31 && playTake.getY() >= 455 && playTake.getX() >= 195 && playTake.getX() <= 309){
will = true;
}
}

//向下
else if (playTake.getX() - play.getX() >= 0 && playTake.getX() - play.getX() <= 87 && playTake.getY() - play.getY() <= 27 && playTake.getY() - play.getY() >= 40 && playTake.isVisible()){
//被吃的棋子是否和当前将相近
if (Man == 30 && playTake.getX() >= 195 && playTake.getX() <= 309 && playTake.getY() <= 170){
will = true;
}

//被吃的棋子是否和当前帅相近
else if (Man == 31 && playTake.getY() >= 455 && playTake.getX() >= 195 && playTake.getX() <= 309){
will = true;
}
}

//不能吃自己的棋子、符合当前要求
if (playTake.getName().charAt(1) != play.getName().charAt(1) && will){
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),55,55);
}

}//将、帅吃规则结束