📄 chessboard.java
字号:
return true;
}
public boolean handleEvent(Event evt)
{
switch (evt.id)
{
case Event.MOUSE_DOWN :
if(!chessArray.change)
{
chessArray.information ("现在不能走棋;"+chessArray.information);
return false;//如果此时不允许修改,则返回
}
if (judgePlace(evt.x,evt.y)&&evt.clickCount==1)
{//如果点击点落在棋子范围内
if(chooseCh==false&&chessArray.chArray[numy][numx]!=0)
{//如果没有选中棋子,即处在选棋状态,并且点击点有棋子
if(chessArray.chArray[numy][numx]<200)
{
chessArray.information ("请走您自己的子");
return false;
}
chooseCh=true;
int ch=chessArray.chArray[numy][numx];
numCh=judgeChoice(ch);
numxBak=numx;
numyBak=numy;
chequer[numCh].chM(LcornerX+lengthX*numx-this.lengthMin/2,LcornerY+lengthY*numy-this.lengthMin/2,
lengthMin-1,chString[ch/200][ch%100/10-1],chColor[ch/200],Color.lightGray);
//将棋子颜色改为灰色说明此棋子已被选中
chequer[numCh].repaint();
chessArray.changeCount1 =numy*10+numx;
return true;
}
if(chooseCh)
{//如果选中棋子,即处在走棋状态
if(numxBak==numx&&numyBak==numy){//如果棋子的代码相同,则认为在同一位置点击两次,返回
chooseCh=false;//变为允许选棋状态
walkCh(false);
return true;
}
if(!chRule())return false;//若不符合规则,返回
walkCh(true);
chooseCh=false;//变为允许选棋状态
chessArray.change=false;//数据已改动,可以发送数据
chessArray.readyOut=true;//数据已改动,可以发送数据
chessArray.information("正在发送数据......");
chessArray.changeCount2 =numy*10+numx;
return true;
}
}
return true;
default:
return false;
}
}
public boolean chRule()
{
if(chessArray.chArray[numyBak][numxBak]/100==chessArray.chArray[numy][numx]/100&&chessArray.chArray[numy][numx]!=0)
{
chessArray.information ("不能吃自家的子,请重走");
return false;
}
int chCode=chessArray.chArray[numyBak][numxBak];
if(chCode%200/10==1)
{
if(numx<3||numx>5)
{
chessArray.information ("帅不能出框,请重走");
return false;
}
if(Math.abs (numx-numxBak)+Math.abs(numy-numyBak)!=1)
{
chessArray.information ("帅只能走一格,请重走");
return false;
}
}
if(chCode%200/10==2)
{
if(Math.abs (numx-numxBak)+Math.abs(numy-numyBak)==1)return true;
if((numx-numxBak)*(numy-numyBak)!=0)
{
chessArray.information ("車走直路,请重走");
return false;
}
int j;
if(numy==numyBak)
{
j=Math.abs (numx-numxBak)/(numx-numxBak);
for(int i=numxBak+j;i!=numx;i+=j)//横向判断
{
if(chessArray.chArray [numy][i]!=0)
{
chessArray.information ("車不能跃子,请重走");
return false;
}
}
}
if(numx==numxBak)
{
j=Math.abs (numy-numyBak)/(numy-numyBak);
for(int i=numyBak+j;i!=numy;i+=j)//纵向判断
{
if(chessArray.chArray [i][numx]!=0)
{
chessArray.information ("車不能跃子,请重走");
return false;
}
}
}
}
if(chCode%200/10==3)
{
if(Math.abs (numx-numxBak)+Math.abs(numy-numyBak)==1)return true;
if((numx-numxBak)*(numy-numyBak)!=0)
{
chessArray.information ("炮走直路,请重走");
return false;
}
if(chessArray.chArray [numy][numx]==0)
{
if(numy==numyBak)
{
int j=Math.abs (numx-numxBak)/(numx-numxBak);
for(int i=numxBak+j;i!=numx;i+=j)//横向判断
{
if(chessArray.chArray [numy][i]!=0)
{
chessArray.information ("炮不吃子时不能跃子,请重走");
return false;
}
}
}
if(numx==numxBak)
{
int j=Math.abs (numy-numyBak)/(numy-numyBak);
for(int i=numyBak+j;i!=numy;i+=j)//纵向判断
{
if(chessArray.chArray [i][numx]!=0)
{
chessArray.information ("炮不吃子时不能跃子,请重走");
return false;
}
}
}
}
if(chessArray.chArray [numy][numx]!=0)
{
if(numy==numyBak)
{
if((numx-numxBak)>-3&&(numx-numxBak)<3)return true;
int j=Math.abs (numx-numxBak)/(numx-numxBak);
int k=0;
for(int i=numxBak+j;i!=numx-j;i+=j)//横向判断
{
if(chessArray.chArray [numy][i]!=0)k++;
if(k!=1&&i==numx-j)
{
chessArray.information ("炮吃子时能且只能跃一子,请重走");
return false;
}
}
}
if(numx==numxBak)
{
if((numy-numyBak)>-3&&(numy-numyBak)<3)return true;
int j=Math.abs (numy-numyBak)/(numy-numyBak);
int k=0;
for(int i=numyBak+j;i!=numy-j;i+=j)//纵向判断
{
if(chessArray.chArray [i][numx]!=0)k++;
if(k!=1&&i==numx-j)//
{
chessArray.information ("炮吃子时能且只能跃一子,请重走");
return false;
}
}
}
}
}
if(chCode%200/10==4)
{
if(Math.abs (numx-numxBak)*Math.abs(numy-numyBak)!=2)
{
chessArray.information ("马走日字,请重走");
return false;
}
if(Math.abs (numx-numxBak)==2&&chessArray.chArray [numyBak][numxBak+(numx-numxBak)/2]!=0)
{
chessArray.information ("别马腿,请重走");
return false;
}
if(Math.abs (numy-numyBak)==2&&chessArray.chArray [numyBak+(numy-numyBak)/2][numxBak]!=0)
{
chessArray.information ("别马腿,请重走");
return false;
}
}
if(chCode%200/10==5)
{
if(numy<5)
{
chessArray.information ("相不能过界,请重走");
return false;
}
if(Math.abs (numx-numxBak)!=2||Math.abs(numy-numyBak)!=2)
{
chessArray.information ("相走田字,请重走");
return false;
}
if(chessArray.chArray [numyBak+(numy-numyBak)/2][numxBak+(numx-numxBak)/2]!=0)
{
chessArray.information ("别相眼,请重走");
return false;
}
}
if(chCode%200/10==6)
{
if(numx<3||numx>5)
{
chessArray.information ("士不能出框,请重走");
return false;
}
if(Math.abs (numx-numxBak)*Math.abs(numy-numyBak)!=1)
{
chessArray.information ("士只能沿斜线走,请重走");
return false;
}
}
if(chCode%200/10==7)
{
if(numy>numyBak)
{
chessArray.information ("兵不能后退,请重走");
return false;
}
if(Math.abs (numx-numxBak)+Math.abs(numy-numyBak)!=1)
{
chessArray.information ("兵只能走一格,请重走");
return false;
}
if(numyBak>4&&numy==numyBak)
{
chessArray.information ("兵没过界不能横着走,请重走");
return false;
}
}
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -