⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blackandwhite.java

📁 完成黑白棋的开发
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
				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 + -