📄 chessmain.java
字号:
activecolor=255;
}
}
}
else
{
if(trace(activeid,idX,idY,activeX,activeY)==0)
{
chessitem[(activeid-1)*6+1]=idX;
chessitem[(activeid-1)*6+2]=idY;
isPress=0;
activeid=0;
activecolor=0;
}
if(trace(activeid,idX,idY,activeX,activeY)==1)
{
SMessage=activeid*1000000+activeX*1000+activeY;
if(socketthread.B_Socketthread == true)
{
socketthread.accept();
socketthread.sendmessage(Integer.toString(SMessage));
}
isPress=0;
activeid=0;
activecolor=0;
sTime=300;
yesno=0;
for(int i=0;i<32;i++)
{
if(self==1)
{
if(chessitem[i*6+1]==activeX && chessitem[i*6+2]==activeY && i!=(activeid-1)&&chessitem[i*6+5]==0)
chessitem[i*6+3]=0;
}
if(self==0)
{
if(chessitem[i*6+1]==activeX && chessitem[i*6+2]==activeY && i!=(activeid-1)&&chessitem[i*6+5]==1)
chessitem[i*6+3]=0;
}
}
}
if(trace(activeid,idX,idY,activeX,activeY)==2)
{
isPress=0;
activeid=0;
activecolor=0;
}
}
}
break;
}
case GAME_A:
{
((chess)omidlet).exit();
}
}
}
if(activeid!=0&&yesno==1&&activecolor==255)
{
chessitem[(activeid-1)*6+1]=activeX;
chessitem[(activeid-1)*6+2]=activeY;
}
}
/*****************************************************/
// 激活棋子
//
/*****************************************************/
public void active(Graphics g, int x,int y,int color,int h)
{
int i=0,x0,y0,x1,y1;
x0=x;y0=y;
x1=x+13;y1=y+13;
//g.setGrayScale(color);
g.setColor(color);
while(i<=(h-1))
{
g.drawLine(x0+i,y0+i,x1-i,y0+i);
g.drawLine(x1-i,y0+i,x1-i,y1-i);
g.drawLine(x1-i,y1-i,x0+i,y1-i);
g.drawLine(x0+i,y1-i,x0+i,y0+i);
i++;
}
// g.drawRect(x+1,y+1,x+12,y+12);
}
/*****************************************************/
// 分析各个棋子的走法规则
//
//
/*****************************************************/
public int trace(int id,int oldX,int oldY,int X,int Y)
{
if(oldX==X&&oldY==Y)
return 2;
if(chessitem[(id-1)*6+4]==1)//车
{
for(int i=0;i<32;i++)
{
if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
return 0;
if((oldX-X)*(oldY-Y)==0 && (oldX-X)==0 && chessitem[i*6+1]==X &&chessitem[i*6+3]==1&&((chessitem[i*6+2]>oldY&&chessitem[i*6+2]<Y)||(chessitem[i*6+2]<oldY&&chessitem[i*6+2]>Y)))
return 0;
if((oldX-X)*(oldY-Y)==0 && (oldY-Y)==0 && chessitem[i*6+2]==Y &&chessitem[i*6+3]==1&&((chessitem[i*6+1]>oldX&&chessitem[i*6+1]<X)||(chessitem[i*6+1]<oldX&&chessitem[i*6+1]>X)))
return 0;
}
if((oldX-X)*(oldY-Y)==0)
return 1;
else
return 0;
}
if(chessitem[(id-1)*6+4]==2)//马
{
//判断落点处是否有棋子
for(int i=0;i<32;i++)
{
if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
return 0;
}
//判断是否便腿
if((oldX-X)*(oldY-Y)==338||(oldX-X)*(oldY-Y)==-338)
{
if((oldX-X)*(oldX-X)==169&&((oldY-Y)==26||(oldY-Y)==-26))
{
for(int i=0;i<32;i++)
{
if(chessitem[i*6+1]==oldX&&chessitem[i*6+2]==(oldY+Y)/2&&chessitem[i*6+3]==1)//便腿处理
return 0;
}
return 1;
}
if((oldY-Y)*(oldY-Y)==169&&((oldX-X)==26||(oldX-X)==-26))
{
for(int i=0;i<32;i++)
{
if(chessitem[i*6+1]==(oldX+X)/2&&chessitem[i*6+2]==oldY&&chessitem[i*6+3]==1)//便腿处理
return 0;
}
return 1;
}
}
else
return 0;
}
if(chessitem[(id-1)*6+4]==3)//象
{
//判断落点处是否有棋子
for(int i=0;i<32;i++)
{
if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
return 0;
}
if(((oldX-X)==26||(oldX-X)==-26)&&((oldY-Y)==26||(oldY-Y)==-26))
{
for(int i=0;i<32;i++)
{
if(chessitem[i*6+1]==(oldX+X)/2&&chessitem[i*6+2]==(oldY+Y)/2)
return 0;
}
if(chessitem[(id-1)*6+5]==0&&Y<65)
return 1;
if(chessitem[(id-1)*6+5]==1&&Y>52)
return 1;
else
return 0;
}
else
return 0;
}
if(chessitem[(id-1)*6+4]==4)//士
{
//判断落点处是否有棋子
for(int i=0;i<32;i++)
{
if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
return 0;
}
if(chessitem[(id-1)*6+5]==0)
{
if(((oldX-X)==13||(oldX-X)==-13)&&((oldY-Y)==13||(oldY-Y)==-13)&&(X>=39&&X<78&&Y>=0&&Y<39))
return 1;
else
return 0;
}
if(chessitem[(id-1)*6+5]==1)
{
if(((oldX-X)==13||(oldX-X)==-13)&&((oldY-Y)==13||(oldY-Y)==-13)&&(X>=39&&X<78&&Y>=91&&Y<130))
return 1;
else
return 0;
}
}
if(chessitem[(id-1)*6+4]==5)//将
{
//判断落点处是否有棋子
for(int i=0;i<32;i++)
{
if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
return 0;
}
if(chessitem[(id-1)*6+5]==0)
{
if((((oldX-X)==13||(oldX-X)==-13)||((oldY-Y)==13||(oldY-Y)==-13))&&(oldX-X)*(oldY-Y)==0&&(X>=39&&X<78&&Y>=0&&Y<39))
return 1;
else
return 0;
}
if(chessitem[(id-1)*6+5]==1)
{
if((((oldX-X)==13||(oldX-X)==-13)||((oldY-Y)==13||(oldY-Y)==-13))&&(oldX-X)*(oldY-Y)==0&&(X>=39&&X<78&&Y>=91&&Y<130))
return 1;
else
return 0;
}
}
int pos=0,count=0;
if(chessitem[(id-1)*6+4]==6)//炮
{
for(int i=0;i<32;i++)//判断中间是否隔棋子
{
if((oldX-X)*(oldY-Y)==0 && (oldX-X)==0 && chessitem[i*6+1]==X &&chessitem[i*6+3]==1&&((chessitem[i*6+2]>oldY&&chessitem[i*6+2]<Y)||(chessitem[i*6+2]<oldY&&chessitem[i*6+2]>Y)))
count++;
if((oldX-X)*(oldY-Y)==0 && (oldY-Y)==0 && chessitem[i*6+2]==Y &&chessitem[i*6+3]==1&&((chessitem[i*6+1]>oldX&&chessitem[i*6+1]<X)||(chessitem[i*6+1]<oldX&&chessitem[i*6+1]>X)))
count++;
}
for(int i=0;i<32;i++)
{
//判断落点处是否有棋子
if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1)
pos=1;
//判断落点是否为自己棋子
if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
return 0;
//判断落点是否为敌方棋子
if(self==1)
{
if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==0&&count==1)
{
return 1;
}
}
if(self==0)
{
if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==1&&count==1)
return 1;
}
}
if((oldX-X)*(oldY-Y)==0&&count==0&&pos==0)
return 1;
else
return 0;
}
if(chessitem[(id-1)*6+4]==7&&chessitem[(id-1)*6+5]==0)//红兵
{
//判断落点处是否有棋子
for(int i=0;i<32;i++)
{
if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
return 0;
}
if(oldY>65)
{
if((((oldX-X)==13||(oldX-X)==-13)||((oldY-Y)==-13))&&(oldX-X)*(oldY-Y)==0)
return 1;
else
return 0;
}
else
{
if(oldX==X&&(oldY-Y)==-13)
return 1;
else
return 0;
}
}
if(chessitem[(id-1)*6+4]==7&&chessitem[(id-1)*6+5]==1)//兵
{
//判断落点处是否有棋子
for(int i=0;i<32;i++)
{
if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
return 0;
}
if(oldY<65)
{
if((((oldX-X)==13||(oldX-X)==-13)||((oldY-Y)==13))&&(oldX-X)*(oldY-Y)==0)
return 1;
else
return 0;
}
else
{
if(oldX==X&&(oldY-Y)==13)
return 1;
else
return 0;
}
}
return 1;
}
////////////////////////////////////////////////////////////
// 主引擎
//
////////////////////////////////////////////////////////////
public void run()
{
int tempID,tempX,tempY,temp;
Graphics g=imageall.getGraphics();
g.setGrayScale(255);
g.fillRect(0,0,width,height);
g.setGrayScale(0);
if(isFirst==1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -