?? chess.java
字號(hào):
}
}
//退出
else if (ae.getSource().equals(exit))
{
int j=JOptionPane.showConfirmDialog(this,"真的要退出嗎?","退出",JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);
if (j == JOptionPane.YES_OPTION)
{
System.exit(0);
}
}
}
/*規(guī)則類*/
class ChessRule
{
/*卒移動(dòng)規(guī)則******************************************/
public void armsRule(int Man,JLabel play,MouseEvent me)
{
//黑卒向下
if (Man < 21)
{
//向下移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)
if ((me.getY()-play.getY()) > 40 && (me.getY()-play.getY()) < 80 && (me.getX()-play.getX()) < 30 && (me.getX()-play.getX()) > 0)
{
//當(dāng)前記錄添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX(),play.getY()+45,40,40);
}
//向右移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)、必須過河
else if (play.getY() >= 250 && (me.getX() - play.getX()) >= 30 && (me.getX() - play.getX()) <= 90)
{
play.setBounds(play.getX()+48,play.getY(),40,40);
}
//向左移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)、必須過河
else if (play.getY() >= 250 && (play.getX() - me.getX()) >= 20 && (play.getX() - me.getX()) <=90)
{
//模糊坐標(biāo)
play.setBounds(play.getX()-48,play.getY(),40,40);
}
}
//紅卒向上
else
{
//當(dāng)前記錄添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
//向上移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)
if ((me.getX()-play.getX()) > 0 && (me.getX()-play.getX()) < 30 && (play.getY()-me.getY()) >20 && play.getY()-me.getY() < 70)
{
play.setBounds(play.getX(),play.getY()-48,40,40);
}
//向右移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)、必須過河
else if (play.getY() <= 210 && (me.getX() - play.getX()) >= 30 && (me.getX() - play.getX()) <= 90)
{
play.setBounds(play.getX()+50,play.getY(),40,40);
}
//向左移動(dòng)、得到終點(diǎn)的坐標(biāo)模糊成合法的坐標(biāo)、必須過河
else if (play.getY() <= 210 && (play.getX() - me.getX()) >= 20 && (play.getX() - me.getX()) <=60)
{
play.setBounds(play.getX()-52,play.getY(),40,40);
}
}
}//卒移動(dòng)結(jié)束
/*卒吃棋規(guī)則**********************************/
public void armsRule(JLabel play1,JLabel play2)
{
//向右走
if ((play2.getX() - play1.getX()) <= 60 && (play2.getX() - play1.getX()) >= 40 && (play1.getY() - play2.getY()) < 10 && (play1.getY() - play2.getY()) > -10 && play2.isVisible() && play1.getName().charAt(1)!=play2.getName().charAt(1))
{
//黑棋要過河才能右吃棋
if (play1.getName().charAt(1) == '1' && play1.getY() >= 250 && play1.getName().charAt(1) != play2.getName().charAt(1))
{
play2.setVisible(false);
//把對(duì)方的位置給自己
play1.setBounds(play2.getX(),play2.getY(),40,40);
}
//紅棋要過河才左能吃棋
else if (play1.getName().charAt(1) == '2' && play1.getY() <= 210 && play1.getName().charAt(1) != play2.getName().charAt(1))
{
play2.setVisible(false);
//把對(duì)方的位置給自己
play1.setBounds(play2.getX(),play2.getY(),40,40);
}
}
//向左走
else if ((play1.getX() - play2.getX()) <= 60 && (play1.getX() - play2.getX()) >= 40 && (play1.getY() - play2.getY()) < 10 && (play1.getY() - play2.getY()) > -10 && play2.isVisible() && play1.getName().charAt(1)!=play2.getName().charAt(1))
{
//黑棋要過河才能左吃棋
if (play1.getName().charAt(1) == '1' && play1.getY() >= 250 && play1.getName().charAt(1) != play2.getName().charAt(1))
{
play2.setVisible(false);
//把對(duì)方的位置給自己
play1.setBounds(play2.getX(),play2.getY(),40,40);
}
//紅棋要過河才能右吃棋
else if (play1.getName().charAt(1) == '2' && play1.getY() <= 210 && play1.getName().charAt(1) != play2.getName().charAt(1))
{
play2.setVisible(false);
//把對(duì)方的位置給自己
play1.setBounds(play2.getX(),play2.getY(),40,40);
}
}
//向上走
else if (play1.getX() - play2.getX() >= -10 && play1.getX() - play2.getX() <= 10 && play1.getY() - play2.getY() >= -70 && play1.getY() - play2.getY() <= 70)
{
//黑棋不能向上吃棋
if (play1.getName().charAt(1) == '1' && play1.getY() < play2.getY() && play1.getName().charAt(1) != play2.getName().charAt(1))
{
play2.setVisible(false);
//把對(duì)方的位置給自己
play1.setBounds(play2.getX(),play2.getY(),40,40);
}
//紅棋不能向下吃棋
else if (play1.getName().charAt(1) == '2' && play1.getY() > play2.getY() && play1.getName().charAt(1) != play2.getName().charAt(1))
{
play2.setVisible(false);
//把對(duì)方的位置給自己
play1.setBounds(play2.getX(),play2.getY(),40,40);
}
}
//當(dāng)前記錄添加到集合(用于悔棋)
Var.add(String.valueOf(play1.isVisible()));
Var.add(String.valueOf(play1.getX()));
Var.add(String.valueOf(play1.getY()));
Var.add(String.valueOf(Man));
//當(dāng)前記錄添加到集合(用于悔棋)
Var.add(String.valueOf(play2.isVisible()));
Var.add(String.valueOf(play2.getX()));
Var.add(String.valueOf(play2.getY()));
Var.add(String.valueOf(i));
}//卒吃結(jié)束
/*炮、車移動(dòng)規(guī)則************************************************/
public void cannonRule(JLabel play,JLabel playQ[],MouseEvent me)
{
//起點(diǎn)和終點(diǎn)之間是否有棋子
int Count = 0;
//上、下移動(dòng)
if (play.getX() - me.getX() <= 10 && play.getX() - me.getX() >= -30)
{
//指定所有模糊Y坐標(biāo)
for (int i=30;i<=462;i+=48)
{
//移動(dòng)的Y坐標(biāo)是否有指定坐標(biāo)相近的
if (i - me.getY() >= -10 && i - me.getY() <= 30)
{
//所有的棋子
for (int j=0;j<32;j++)
{
//找出在同一條豎線的所有棋子、并不包括自己
if (playQ[j].getX() - play.getX() >= -10 && playQ[j].getX() - play.getX() <= 10 && playQ[j].getName()!=play.getName() && playQ[j].isVisible())
{
//從起點(diǎn)到終點(diǎn)(從左到右)
for (int k=play.getY()+50;k<i;k+=50)
{
//大于起點(diǎn)、小于終點(diǎn)的坐標(biāo)就可以知道中間是否有棋子
if (playQ[j].getY() < i && playQ[j].getY() > play.getY())
{
//中間有一個(gè)棋子就不可以從這條豎線過去
Count++;
break;
}
}//for
//從起點(diǎn)到終點(diǎn)(從右到左)
for (int k=i+50;k<play.getY();k+=50)
{
//找起點(diǎn)和終點(diǎn)的棋子
if (playQ[j].getY() < play.getY() && playQ[j].getY() > i)
{
Count++;
break;
}
}//for
}//if
}//for
//起點(diǎn)和終點(diǎn)沒有棋子就可以移動(dòng)了
if (Count == 0)
{
//當(dāng)前記錄添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX(),i-17,40,40);
break;
}
}//if
}//for
}//if
//左、右移動(dòng)
else if (play.getY() - me.getY() >=-35 && play.getY() - me.getY() <= 10)
{
//指定所有模糊X坐標(biāo)
for (int i=30;i<=420;i+=48)
{
//移動(dòng)的X坐標(biāo)是否有指定坐標(biāo)相近的
if (i - me.getX() >= -35 && i-me.getX() <= 10)
{
//所有的棋子
for (int j=0;j<32;j++)
{
//找出在同一條橫線的所有棋子、并不包括自己
if (playQ[j].getY() - play.getY() >= -10 && playQ[j].getY() - play.getY() <= 10 && playQ[j].getName()!=play.getName() && playQ[j].isVisible())
{
//從起點(diǎn)到終點(diǎn)(從上到下)
for (int k=play.getX()+50;k<i;k+=50)
{
//大于起點(diǎn)、小于終點(diǎn)的坐標(biāo)就可以知道中間是否有棋子
if (playQ[j].getX() < i && playQ[j].getX() > play.getX())
{
//中間有一個(gè)棋子就不可以從這條橫線過去
Count++;
break;
}
}//for
//從起點(diǎn)到終點(diǎn)(從下到上)
for (int k=i+50;k<play.getX();k+=50)
{
//找起點(diǎn)和終點(diǎn)的棋子
if (playQ[j].getX() < play.getX() && playQ[j].getX() > i)
{
Count++;
break;
}
}//for
}//if
}//for
//起點(diǎn)和終點(diǎn)沒有棋子
if (Count == 0)
{
//當(dāng)前記錄添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(i-20,play.getY(),40,40);
break;
}
}//if
}//for
}//else
}//炮、車移動(dòng)方法結(jié)束
/*炮、車吃棋規(guī)則**************************************************************************/
public void cannonRule(int Chess,JLabel play,JLabel playTake,JLabel playQ[],MouseEvent me)
{
//起點(diǎn)和終點(diǎn)之間是否有棋子
int Count = 0;
//所有的棋子
for (int j=0;j<32;j++)
{
//找出在同一條豎線的所有棋子、并不包括自己
if (playQ[j].getX() - play.getX() >= -10 && playQ[j].getX() - play.getX() <= 10 && playQ[j].getName()!=play.getName() && playQ[j].isVisible())
{
//自己是起點(diǎn)被吃的是終點(diǎn)(從上到下)
for (int k=play.getY()+50;k<playTake.getY();k+=50)
{
//大于起點(diǎn)、小于終點(diǎn)的坐標(biāo)就可以知道中間是否有棋子
if (playQ[j].getY() < playTake.getY() && playQ[j].getY() > play.getY())
{
//計(jì)算起點(diǎn)和終點(diǎn)的棋子個(gè)數(shù)
Count++;
break;
}
}//for
//自己是起點(diǎn)被吃的是終點(diǎn)(從下到上)
for (int k=playTake.getY();k<play.getY();k+=50)
{
//找起點(diǎn)和終點(diǎn)的棋子
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())
{
//自己是起點(diǎn)被吃的是終點(diǎn)(從左到右)
for (int k=play.getX()+50;k<playTake.getX();k+=50)
{
//大于起點(diǎn)、小于終點(diǎn)的坐標(biāo)就可以知道中間是否有棋子
if (playQ[j].getX() < playTake.getX() && playQ[j].getX() > play.getX())
{
Count++;
break;
}
}//for
//自己是起點(diǎn)被吃的是終點(diǎn)(從右到左)
for (int k=playTake.getX();k<play.getX();k+=50)
{
//找起點(diǎn)和終點(diǎn)的棋子
if (playQ[j].getX() < play.getX() && playQ[j].getX() > playTake.getX())
{
Count++;
break;
}
}//for
}//if
}//for
//起點(diǎn)和終點(diǎn)之間要一個(gè)棋子是炮的規(guī)則、并不能吃自己的棋子
if (Count == 1 && Chess == 0 && playTake.getName().charAt(1) != play.getName().charAt(1))
{
//當(dāng)前記錄添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
//當(dāng)前記錄添加到集合(用于悔棋)
Var.add(String.valueOf(playTake.isVisible()));
Var.add(String.valueOf(playTake.getX()));
Var.add(String.valueOf(playTake.getY()));
Var.add(String.valueOf(i));
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),40,40);
}
//起點(diǎn)和終點(diǎn)之間沒有棋子是車的規(guī)則、并不能吃自己的棋子
else if (Count ==0 && Chess == 1 && playTake.getName().charAt(1) != play.getName().charAt(1))
{
//當(dāng)前記錄添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
//當(dāng)前記錄添加到集合(用于悔棋)
Var.add(String.valueOf(playTake.isVisible()));
Var.add(String.valueOf(playTake.getX()));
Var.add(String.valueOf(playTake.getY()));
Var.add(String.valueOf(i));
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),40,40);
}
}//炮、車吃棋方法結(jié)束
/*馬移動(dòng)規(guī)則***************************************************/
public void horseRule(JLabel play,JLabel playQ[],MouseEvent me)
{
//保存坐標(biāo)和障礙
int Ex=0,Ey=0,Move=0;
//上移、左邊
if (play.getX() - me.getX() >= 10 && play.getX() - me.getX() <= 50 && play.getY() - me.getY() >= 60 && play.getY() - me.getY() <= 100)
{
//合法的Y坐標(biāo)
for (int i=30;i<=462;i+=48)
{
//移動(dòng)的Y坐標(biāo)是否有指定坐標(biāo)相近的
if (i - me.getY() >= -10 && i - me.getY() <= 30)
{
Ey = i;
break;
}
}
//合法的X坐標(biāo)
for (int i=30;i<=420;i+=48)
{
//移動(dòng)的X坐標(biāo)是否有指定坐標(biāo)相近的
if (i - me.getX() >= -35 && i-me.getX() <= 10)
{
Ex = i;
break;
}
}
//正前方是否有別的棋子
for (int i=0;i<32;i++)
{
if (playQ[i].isVisible() && play.getX() - playQ[i].getX() <= 10 && play.getX() - playQ[i].getX() >= -10 && play.getY() - playQ[i].getY() >= 40 && play.getY() - playQ[i].getY() <= 60)
{
Move = 1;
break;
}
}
//可以移動(dòng)該棋子
if (Move == 0)
{
//當(dāng)前記錄添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex-20,Ey-17,40,40);
}
}//if
//左移、上邊
else if (play.getY() - me.getY() >= 10 && play.getY() - me.getY() <= 50 && play.getX() - me.getX() >= 60 && play.getX() - me.getX() <= 100)
{
//Y
for (int i=30;i<=462;i+=48)
{
if (i - me.getY() >= -10 && i - me.getY() <= 30)
{
Ey = i;
}
}
//X
for (int i=30;i<=420;i+=48)
{
if (i - me.getX() >= -35 && i-me.getX() <= 10)
{
Ex = i;
}
}
//正左方是否有別的棋子
for (int i=0;i<32;i++)
{
if (playQ[i].isVisible() && play.getY() - playQ[i].getY() <= 10 && play.getY() - playQ[i].getY() >= -10 && play.getX() - playQ[i].getX() >= 40 && play.getX() - playQ[i].getX() <= 60)
{
Move = 1;
break;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -