📄 blackandwhite.java
字号:
else
client.dataout("redo,");
}
}
else if(e.getSource()==surrenderB){
if(isServer){
server.dataout("surrender,");
infoT.append(">"+serverName+" 认输!\n"+">"+clientName+" 获胜\n");
currentP=Style.BLACK;
over(statusDialog.SURRENDER);
}
else{
client.dataout("surrender,");
}
}
else if(e.getSource()==sendB){
if(!isAct) return ;
if(messageT.getText().length()==0) return ;
if(isServer){
server.dataout("message,"+messageT.getText());
infoT.append(serverName+":\n"+messageT.getText()+"\n");
}
else{
client.dataout("message,"+messageT.getText());
infoT.append(clientName+":\n"+messageT.getText()+"\n");
}
messageT.setText("");
}
else if(e.getSource()==aboutMI){
aboutDialog aboutD=new aboutDialog(f);
aboutD.show();
}
else if(e.getSource()==connectMI){
connectDialog conD=new connectDialog(f);
conD.show();
if(conD.yes){
reset();
isServer=false;
clientName="[客户端]:"+conD.name;
client=new clientskt(conD.host,421,f);
client.start();
}
}
else if(e.getSource()==establishMI){
establishDialog estD=new establishDialog(f);
estD.show();
if(estD.yes){
try{
reset();
isServer=true;
serverName="[主 机]:"+estD.name;
server=new serverskt(421,f);
server.start();
}
catch(Exception er){
infoT.append("建立游戏失败!\n");
restart();
}
}
}
else if(e.getSource()==disconnectMI){
disconnect();
}
else if(e.getSource()==exitMI){
System.exit(0);
}
}
public void disconnect(){
try{
if(isServer){
server.skt.close();
server.Client.close();
server.stopRequest();
server=null;
}
else{
client.skt.close();
client.stopRequest();
client=null;
}
}
catch(Exception er){}
restart();
}
}
class clientskt extends Thread{
Socket skt;
InetAddress host;
int port;
BufferedReader theInputStream;
volatile PrintStream theOutputStream;
String readin;
private volatile boolean stopRequested=false;
BlackAndWhite mainP;
public clientskt(String ip,int p,BlackAndWhite m){
try{
this.mainP=m;
host=InetAddress.getByName(ip);
port=p;
}
catch(IOException e){
}
}
public void run(){
String com;
try{
mainP.infoT.append(">尝试联机......\n");
skt=new Socket(host,port);
theInputStream=new BufferedReader(
new InputStreamReader(skt.getInputStream()));
theOutputStream=new PrintStream(skt.getOutputStream());
dataout("connect,"+mainP.clientName);
mainP.isAct=true;
mainP.startB.setEnabled(true);
while(!stopRequested){
readin=theInputStream.readLine();
com=readin.substring(0,readin.indexOf(","));
if(com.compareTo("connect")==0){
mainP.serverName=readin.substring(readin.indexOf(",")+1);
mainP.infoT.append(">连接到 "+mainP.serverName+"\n");
}
else if(com.compareTo("start")==0){
int style;
synchronized(mainP.lockready){
try{
style=Integer.parseInt(
readin.substring(6));
mainP.currentP=style;
}
catch(Exception e){
mainP.infoT.append(">网络连接意外,请重新连接!\n");
dataout("other,>网络连接意外,请重新连接!\n");
}
if(mainP.ready){
mainP.infoT.append(">游戏开始!\n");
mainP.start();
}
else
mainP.infoT.append(">主机开始游戏!等待你开始!\n");
mainP.remready=true;
}
}
else if(com.compareTo("playchess")==0){
String sX,sY;
int x,y,ls,le;
ls=readin.indexOf(",");
le=readin.lastIndexOf(",");
sX=readin.substring(ls+1,le);
sY=readin.substring(le+1);
try{
x=Integer.parseInt(sX);
y=Integer.parseInt(sY);
mainP.cb.playChess(x,y);
}
catch(Exception e){
mainP.infoT.append(">网络连接意外,请重新连接!\n");
dataout("other,>网络连接意外,请重新连接!\n");
}
}
else if(com.compareTo("message")==0){
mainP.infoT.append(mainP.serverName+":\n");
mainP.infoT.append(readin.substring(8)+"\n");
}
else if(com.compareTo("win")==0){
mainP.win();
}
else if(com.compareTo("lose")==0){
mainP.lose();
}
else if(com.compareTo("draw")==0){
mainP.drawgame();
}
else if(com.compareTo("timeout")==0){
mainP.infoT.append(">"+mainP.serverName+" 超时!\n"+">"+mainP.clientName+" 获胜\n");
mainP.over(statusDialog.OPTIMEOUT);
}
else if(com.compareTo("surrender")==0){
mainP.infoT.append(">"+mainP.serverName+" 认输!\n"+">"+mainP.clientName+" 获胜\n");
mainP.over(statusDialog.OPSUR);
}
else if(com.compareTo("rectimeout")==0){
mainP.infoT.append(">"+mainP.clientName+" 超时!\n"+">"+mainP.serverName+" 获胜\n");
mainP.over(statusDialog.TIMEOUT);
}
else if(com.compareTo("recsurrender")==0){
mainP.infoT.append(">"+mainP.clientName+" 认输!\n"+">"+mainP.serverName+" 获胜\n");
mainP.over(statusDialog.SURRENDER);
}
else if(com.compareTo("redo")==0){
askRedoDialog arD=new askRedoDialog(mainP,askRedoDialog.response);
arD.show();
if(arD.yes==true){
dataout("agreeredo,");
mainP.redo();
}
else
dataout("disagree,");
}
else if(com.compareTo("agreeredo")==0){
responseDialog rsD=new responseDialog(mainP,responseDialog.agree);
rsD.show();
mainP.redo();
mainP.disable(true);
mainP.isRedoSender=false;
}
else if(com.compareTo("disagree")==0){
responseDialog rsD=new responseDialog(mainP,responseDialog.disagree);
rsD.show();
mainP.disable(true);
mainP.isRedoSender=false;
}
else{
mainP.infoT.append(">"+readin+"\n");
}
}
}
catch(Exception e){
mainP.infoT.append("联机中断!\n");
mainP.disconnect();
}
}
public void dataout(String data){
theOutputStream.println(data);
}
public void stopRequest(){
stopRequested=true;
}
}
class serverskt extends Thread{
ServerSocket skt;
Socket Client;
InetAddress host;
BufferedReader theInputStream;
volatile PrintStream theOutputStream;
String readin;
BlackAndWhite mainP;
private volatile boolean stopRequested=false;
public serverskt(int port,BlackAndWhite m){
try{
this.mainP=m;
skt=new ServerSocket(port);
}
catch(IOException e){
}
}
public void run(){
String com;
try{
mainP.infoT.append(">等待联机......\n");
Client=skt.accept();
theInputStream=new BufferedReader(
new InputStreamReader(Client.getInputStream()));
theOutputStream=new PrintStream(Client.getOutputStream());
dataout("connect,"+mainP.serverName);
mainP.isAct=true;
mainP.startB.setEnabled(true);
while(!stopRequested){
readin=theInputStream.readLine();
com=readin.substring(0,readin.indexOf(","));
if(com.compareTo("connect")==0){
mainP.clientName=readin.substring(readin.indexOf(",")+1);
mainP.infoT.append(">"+mainP.clientName+" 已联机\n");
}
else if(com.compareTo("start")==0){
synchronized(mainP.lockready){
if(!mainP.ready)
mainP.infoT.append(">客户端开始游戏!等待你开始!\n");
else{
mainP.start();
mainP.infoT.append(">游戏开始!\n");
}
mainP.remready=true;
}
}
else if(com.compareTo("playchess")==0){
String sX,sY;
int x,y,ls,le;
ls=readin.indexOf(",");
le=readin.lastIndexOf(",");
sX=readin.substring(ls+1,le);
sY=readin.substring(le+1);
try{
x=Integer.parseInt(sX);
y=Integer.parseInt(sY);
mainP.cb.playChess(x,y);
}
catch(Exception e){
mainP.infoT.append(">网络连接意外,请重新连接!\n");
dataout("other,>网络连接意外,请重新连接!\n");
}
}
else if(com.compareTo("message")==0){
mainP.infoT.append(mainP.clientName+":\n");
mainP.infoT.append(readin.substring(8)+"\n");
}
else if(com.compareTo("timeout")==0){
mainP.infoT.append(">"+mainP.clientName+" 超时!\n"+">"+mainP.serverName+" 获胜\n");
dataout("rectimeout,");
mainP.currentP=Style.WHITE;
mainP.over(statusDialog.OPTIMEOUT);
}
else if(com.compareTo("surrender")==0){
mainP.infoT.append(">"+mainP.clientName+" 认输!\n"+">"+mainP.serverName+" 获胜\n");
dataout("recsurrender,");
mainP.currentP=Style.WHITE;
mainP.over(statusDialog.OPSUR);
}
else if(com.compareTo("redo")==0){
askRedoDialog arD=new askRedoDialog(mainP,askRedoDialog.response);
arD.show();
if(arD.yes==true){
dataout("agreeredo,");
mainP.redo();
}
else
dataout("disagree,");
}
else if(com.compareTo("agreeredo")==0){
responseDialog rsD=new responseDialog(mainP,responseDialog.agree);
rsD.show();
mainP.redo();
mainP.disable(true);
mainP.isRedoSender=false;
}
else if(com.compareTo("disagree")==0){
responseDialog rsD=new responseDialog(mainP,responseDialog.disagree);
rsD.show();
mainP.disable(true);
mainP.isRedoSender=false;
}
else{
mainP.infoT.append(">"+readin.substring(5)+"\n");
}
}
}
catch(Exception e){
mainP.infoT.append("联机中断!\n");
mainP.disconnect();
}
}
public void dataout(String data){
theOutputStream.println(data);
}
public void stopRequest(){
stopRequested=true;
}
}
class clockPThread extends Thread{
BlackAndWhite mainP;
private volatile boolean idle=false;
public clockPThread(BlackAndWhite m){
mainP=m;
}
public void run(){
while(true){
if(!idle){
mainP.clockP.repaint();
if(mainP.clockP.getLT()==0&&mainP.currentP==mainP.cb.currentP)
mainP.timeOut();
}
try{
Thread.sleep(200);
}
catch(Exception e){}
}
}
public void setIdle(boolean b){
idle=!b;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -