日期:2014-05-20 浏览次数:20872 次
//其中socketA和socketB是五子棋对战的双方
class BeginGame implements Runnable{
private Socket socketA = null;
private Socket socketB = null;
private boolean isBlack = true;
public BeginGame(Socket socketA,Socket socketB){
this.socketA = socketA;
this.socketB = socketB;
}
public void run(){
int x;//x,y用来记录棋盘上棋子的坐标
int y;
boolean first = true;
while(true){
try {
//获取对战双方的输出流
DataOutputStream outA = new DataOutputStream(socketA.getOutputStream());
DataOutputStream outB = new DataOutputStream(socketB.getOutputStream());
if(first){
//在游戏刚开始的时候,分别发送信息给对战的双发,1表示为黑棋,2表示为白棋
outA.writeInt(1);
outB.writeInt(2);
first = false;
}
DataInputStream inA = new DataInputStream(socketA.getInputStream());
DataInputStream inB = new DataInputStream(socketB.getInputStream());
//isBlack用于判定是黑棋发送来的信息还是白棋,初始化为false
if(isBlack){
//读取黑方发送来的x,y坐标值
x = inA.readInt();
y = inA.readInt();
System.out.println("black: "+x+" "+y);
//gamePoint用来存储整个棋盘的信息,初始全为0,为黑棋时设为1,白棋时设为2
//如果该点上已有棋子,则重新等待黑方再次发送坐标
if(gamePoint[x][y]!=0)
continue;
else
gamePoint[x][y] = 1;
//将黑方发送来的x,y坐标值发送给白方
outB.writeInt(x);
outB.writeInt(y);
isBlack = false;
}else{
//处理白方发送来的信息
x = inB.readInt();
y = inB.readInt();
if(gamePoint[x][y]!=0)
continue;
else
gamePoint[x][y] = 2;
System.out.println("white "+x+" "+y);
outA.writeInt(x);
outA.writeInt(y);
isBlack = true;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
gamePanel.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
if(beginGame){
//读取鼠标点击的坐标值,转化为对应的数组的x,y值
int x = (e.getX()-gamePanel.cellSize_x/2)/gamePanel.cellSize_x;
int y = (e.getY()-gamePanel.cellSize_y/2)/gamePanel.cellSize_y;
try {
//向服务器端发送坐标值
out.writeInt(x);
out.writeInt(y);
} catch (IOException e1) {
e1.printStackTrace();
}
gamePanel.repaint();
}
}
});
private boolean isBlack = true;
//isBlack用于判定是黑棋发送来的信息还是白棋,初始化为false