📄 mypanel.java
字号:
if(line[pos+i]==0) {break;}
if(line[pos+i]== 2-color) {rblock=true; break;}
if(line[pos+i] == color+1) {runion++;}
i++;
}
i=2;
while(pos-i>-1 && line[pos-1]==0){
if(line[pos-i]==0) {break;}
if(line[pos-i]== 2-color) {lblock=true; break;}
if(line[pos-i] == color+1) {lunion++;}
i++;
}
if(lunion==3 && runion==3) return 50;
if(lunion==2 && !lblock) return 10;
if(runion==2 && !rblock) return 10;
if(lunion==3 && lblock) return 12;
if(runion==3 && rblock) return 12;
return -1;
}
private int checkline(int[] line, int pos, int color, int dir, int []union)
{
int weight = 0, count=0, i=dir, max=0;
boolean firsp = true;
union[0]=0;
if(pos+dir==-1 || pos+dir==line.length) return -3; // meet wall
while(pos+i > -1 && pos+i<line.length)
{
if(line[pos+i] == color + 1){ // 遇到己方
if(firsp) {max++; union[0]=max;}
else {count++; max=0;}
if(pos+i == 0 || pos+i == line.length - 1) {weight += 2; break;}
if(!firsp) weight += 4;
else {
if(max==4) return 50;
weight += 5;
}
}
//else if(line[pos+i]<0) break; //遇到禁手
else if(line[pos+i]<=0 && firsp){ //遇到第一空
if(i==dir) break;
firsp = false;
weight += 1;
max = 0;
}
else if(line[pos+i]<=0 && !firsp) {//遇到第二空
if(count>2)
weight += 1;
break;
}
else {//遇到敌方子
if(firsp)
weight -= 3;
else if(!firsp && (count==0 || count>2)) weight -= 1;
else if(!firsp && (count>0 && count<3)) weight -= 2;
break;
}
i += dir;
}
return weight;
}
private void shu(int r, int c){
int line[] = new int[15];
int left[] = new int[1];
int right[] = new int[1];
int temp;
for(int i=0;i<15;i++)
line[i] = table[i][c];
temp = checkbase(line, r, mycolor);
if(temp==-1) temp= checkspecial(line, r, mycolor);
else p_table[r][c][0] = temp;
if(temp==-1){
p_table[r][c][0] = checkline(line, r, mycolor, 1, left) + checkline(line, r, mycolor, -1,right);
if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=15) p_table[r][c][0]=14; // 隔三差五型
else if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=12) p_table[r][c][0]=10; // 活三型
else if(left[0]+right[0]==3 && p_table[r][c][0]>=17) p_table[r][c][0]=16; //活四型
else if(left[0]+right[0]==4) p_table[r][c][0]=50; // 必胜型
else if(left[0]+right[0]>4) p_table[r][c][0]=60; // 六子型
}
temp = checkbase(line, r, 1-mycolor);
if(temp==-1) temp= checkspecial(line, r, 1-mycolor);
else c_table[r][c][0] = temp;
if(temp==-1){
c_table[r][c][0] = checkline(line, r, 1-mycolor, 1, left) + checkline(line, r, 1-mycolor, -1,right);
if(left[0]==1 && right[0]==1 && c_table[r][c][0]>=15) c_table[r][c][0]=14;
else if(left[0]==1 && right[0]==1 && c_table[r][c][0]>=12) c_table[r][c][0]=10; // 活三型
else if(left[0]+right[0]==3 && c_table[r][c][0]>=17) c_table[r][c][0]=16;
else if(left[0]+right[0]==4) c_table[r][c][0]=50;
else if(left[0]+right[0]>4) c_table[r][c][0]=60;
}
}
private void heng(int r, int c){
int line[] = new int[15];
int left[] = new int[1];
int right[] = new int[1];
int temp;
for(int i=0;i<15;i++)
line[i] = table[r][i];
temp = checkbase(line, c, mycolor);
if(temp==-1) temp= checkspecial(line, c, mycolor);
else p_table[r][c][1] = temp;
if(temp==-1){
p_table[r][c][1] = checkline(line, c, mycolor, 1, left) + checkline(line, c, mycolor, -1, right);
if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=15) p_table[r][c][1]=14;
else if(left[0]==1 && right[0]==1 && p_table[r][c][1]>=12) p_table[r][c][1]=10; // 活三型
else if(left[0]+right[0]==3 && p_table[r][c][1]>=17) p_table[r][c][1]=16;
else if(left[0]+right[0]==4) {p_table[r][c][1]=50;}
else if(left[0]+right[0]>4) p_table[r][c][1]=60;
}
temp = checkbase(line, c, 1-mycolor);
if(temp==-1) temp= checkspecial(line, c, 1-mycolor);
else c_table[r][c][1] = temp;
if(temp==-1){
c_table[r][c][1] = checkline(line, c, 1-mycolor, 1, left) + checkline(line, c, 1-mycolor, -1, right);
if(left[0]==1 && right[0]==1 && c_table[r][c][0]>=15) c_table[r][c][1]=14;
else if(left[0]==1 && right[0]==1 && c_table[r][c][1]>=12) c_table[r][c][1]=10; // 活三型
else if(left[0]+right[0]==3 && c_table[r][c][1]>=17) c_table[r][c][1]=16;
else if(left[0]+right[0]==4) {c_table[r][c][1]=50;}
else if(left[0]+right[0]>4) c_table[r][c][1]=60;
}
}
private void pie(int r, int c){
int length, baser, basec;
int left[] = new int[1];
int right[] = new int[1];
int temp;
if(r+c<=14) {
length = r+c+1;
baser = r + c;
basec = 0;
}
else {
length = 28-r-c+1;
baser = 14;
basec = c + r - 14;
}
int line[] = new int[length];
for(int i=0;i<length;i++)
line[i] = table[baser-i][basec+i];
temp = checkbase(line, baser-r, mycolor);
if(temp==-1) temp= checkspecial(line, baser-r, mycolor);
else p_table[r][c][2] = temp;
if(temp==-1){
p_table[r][c][2] = checkline(line, baser-r, mycolor, 1,left) + checkline(line, baser-r, mycolor, -1,right);
if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=15) p_table[r][c][2]=14;
else if(left[0]==1 && right[0]==1 && p_table[r][c][2]>=12) p_table[r][c][2]=10; // 活三型
else if(left[0]+right[0]==3 && p_table[r][c][2]>=17) p_table[r][c][2]=16;
else if(left[0]+right[0]==4) p_table[r][c][2]=50;
else if(left[0]+right[0]>4) p_table[r][c][2]=60;
}
temp = checkbase(line, baser-r, 1-mycolor);
if(temp==-1) temp= checkspecial(line, baser-r, 1-mycolor);
else c_table[r][c][2] = temp;
if(temp==-1){
c_table[r][c][2] = checkline(line, baser-r, 1-mycolor, 1,left) + checkline(line, baser-r, 1-mycolor, -1,right);
if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=15) c_table[r][c][2]=14;
else if(left[0]==1 && right[0]==1 && c_table[r][c][2]>=12) c_table[r][c][2]=10; // 活三型
else if(left[0]+right[0]==3 && c_table[r][c][2]>=17) c_table[r][c][2]=16;
else if(left[0]+right[0]==4) c_table[r][c][2]=50;
else if(left[0]+right[0]>4) c_table[r][c][2]=60;
}
}
private void na(int r, int c){
int length, baser, basec;
int left[] = new int[1];
int right[] = new int[1];
int temp;
if(r>=c) {
length = 14-r+c+1;
baser = r - c;
basec = 0;
}
else {
length = 14-c+r+1;
baser = 0;
basec = c-r;
}
int line[] = new int[length];
for(int i=0;i<length;i++)
line[i] = table[baser+i][basec+i];
temp = checkbase(line, r-baser, mycolor);
if(temp==-1) temp= checkspecial(line, r-baser, mycolor);
else p_table[r][c][3] = temp;
if(temp==-1){
p_table[r][c][3] = checkline(line, r-baser, mycolor, 1,left) + checkline(line, r-baser, mycolor, -1,right);
if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=15) p_table[r][c][3]=14;
else if(left[0]==1 && right[0]==1 && p_table[r][c][3]>=12) p_table[r][c][3]=10; // 活三型
else if(left[0]+right[0]==3 && p_table[r][c][3]>=17) p_table[r][c][3]=16;
else if(left[0]+right[0]==4) p_table[r][c][3]=50;
else if(left[0]+right[0]>4) p_table[r][c][3]=60;
}
temp = checkbase(line, r-baser, 1-mycolor);
if(temp==-1) temp= checkspecial(line, r-baser, 1-mycolor);
else c_table[r][c][3] = temp;
if(temp==-1){
c_table[r][c][3] = checkline(line, r-baser, 1-mycolor, 1,left) + checkline(line, r-baser, 1-mycolor, -1,right);
if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=15) c_table[r][c][3]=14;
else if(left[0]==1 && right[0]==1 && c_table[r][c][3]>=12) c_table[r][c][3]=10; // 活三型
else if(left[0]+right[0]==3 && c_table[r][c][3]>=17) c_table[r][c][3]=16;
else if(left[0]+right[0]==4) c_table[r][c][3]=50;
else if(left[0]+right[0]>4) c_table[r][c][3]=60;
}
}
public void paint(Graphics pic){ // 刷新函数
super.paint(pic);
Image im = board.getImage();
pic.drawImage(im, 0, 0, this); // 画河流图片
}
public void paint(int row, int col) {
int x = col*23+1;
int y = row*23+1;
Image im1 = black.getImage();
Image im2 = white.getImage();
if(bw == 0) {
this.getGraphics().drawImage(im1, x, y, this);
}
else {
this.getGraphics().drawImage(im2, x, y, this);
}
}
public byte waitforanother_black(int n) {
ByteBuffer bytebuf = ByteBuffer.allocate(n); // 创建一个指定大小的缓冲区
bytebuf.order(ByteOrder.LITTLE_ENDIAN);
try {
socket.getInputStream().read(bytebuf.array());
byte b = bytebuf.get(0);
byte c = bytebuf.get(n - 1);
switch(b) {
case 6:
System.out.println("game start");
if(flag == 0) {
step(7,7);
flag = 1;
}
break;
case 7:
xnow = bytebuf.get(3);
ynow = bytebuf.get(4);
bw = bytebuf.get(2);
table[xnow][ynow] = bw + 1;
bytebuf.flip();
paint(xnow, ynow);
num++;
break;
case 2:
invalid = false;
break;
case 1:
table[laststep[0]][laststep[1]] = -1;
invalid = true;
break;
case 9: case 10: case 11:
break;
default:
break;
}
if(c == 10 || c == 11) return c;
bytebuf.flip();
bytebuf.clear();
return b;
} catch (IOException e) {
e.printStackTrace();
return 0;
}
}
public byte waitforanother_white(int n) {
ByteBuffer bytebuf = ByteBuffer.allocate(n); // 创建一个指定大小的缓冲区
bytebuf.order(ByteOrder.LITTLE_ENDIAN);
try {
socket.getInputStream().read(bytebuf.array());
byte b = bytebuf.get(0);
byte c = bytebuf.get(n - 1);
switch(b) {
case 7:
xnow = bytebuf.get(3);
ynow = bytebuf.get(4);
bw = bytebuf.get(2);
table[xnow][ynow] = bw + 1;
bytebuf.flip();
paint(xnow, ynow);
num++;
break;
case 2:
break;
case 9: case 10: case 11:
break;
default:
break;
}
if(c == 10 || c == 11) return c;
bytebuf.flip();
bytebuf.clear();
return b;
} catch (IOException e) {
e.printStackTrace();
return 0;
}
}
public void step(int r, int c){
color = (byte)mycolor;
row = (byte)r;
col = (byte)c;
if(table[row][col] > 0) {
System.out.println(row + " " + col);
System.out.println("can't go");
return;
}
try {
ByteBuffer bytebuf = ByteBuffer.allocate(10); // 创建一个指定大小的缓冲区
bytebuf.order(ByteOrder.LITTLE_ENDIAN); //按照LITTLE_ENDIAN字节序收发数据BIG_ENDIAN
bytebuf.put(messages.COMM_MSG_CHESS);
bytebuf.put(index);
bytebuf.put(color);
bytebuf.put(row);
bytebuf.put(col);
bytebuf.put(nothing);
bytebuf.put(nothing);
bytebuf.put(nothing);
bytebuf.put(nothing);
byte [] bb = new byte[9];
bytebuf.flip();
bytebuf.get(bb);
socket.getOutputStream().write(bb);
socket.getOutputStream().flush();
bytebuf.flip();
bytebuf.clear();
} catch(Exception ex) {
ex.printStackTrace();
}
}
private MouseListener lay = new MouseListener() {
public void mouseClicked(MouseEvent e) {
if(e.getButton() == 1)
{
ynow = e.getX()/23;
xnow = e.getY()/23;
if(table[xnow][ynow] > 0) {
System.out.println("can't go");
return;
}
bw = 1-bw;
paint(xnow, ynow);
num++;
table[xnow][ynow] = bw+1;
filltable();
int[] result = new int[2];
result = seekpos();
bw = 1-bw;
paint(result[0], result[1]);
table[result[0]][result[1]] = bw+1;
}
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -