📄 chess.java
字号:
//中国象棋单机人人对战1.0版
//javaest
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.*;
class ChessPanel extends JPanel
{
final int blue_car_1=1;//32个棋子分别用1-32来区分
final int blue_horse_1=2;
final int blue_elef_1=3;
final int blue_nurse_1=4;
final int blue_master_1=5;
final int blue_nurse_2=6;
final int blue_elef_2=7;
final int blue_horse_2=8;
final int blue_car_2=9;
final int blue_pao_1=10;
final int blue_pao_2=11;
final int blue_bing_1=12;
final int blue_bing_2=13;
final int blue_bing_3=14;
final int blue_bing_4=15;
final int blue_bing_5=16;
final int red_car_1=17;
final int red_horse_1=18;
final int red_elef_1=19;
final int red_nurse_1=20;
final int red_master_1=21;
final int red_nurse_2=22;
final int red_elef_2=23;
final int red_horse_2=24;
final int red_car_2=25;
final int red_pao_1=26;
final int red_pao_2=27;
final int red_bing_1=28;
final int red_bing_2=29;
final int red_bing_3=30;
final int red_bing_4=31;
final int red_bing_5=32;
final int red=1; //在分辩该谁走棋时用到这两个常量
final int blue=-1;
int now_qizi=0,goto_l,goto_h;//now_qizi是当前选中的棋子的编号,goto_l和_h是将要到的地方的行,列值
Image qipan_pic=Toolkit.getDefaultToolkit().getImage("chessqipan.gif");//棋盘图片
Image qizi_pic[]=new Image[33];//32个棋子的图片
Image[][] everybox=new Image[9][10];//棋盘每一块的图片
int[][] qipan=new int[9][10];//把当前棋盘的情况用此数组表示
int[][] qizi=new int[33][5];//把当前棋子的。。。。。。。。。
int moveqizi_l_num,moveqizi_h_num;//当用鼠标脱动棋子时,用它两个表示当前的位置
int mouse_sign=-1;//用来确认当前是选中其子还是放(定位)棋子
int turn_number=red;//该谁走
//datainti()是娄据的初始化
public void datainti()
{
for(int i=1;i<33;i++)
{
qizi[i][0]=i;//qizi[i][0]表示是哪 个子
qizi[i][3]=0;//qizi[i][3]表示这个棋子是否正在脱动状态
qizi[i][4]=0;//qizi[i][4]表示这个其子是否死亡.1死,0活
}
qizi[1][1]=0; qizi[1][2]=0;//各各棋子的位置
qizi[2][1]=1; qizi[2][2]=0;
qizi[3][1]=2; qizi[3][2]=0;
qizi[4][1]=3; qizi[4][2]=0;
qizi[5][1]=4; qizi[5][2]=0;
qizi[6][1]=5; qizi[6][2]=0;
qizi[7][1]=6; qizi[7][2]=0;
qizi[8][1]=7; qizi[8][2]=0;
qizi[9][1]=8; qizi[9][2]=0;
qizi[10][1]=1; qizi[10][2]=2;
qizi[11][1]=7; qizi[11][2]=2;
qizi[12][1]=0; qizi[12][2]=3;
qizi[13][1]=2; qizi[13][2]=3;
qizi[14][1]=4; qizi[14][2]=3;
qizi[15][1]=6; qizi[15][2]=3;
qizi[16][1]=8; qizi[16][2]=3;
qizi[17][1]=0; qizi[17][2]=9;
qizi[18][1]=1; qizi[18][2]=9;
qizi[19][1]=2; qizi[19][2]=9;
qizi[20][1]=3; qizi[20][2]=9;
qizi[21][1]=4; qizi[21][2]=9;
qizi[22][1]=5; qizi[22][2]=9;
qizi[23][1]=6; qizi[23][2]=9;
qizi[24][1]=7; qizi[24][2]=9;
qizi[25][1]=8; qizi[25][2]=9;
qizi[26][1]=1; qizi[26][2]=7;
qizi[27][1]=7; qizi[27][2]=7;
qizi[28][1]=0; qizi[28][2]=6;
qizi[29][1]=2; qizi[29][2]=6;
qizi[30][1]=4;qizi[30][2]=6;
qizi[31][1]=6; qizi[31][2]=6;
qizi[32][1]=8; qizi[32][2]=6;
//装载图片
qizi_pic[blue_car_1]=Toolkit.getDefaultToolkit().getImage("blue_car.gif");
qizi_pic[blue_car_2]=Toolkit.getDefaultToolkit().getImage("blue_car.gif");
qizi_pic[blue_horse_1]=Toolkit.getDefaultToolkit().getImage("blue_horse.gif");
qizi_pic[blue_horse_2]=Toolkit.getDefaultToolkit().getImage("blue_horse.gif");
qizi_pic[blue_elef_1]=Toolkit.getDefaultToolkit().getImage("blue_elef.gif");
qizi_pic[blue_elef_2]=Toolkit.getDefaultToolkit().getImage("blue_elef.gif");
qizi_pic[blue_nurse_1]=Toolkit.getDefaultToolkit().getImage("blue_nurse.gif");
qizi_pic[blue_nurse_2]=Toolkit.getDefaultToolkit().getImage("blue_nurse.gif");
qizi_pic[blue_master_1]=Toolkit.getDefaultToolkit().getImage("blue_master.gif");
qizi_pic[blue_pao_1]=Toolkit.getDefaultToolkit().getImage("blue_pao.gif");
qizi_pic[blue_pao_2]=Toolkit.getDefaultToolkit().getImage("blue_pao.gif");
qizi_pic[blue_bing_1]=Toolkit.getDefaultToolkit().getImage("blue_bing.gif");
qizi_pic[blue_bing_2]=Toolkit.getDefaultToolkit().getImage("blue_bing.gif");
qizi_pic[blue_bing_3]=Toolkit.getDefaultToolkit().getImage("blue_bing.gif");
qizi_pic[blue_bing_4]=Toolkit.getDefaultToolkit().getImage("blue_bing.gif");
qizi_pic[blue_bing_5]=Toolkit.getDefaultToolkit().getImage("blue_bing.gif");
qizi_pic[red_car_1]=Toolkit.getDefaultToolkit().getImage("red_car.gif");
qizi_pic[red_car_2]=Toolkit.getDefaultToolkit().getImage("red_car.gif");
qizi_pic[red_horse_1]=Toolkit.getDefaultToolkit().getImage("red_horse.gif");
qizi_pic[red_horse_2]=Toolkit.getDefaultToolkit().getImage("red_horse.gif");
qizi_pic[red_elef_1]=Toolkit.getDefaultToolkit().getImage("red_elef.gif");
qizi_pic[red_elef_2]=Toolkit.getDefaultToolkit().getImage("red_elef.gif");
qizi_pic[red_nurse_1]=Toolkit.getDefaultToolkit().getImage("red_nurse.gif");
qizi_pic[red_nurse_2]=Toolkit.getDefaultToolkit().getImage("red_nurse.gif");
qizi_pic[red_master_1]=Toolkit.getDefaultToolkit().getImage("red_master.gif");
qizi_pic[red_pao_1]=Toolkit.getDefaultToolkit().getImage("red_pao.gif");
qizi_pic[red_pao_2]=Toolkit.getDefaultToolkit().getImage("red_pao.gif");
qizi_pic[red_bing_1]=Toolkit.getDefaultToolkit().getImage("red_bing.gif");
qizi_pic[red_bing_2]=Toolkit.getDefaultToolkit().getImage("red_bing.gif");
qizi_pic[red_bing_3]=Toolkit.getDefaultToolkit().getImage("red_bing.gif");
qizi_pic[red_bing_4]=Toolkit.getDefaultToolkit().getImage("red_bing.gif");
qizi_pic[red_bing_5]=Toolkit.getDefaultToolkit().getImage("red_bing.gif");
for(int i=0;i<10;i++)
for(int j=0;j<9;j++)
{
ImageFilter filterObj=new CropImageFilter(ltoL(j)-34,htoH(i)-34,68,68);
ImageProducer producerObj=new FilteredImageSource(qipan_pic.getSource(),filterObj);
everybox[j][i]=createImage(producerObj);
}
for(int i=0;i<9;i++)
for(int j=0;j<10;j++)
qipan[i][j]=0;
for(int i=1;i<33;i++)
qipan[qizi[i][1]][qizi[i][2]]=qizi[i][0];
MediaTracker tracker=new MediaTracker(this);
tracker.addImage(qipan_pic,0);
for(int i=1;i<33;i++)
tracker.addImage(qizi_pic[i],i);
int n=33;
for(int i=0;i<10;i++)
for(int j=0;j<9;j++)
tracker.addImage(everybox[j][i],n++);
try
{
tracker.waitForAll();
}
catch(InterruptedException ex){}
}
//分辨率转成棋盘(H)
public int Htoh(int h)
{
int o_h=51;
int every_h=67;
int h_num=(h-o_h+every_h/2)/every_h;
return(h_num);
}
//L
public int Ltol(int l)
{
int o_l=62;
int every_l=68;
int l_num=(l-o_l+every_l/2)/every_l;
return(l_num);
}
//棋盘转成分辩率
public int ltoL(int L)
{
int o_l=62;
int every_l=68;
int l_pix=o_l+L*every_l;
return(l_pix);
}
public int htoH(int H)
{
int o_h=51;
int every_h=67;
int H_pix=o_h+H*every_h;
return(H_pix);
}
//l,h处是否有子
public boolean haveqizi(int l,int h)
{
if(qipan[l][h]!=0)
{
if(qizi[qipan[l][h]][4]==1)return(false);
return(true);
}
else
return(false);
}
//A&B 是一伙的吗?
public boolean samefamily(int first_qizi,int second_qizi)
{
if((isred(first_qizi)==true&&isred(second_qizi)==true)||(isred(first_qizi)==false&&isred(second_qizi)==false))
return(true);
else
return(false);
}
//是红棋吗
public boolean isred(int aqizi)
{
if(aqizi<=16)
return(false);
else
return(true);
}
//是兵吗
public boolean isbing(int a_qizi)
{
if((a_qizi<=16&&a_qizi>=12)||(a_qizi<=32&&a_qizi>=28))
return(true);
else
return(false);
}
//当前棋子可以放在(goto_l,goto_h)这吗?
public boolean isOK(int goto_l,int goto_h)
{
int now_l=qizi[now_qizi][1],now_h=qizi[now_qizi][2];
if(goto_l==now_l&&goto_h==now_h)return(false);
if((now_qizi==blue_car_1||now_qizi==blue_car_2||now_qizi==red_car_1||now_qizi==red_car_2||now_qizi==blue_pao_1||now_qizi==blue_pao_2||now_qizi==red_pao_1||now_qizi==red_pao_2||now_qizi==blue_master_1||now_qizi==red_master_1||(now_qizi>=12&&now_qizi<=16)||(now_qizi>=28&&now_qizi<=32))&&now_l!=goto_l&&now_h!=goto_h)return(false);
if(haveqizi(goto_l,goto_h)&&samefamily(qipan[goto_l][goto_h],now_qizi))return(false);
if((now_qizi==blue_car_1||now_qizi==blue_car_2||now_qizi==red_car_1||now_qizi==red_car_2)&&between(now_l,now_h,goto_l,goto_h)!=0)return(false);
if((now_qizi==blue_pao_1||now_qizi==blue_pao_2||now_qizi==red_pao_1||now_qizi==red_pao_2)&&between(now_l,now_h,goto_l,goto_h)!=0&&between(now_l,now_h,goto_l,goto_h)!=1)return(false);
if((now_qizi==blue_pao_1||now_qizi==blue_pao_2||now_qizi==red_pao_1||now_qizi==red_pao_2)&&between(now_l,now_h,goto_l,goto_h)==1&&(haveqizi(goto_l,goto_h)&&samefamily(now_qizi,qipan[goto_l][goto_h])||(!haveqizi(goto_l,goto_h))))return(false);
if((now_qizi==blue_pao_1||now_qizi==blue_pao_2||now_qizi==red_pao_1||now_qizi==red_pao_2)&&between(now_l,now_h,goto_l,goto_h)==0&&haveqizi(goto_l,goto_h))return(false);
if((now_qizi==blue_master_1||now_qizi==red_master_1)&&(goto_l<3||goto_l>5))return(false);
if(now_qizi==blue_master_1&&goto_h>2)return(false);
if(now_qizi==red_master_1&&goto_h<7)return(false);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -