📄 gamecanvas.java
字号:
}
}
}
/**
* 检查x,y型表
*
* ChessBoard[lineNum][lineNum];//表示状态
* ChessStatus[lineNum][lineNum][4];//表示型态
*
* */
private void Check(int x,int y,int who){
int Left=0;
int Right=0;
int Up=0;
int Down=0;
int RightDown=0;
int RightUp=0;
int LeftUp=0;
int LeftDown=0;
boolean Right_b=false;
boolean Left_b=false;
boolean Down_b=false;
boolean Up_b=false;
boolean RU_b=false;
boolean LD_b=false;
boolean LU_b=false;
boolean RD_b=false;
for(int i=1;i<=4;i++){
if((x+i)<lineNum){
if(ChessBoard[x+i][y]==who&&!Right_b) Right++; else Right_b=true;
}else{Right_b=true;}
if((x-i)>=0){
if(ChessBoard[x-i][y]==who&&!Left_b) Left++; else Left_b=true;
}else{Left_b=true;}
if((y+i)<lineNum){
if(ChessBoard[x][y+i]==who&&!Down_b) Down++; else Down_b=true;
}else{Down_b=true;}
if((y-i)>=0){
if(ChessBoard[x][y-i]==who&&!Up_b) Up++; else Up_b=true;
}else{Up_b=true;}
if((x+i)<lineNum&&(y-i)>=0&&!RU_b){
if(ChessBoard[x+i][y-i]==who) RightUp++; else RU_b=true;
}else{RU_b=true;}
if((x-i)>=0&&(y+i)<lineNum&&!LD_b){
if(ChessBoard[x-i][y+i]==who) LeftDown++; else LD_b=true;
}else{LD_b=true;}
if((x-i)>=0&&(y-i)>=0&&!LU_b){
if(ChessBoard[x-i][y-i]==who) LeftUp++; else LU_b=true;
}else{LU_b=true;}
if((x+i)<lineNum&&(y+i)<lineNum&&!RD_b){
if(ChessBoard[x+i][y+i]==who) RightDown++; else RD_b=true;
}else{RD_b=true;}
}
ChessStatus[x][y][0]=Left+Right;
ChessStatus[x][y][1]=Up+Down;
ChessStatus[x][y][2]=RightUp+LeftDown;
ChessStatus[x][y][3]=RightDown+LeftUp;
//-----------------
// 此处增加权值计算代码,
//-----------------
}
private void setSound(String s, int i)
{
try
{
DataInputStream datainputstream = new DataInputStream(getClass().getResourceAsStream("/" + s));
int j = datainputstream.readInt();
int k = datainputstream.read();
int l = datainputstream.read();
int i1 = datainputstream.read();
int j1 = datainputstream.read();
int k1 = (j1 << 24) + (i1 << 16) + (l << 8) + (k << 0) + 8;
datainputstream.close();
datainputstream = new DataInputStream(getClass().getResourceAsStream("/" + s));
byte abyte0[] = new byte[k1];
datainputstream.read(abyte0, 0, k1);
datainputstream.close();
sD[i] = new Sound(abyte0, 5);
}
catch(Exception exception) { }
}
private void drawMenu(Graphics g){
g.setColor(255, 00,00);
g.fillRect(13, 13, 98, 178);
g.setColor(00, 00,00);
g.fillRect(18, 18, 88, 168);
g.setFont(Font.getFont(0, 1, 8));
g.setColor(255, 00, 00);
byte byte0 = 40;
}
/**
* 从型表中选取最大
* */
private void getLarge(){
int temp1=0;
int temp2=0;
int drop_x=lineNum/2;
int drop_y=lineNum/2;
for(int x=0;x<lineNum;x++){
for(int y=0;y<lineNum;y++){
temp2=ChessStatus[x][y][0]+ChessStatus[x][y][1]+ChessStatus[x][y][2]+ChessStatus[x][y][3];
if(temp2>temp1){
drop_x=x;
drop_y=y;
}
}
}
computer_x=drop_x*ChessUnitage+ChessBoardOffset;
computer_y=drop_y*ChessUnitage+ChessBoardOffset;
}
/*
*初始化权值表
**/
private void initPower(){
power[0][0][0] = 0;
power[0][0][1] = 10;
power[0][0][2] = 30;
power[0][0][3] = 750;
power[0][0][4] = 16000;
power[0][1][0] = 0;
power[0][1][1] = 2;
power[0][1][2] = 5;
power[0][1][3] = 50;
power[0][1][4] = 7750;
power[0][2][0] = 0;
power[0][2][1] = 0;
power[0][2][2] = 0;
power[0][2][3] = 0;
power[0][2][4] = 16000;
power[1][0][0] = 0;
power[1][0][1] = 10;
power[1][0][2] = 30;
power[1][0][3] = 350;
power[1][0][4] = 4000;
power[1][1][0] = 0;
power[1][1][1] = 1;
power[1][1][2] = 5;
power[1][1][3] = 40;
power[1][1][4] = 4000;
power[1][2][0] = 0;
power[1][2][1] = 0;
power[1][2][2] = 0;
power[1][2][3] = 0;
power[1][2][4] = 16000;
}
/**
* 如果型表中势力相同,则随机选取一个
* */
private int RandonInt(int i,int j) {
int k = rand.nextInt();
if(k < 0)
k = -(k + 1);
return i + k % (j - i);
}
public void AI()
{
for(int i6 = 0; i6 < lineNum; i6++)
{
for(int j6 = 0; j6 < lineNum; j6++)
{
Ctable[i6][j6] = 0;
}
}
for(int i = 0; i < lineNum; i++)
{
for(int j = 0; j < lineNum; j++)
{
int k4 = ChessBoard[i][j];
if(k4 <= 0)
{
for(int l4 = 0; l4 < 4; l4++)
{
switch(l4)
{
default:
break;
case 0: // '\0'
for(int k3 = 1; k3 <= 2; k3++)
{
int i5 = computerfirst + k3 != 2 ? 1 : 0;
byte byte0 = ((byte)(k3 != 2 ? 2 : 1));
int k;
for(k = 1; i + k < lineNum; k++)
{
if(ChessBoard[i + k][j] != k3)
{
break;
}
}
int i1;
for(i1 = -1; i + i1 >= 0; i1--)
{
if(ChessBoard[i + i1][j] != k3)
{
break;
}
}
if(i + k <= lineNum - 1 && ChessBoard[i + k][j] <= 0 && i + i1 >= 0 && ChessBoard[i + i1][j] <= 0)
{
Ctable[i][j] = Ctable[i][j] + power[i5][0][k - i1 - 2 <= 4 ? k - i1 - 2 : 4];
} else
if((i + k > lineNum - 1 || i + k < lineNum && ChessBoard[i + k][j] == byte0) && (i + i1 < 0 || i + i1 >= 0 && ChessBoard[i + i1][j] == byte0))
{
Ctable[i][j] = Ctable[i][j] + power[i5][2][k - i1 - 2 <= 4 ? k - i1 - 2 : 4];
} else
{
Ctable[i][j] = Ctable[i][j] + power[i5][1][k - i1 - 2 <= 4 ? k - i1 - 2 : 4];
}
}
break;
case 1: // '\001'
for(int l3 = 1; l3 <= 2; l3++)
{
int j5 = computerfirst + l3 != 2 ? 1 : 0;
byte byte1 = ((byte)(l3 != 2 ? 2 : 1));
int k1 = 1;
int k2;
for(k2 = 1; i + k1 < lineNum && j + k2 < lineNum; k2++)
{
if(ChessBoard[i + k1][j + k2] != l3)
{
break;
}
k1++;
}
int i2 = -1;
int i3;
for(i3 = -1; i + i2 >= 0 && j + i3 >= 0; i3--)
{
if(ChessBoard[i + i2][j + i3] != l3)
{
break;
}
i2--;
}
if(i + k1 <= lineNum - 1 && j + k2 <= lineNum - 1 && ChessBoard[i + k1][j + k2] <= 0 && i + i2 >= 0 && j + i3 >= 0 && ChessBoard[i + i2][j + i3] <= 0)
{
Ctable[i][j] = Ctable[i][j] + power[j5][0][k1 - i2 - 2 <= 4 ? k1 - i2 - 2 : 4];
} else
if((i + k1 > lineNum - 1 || j + k2 > lineNum - 1 || i + k1 <= lineNum - 1 && j + k2 <= lineNum - 1 && ChessBoard[i + k1][j + k2] == byte1) && (i + i2 < 0 || j + i3 < 0 || i + i2 >= 0 && j + i3 >= 0 && ChessBoard[i + i2][j + i3] == byte1))
{
Ctable[i][j] = Ctable[i][j] + power[j5][2][k1 - i2 - 2 <= 4 ? k1 - i2 - 2 : 4];
} else
{
Ctable[i][j] = Ctable[i][j] + power[j5][1][k1 - i2 - 2 <= 4 ? k1 - i2 - 2 : 4];
}
}
break;
case 2: // '\002'
for(int i4 = 1; i4 <= 2; i4++)
{
int k5 = computerfirst + i4 != 2 ? 1 : 0;
byte byte2 = ((byte)(i4 != 2 ? 2 : 1));
int l;
for(l = 1; j + l < lineNum; l++)
{
if(ChessBoard[i][j + l] != i4)
{
break;
}
}
int j1;
for(j1 = -1; j + j1 >= 0; j1--)
{
if(ChessBoard[i][j + j1] != i4)
{
break;
}
}
if(j + l <= lineNum - 1 && ChessBoard[i][j + l] <= 0 && j + j1 >= 0 && ChessBoard[i][j + j1] <= 0)
{
Ctable[i][j] = Ctable[i][j] + power[k5][0][l - j1 - 2 <= 4 ? l - j1 - 2 : 4];
} else
if((j + l > lineNum - 1 || j + l <= lineNum - 1 && ChessBoard[i][j + l] == byte2) && (j + j1 < 0 || j + j1 >= 0 && ChessBoard[i][j + j1] == byte2))
{
Ctable[i][j] = Ctable[i][j] + power[k5][2][l - j1 - 2 <= 4 ? l - j1 - 2 : 4];
} else
{
Ctable[i][j] = Ctable[i][j] + power[k5][1][l - j1 - 2 <= 4 ? l - j1 - 2 : 4];
}
}
break;
case 3: // '\003'
for(int j4 = 1; j4 <= 2; j4++)
{
int l5 = computerfirst + j4 != 2 ? 1 : 0;
byte byte3 = ((byte)(j4 != 2 ? 2 : 1));
int l1 = -1;
int l2;
for(l2 = 1; i + l1 >= 0 && j + l2 <= lineNum - 1; l2++)
{
if(ChessBoard[i + l1][j + l2] != j4)
{
break;
}
l1--;
}
int j2 = 1;
int j3;
for(j3 = -1; i + j2 <= lineNum - 1 && j + j3 >= 0; j3--)
{
if(ChessBoard[i + j2][j + j3] != j4)
{
break;
}
j2++;
}
if(i + l1 >= 0 && j + l2 <= lineNum - 1 && ChessBoard[i + l1][j + l2] <= 0 && i + j2 <= lineNum - 1 && j + j3 >= 0 && ChessBoard[i + j2][j + j3] <= 0)
{
Ctable[i][j] = Ctable[i][j] + power[l5][0][j2 - l1 - 2 <= 4 ? j2 - l1 - 2 : 4];
} else
if((i + l1 < 0 || j + l2 > lineNum - 1 || i + l1 >= 0 && j + l2 <= lineNum - 1 && ChessBoard[i + l1][j + l2] == byte3) && (i + j2 > lineNum - 1 || j + j3 < 0 || i + j2 <= lineNum - 1 && j + j3 >= 0 && ChessBoard[i + j2][j + j3] <= 0))
{
Ctable[i][j] = Ctable[i][j] + power[l5][2][j2 - l1 - 2 <= 4 ? j2 - l1 - 2 : 4];
} else
{
Ctable[i][j] = Ctable[i][j] + power[l5][1][j2 - l1 - 2 <= 4 ? j2 - l1 - 2 : 4];
}
}
break;
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -