?? mypanel.java
字號:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.Socket;
import java.nio.*;
public class mypanel extends JPanel {
private static final long serialVersionUID = 1L;
private ImageIcon board = new ImageIcon("board.jpg");
private ImageIcon black = new ImageIcon("2.png");
private ImageIcon white = new ImageIcon("1.png");
private byte by;
private Socket socket;
private int flag;
private SuperUncle myuncle = new SuperUncle();
private int table[][] = new int[15][15];
private int p_table[][][] = new int[15][15][4];
private int c_table[][][] = new int[15][15][4];
private int num = 0;
private int bw = 0;
private byte mycolor = 0;
private byte index = 0;
private byte color = 0;
private byte row = 0;
private byte col = 0;
private byte nothing = 0;
private boolean invalid = false;
private boolean xianshou;
private int laststep[] = new int[2];
int xnow;
int ynow;
mypanel() {
setSize(352, 380);
}
public void start(boolean b) {
xianshou = b;
if(!xianshou) {
mycolor = 0;
bw = 0;
paint(7,7);
table[7][7]=1;
}
else {
mycolor = 1;
bw = 1;
}
this.addMouseListener(lay);
}
public void autostart(Socket s, byte cl) {
mycolor = cl;
for(int i=0;i<15;i++){
for(int j=0;j<15;j++){
table[i][j] = 0;
}
}
flag = 0;
socket = s;
if(mycolor == 1) {
try {
ByteBuffer bytebuf = ByteBuffer.allocate(10); // 創建一個指定大小的緩沖區
bytebuf.order(ByteOrder.LITTLE_ENDIAN);
bytebuf.put(messages.COMM_MSG_GAME_REQUIRE_START);
bytebuf.flip();
socket.getOutputStream().write(bytebuf.get());
socket.getOutputStream().flush();
receive_white rw = new receive_white(by, socket, flag, this);
rw.start();
} catch (Exception e) {
System.err.println(e);
}
}
else {
receive_black rb = new receive_black(by, socket, flag, this);
rb.start();
}
}
public void filltable() {
for(int i=0;i<15;i++){
for(int j=0;j<15;j++){
if(table[i][j]<=0){
table[i][j]=0;
heng(i,j);
shu(i,j);
pie(i,j);
na(i,j);
int huosan = 0;
int huosi = 0;
int chongsi = 0;
int liuzi = 0;
for(int count=0;count<4;count++){
if(p_table[i][j][count]==60) {liuzi++; continue;}
if(p_table[i][j][count]>=15) {huosi++;continue;}
if(p_table[i][j][count]>=12) {chongsi++;continue;}
if(p_table[i][j][count]>=10) {huosan++;continue;}
}
if(chongsi>1 || huosan>1 || huosi>1 || liuzi>0){
if(mycolor==0) table[i][j]=-1;
}
huosan = 0;
huosi = 0;
chongsi = 0;
liuzi = 0;
for(int count=0;count<4;count++){
if(c_table[i][j][count]==60) {liuzi++; continue;}
if(c_table[i][j][count]>=15) {huosi++;continue;}
if(c_table[i][j][count]>=12) {chongsi++;continue;}
if(c_table[i][j][count]>=10) {huosan++;continue;}
}
if(chongsi>1 || huosan>1 || huosi>1 || liuzi>0){
if(mycolor==1) table[i][j]=-1;
}
}
else {
p_table[i][j][0] = p_table[i][j][1] = p_table[i][j][2] = p_table[i][j][3] = 0;
c_table[i][j][0] = c_table[i][j][1] = c_table[i][j][2] = c_table[i][j][3] = 0;
}
}
}
}
public int[] seekpos(){
int ptemp, ctemp, maxweight=-1, superdefence=0, threealive=0, threeblock = 0,
multidefence = 0, multiattack = 0, forattack=0, fordefence=0, aord=0;
int [] result = new int[2];
result[0] =-1;
for(int i=0;i<15;i++){
for(int j=0;j<15;j++){
ptemp = 0;
ctemp = 0;
for(int k=0;k<4;k++){
if(p_table[i][j][k] >= 50 && table[i][j] == 0){
result[0] = i;
result[1] = j;
System.out.println("單邊最強攻擊!");
return result;
}
if(c_table[i][j][k] >= 17 && table[i][j] == 0){
if(c_table[i][j][k]>superdefence){
superdefence=c_table[i][j][k];
result[0] = i;
result[1] = j;
}
}
if(p_table[i][j][k] >=15 && table[i][j] == 0 && superdefence==0){
if(p_table[i][j][k]>threealive){
threealive =p_table[i][j][k];
result[0] = i;
result[1] = j;
}
}
if(c_table[i][j][k] >=15 && table[i][j] == 0 && superdefence==0 && threealive==0 && threeblock==0){
threeblock = 1;
result[0] = i;
result[1] = j;
switch(k) {
case 0:
if(i+4>14) break;
if(table[i+4][j] == 0) {
if((c_table[i+4][j][0]+c_table[i+4][j][1]+c_table[i+4][j][2]+c_table[i+4][j][3]) > c_table[i][j][k]){
result[0] = i+4;
result[1] = j;
}
}
else if(table[i+3][j] == 0) {
if((c_table[i+3][j][0]+c_table[i+3][j][1]+c_table[i+3][j][2]+c_table[i+3][j][3]) > c_table[i][j][k]){
result[0] = i+3;
result[1] = j;
}
}
else if(table[i+2][j] == 0) {
if((c_table[i+2][j][0]+c_table[i+2][j][1]+c_table[i+2][j][2]+c_table[i+2][j][3]) > c_table[i][j][k]){
result[0] = i+2;
result[1] = j;
}
}
break;
case 1:
if(j+4>14) break;
if(table[i][j+4] == 0) {
if((c_table[i][j+4][0]+c_table[i][j+4][1]+c_table[i][j+4][2]+c_table[i][j+4][3]) > c_table[i][j][k]){
result[0] = i;
result[1] = j+4;
}
}
else if(table[i][j+3] == 0) {
if((c_table[i][j+3][0]+c_table[i][j+3][1]+c_table[i][j+3][2]+c_table[i][j+3][3]) > c_table[i][j][k]){
result[0] = i;
result[1] = j+3;
}
}
else if(table[i][j+2] == 0) {
if((c_table[i][j+2][0]+c_table[i][j+2][1]+c_table[i][j+2][2]+c_table[i][j+2][3]) > c_table[i][j][k]){
result[0] = i;
result[1] = j+2;
}
}
break;
case 2:
if(i+4>14 || j-4<0) break;
if(table[i+4][j-4] == 0) {
if((c_table[i+4][j-4][0]+c_table[i+4][j-4][1]+c_table[i+4][j-4][2]+c_table[i+4][j-4][3]) > c_table[i][j][k]){
result[0] = i+4;
result[1] = j-4;
}
}
else if(table[i+3][j-3] == 0) {
if((c_table[i+3][j-3][0]+c_table[i+3][j-3][1]+c_table[i+3][j-3][2]+c_table[i+3][j-3][3]) > c_table[i][j][k]){
result[0] = i+3;
result[1] = j-3;
}
}
else if(table[i+2][j-2] == 0) {
if((c_table[i+2][j-2][0]+c_table[i+2][j-2][1]+c_table[i+2][j-2][2]+c_table[i+2][j-2][3]) > c_table[i][j][k]){
result[0] = i+2;
result[1] = j-2;
}
}
break;
case 3:
if(i+4>14 || j+4>14) break;
if(table[i+4][j+4] == 0) {
if((c_table[i+4][j+4][0]+c_table[i+4][j+4][1]+c_table[i+4][j+4][2]+c_table[i+4][j+4][3]) > c_table[i][j][k]){
result[0] = i+4;
result[1] = j+4;
}
}
else if(table[i+3][j+3] == 0) {
if((c_table[i+3][j+3][0]+c_table[i+3][j+3][1]+c_table[i+3][j+3][2]+c_table[i+3][j+3][3]) > c_table[i][j][k]){
result[0] = i+3;
result[1] = j+3;
}
}
else if(table[i+2][j+2] == 0) {
if((c_table[i+2][j+2][0]+c_table[i+2][j+2][1]+c_table[i+2][j+2][2]+c_table[i+2][j+2][3]) > c_table[i][j][k]){
result[0] = i+2;
result[1] = j+2;
}
}
break;
default:
break;
}
}
ptemp += p_table[i][j][k];
ctemp += c_table[i][j][k];
}
int huosan = 0;
int huosi = 0;
int chongsi = 0;
for(int count=0;count<4;count++){
if(p_table[i][j][count]>=15) {huosi++;continue;}
if(p_table[i][j][count]>=12) {chongsi++;continue;}
if(p_table[i][j][count]>=10) {huosan++;continue;}
}
int hhcl = huosan + huosi+ chongsi;
if(hhcl>=2 && table[i][j] == 0 && superdefence==0 && threealive==0 && threeblock ==0){
result[0] = i;
result[1] = j;
multiattack = 1;
}
huosan = 0;
huosi = 0;
chongsi = 0;
for(int count=0;count<4;count++){
if(c_table[i][j][count]>=15) {huosi++;continue;}
if(c_table[i][j][count]>=12) {chongsi++;continue;}
if(c_table[i][j][count]>=10) {huosan++;continue;}
}
hhcl = huosan + huosi+ chongsi;
if(hhcl>=2 && table[i][j] == 0 && superdefence==0 && threealive==0 && threeblock ==0 && multiattack==0){
result[0] = i;
result[1] = j;
multidefence = 1;
}
if(table[i][j] ==0 && superdefence==0 && threealive==0 && threeblock ==0 && multidefence == 0 && multiattack == 0){
if(ctemp>=17 && ctemp>maxweight){
maxweight = ctemp;
fordefence = 1;
forattack = 0;
result[0] = i;
result[1] = j;
}
else if(ptemp>=15 && ptemp>maxweight){
maxweight = ptemp;
fordefence = 0;
forattack = 1;
result[0] = i;
result[1] = j;
}
else if(fordefence==0 && forattack==0){
if(ptemp+ctemp>aord){
aord = ptemp+ctemp;
result[0] = i;
result[1] = j;
}
}
}
if (table[i][j]==0 && result[0]==-1){
result[0] = i;
result[1] = j;
}
}
}
if(superdefence>0)System.out.println("單邊急需防守!");
else if(threealive>0)System.out.println("單邊活三!");
else if(threeblock>0)System.out.println("阻斷活三!");
else if(multidefence>0)System.out.println("多邊防守!");
else if(multiattack>0)System.out.println("多邊進攻!");
else if(forattack>0 && !invalid){
int value[] = new int[1];
int uncle[] = new int[2];
uncle = myuncle.recursiveSeek(table, 0, mycolor, 0, value, xnow, ynow, -60000, 0);
if(uncle[0]!=-1) result = uncle;
System.out.println("大叔叔神劍!");
}
else if(fordefence>0 && !invalid){
int value[] = new int[1];
int uncle[] = new int[2];
uncle = myuncle.recursiveSeek(table, 2, 1-mycolor, 0, value, xnow, ynow, -60000, 0);
if(uncle[0]!=-1) result = uncle;
System.out.println("大叔叔宙斯盾!");
}
else {
int value[] = new int[1];
int uncle[] = new int[2];
if(num>=2 && !invalid){
uncle = myuncle.recursiveSeek(table, 2, mycolor, 0, value, xnow, ynow, -60000, 0);
if(uncle[0]!=-1) result = uncle;
System.out.println("呼喚大叔叔!");
}
}
laststep[0]=result[0];
laststep[1]=result[1];
return result;
}
private int checkbase(int[] line, int pos, int color){
boolean lblock=false, rblock=false;
boolean lfir=true, rfir=true;
int lunion=0, runion=0;
int i=1;
while(pos+i<line.length && line[pos+1]!=0){
if(line[pos+i]<=0 && rfir) {rfir=false;}
else if(line[pos+i]<=0 && !rfir) {break;}
if(line[pos+i]== 2-color) {if(line[pos+i-1]==color+1){rblock=true;} break;}
if(line[pos+i] == color+1) {runion++;}
i++;
}
if(line.length-1-pos-runion<=1 && line[line.length-1]==color+1) rblock = true;
i=1;
while(pos-i>-1 && line[pos-1]!=0){
if(line[pos-i]<=0 && lfir) {lfir=false;}
else if(line[pos-i]<=0 && !lfir) {break;}
if(line[pos-i]== 2-color) {if(line[pos-i+1]==color+1){lblock=true;} break;}
if(line[pos-i] == color+1) {lunion++;}
i++;
}
if(pos-lunion<=1 && line[0]==color+1) lblock = true;
if(lunion==3 && lblock==true && runion==0) return 12;
else if(runion==3 && rblock==true && lunion==0) return 12;
else if(lunion==3 && lblock==false && lfir==true && runion==0) return 15;
else if(runion==3 && rblock==false && rfir==true && lunion==0) return 15;
else if(lunion==4 && lblock==true && lfir==true) return 50;
else if(runion==4 && rblock==true && rfir==true) return 50;
return -1;
}
private int checkspecial(int[] line, int pos, int color){
boolean lblock=false, rblock=false;
int lunion=0, runion=0;
int i=2;
while(pos+i<line.length && line[pos+1]==0){
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -