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

📄 go.java

📁 我的五子棋:C/S结构
💻 JAVA
字号:
import	java.io.*;
import	java.awt.*;
import  java.net.*;
import  java.text.*;
import	java.util.*;
import	java.beans.*;
import	javax.swing.*;
import  java.util.zip.*;
import	java.awt.event.*;
import	javax.swing.event.*;
import	javax.swing.border.*;

public	class	Go	extends JFrame 	implements ItemListener, KeyListener
{
	public	static	JFrame	frame = null;
	public	static	Toolkit	toolkit	= null;
	public	TextField serverIp = new TextField(25);
	public	static    TextField sendMsg  = new TextField(80);
	public	Choice	  appType  = new Choice();
	public	Choice	  chessType = new Choice();
	public	ChessBoard chessBoard = null;
	/*
	** myAppType = 0 Client
	** myAppType = 1 Server
	*/
	public	int	  myAppType     = 0;
	/*
	** myChessColor = 3 White
	** myChessColor = 7 Black
	*/
	public	static	int  myChessColor  = 3;
	public	Button  beginButton	= new Button("  开始  ");
	public	Button	newButton	= new Button(" 新游戏 ");
	public	ServerSocket	server	= null;
	public	InetAddress	address	= null;
	public	Socket		socket	= null;
	
	public	static	BufferedReader	in	= null;
	public	static	PrintWriter	out	= null;
	
	public	static	boolean	goFlag	= false;
	public	static	int	chess   = 1;
	
	public	Go()
	{
		this.frame = this;
		setResizable(false);
		appType.addItem("Server");
		appType.addItem("Client");
		chessType.addItem("围棋");
		chessType.addItem("五子棋");
		appType.setBackground(Color.cyan);
		appType.addItemListener(this);
		chessType.addItemListener(this);
		sendMsg.addKeyListener(this);
		setTitle("围棋");
		addWindowListener(new WinListener());
		this.toolkit = Toolkit.getDefaultToolkit();
		try {
			serverIp.setText(InetAddress.getLocalHost().getHostAddress());
		} catch(UnknownHostException uhe) {
			serverIp.setText("GetHostAddress Error!");
		}
		JPanel panel = new JPanel();
		panel.add(appType);
		panel.add(chessType);
		panel.add(serverIp);
		panel.add(beginButton);
		panel.add(newButton);
		newButton.setEnabled(false);
		beginButton.addActionListener(new BeginButtonL());
		newButton.addActionListener(new NewButtonL());
		chessBoard = new ChessBoard("goimg.jpg");
		getContentPane().add(panel, BorderLayout.NORTH);
		getContentPane().add(chessBoard, BorderLayout.CENTER);
		getContentPane().add(sendMsg, BorderLayout.SOUTH);
		setIconImage(new ImageIcon(getClass().getResource("blackchess.gif")).getImage());
	}
	public	static	void	setDefaultFont(Font font)
	{
		UIDefaults compUI = UIManager.getDefaults();
		Enumeration keys = compUI.keys();
		for(; keys.hasMoreElements() ;)
		{
			try {
				String key = (String)keys.nextElement();
				Object obj = compUI.get(key);
				if(obj instanceof Font)
					UIManager.put(key, font);
			} catch(ClassCastException cce) {
			}
		}
	}
	public	static	String[] tokenize(String input, String delim)
	{
		Vector	vector = new Vector();
		StringTokenizer stk = new StringTokenizer(input, delim);
		String	fields[];

		while(stk.hasMoreTokens())
	    		vector.addElement(stk.nextToken());
		fields = new String[vector.size()];
		for (int i = 0; i < fields.length; i++)
	    		fields[i] = ((String)vector.elementAt(i)).trim();
		return fields;
    	}
	class	NetService	extends	Thread
	{
		public	NetService()
		{
			start();
		}
		public	void	addChessMan(String str)
		{
			int	chessColor = 0;
			int	chessX	= 0;
			int	chessY	= 0;
			String[] packet	= null;
			
			packet = tokenize(str, ",");
			chessColor = Integer.parseInt(packet[0]);
			chessX = Integer.parseInt(packet[1]);
			chessY = Integer.parseInt(packet[2]);
			chessBoard.chessMap[chessX][chessY] = chessColor;
			chessBoard.setLastChessman(chessX, chessY);
			chessBoard.repaint();
			sendMsg.setText("该你下了 ...");
		}
		public	void	run()
		{
			while(true)
			{
				try {
					String	str = in.readLine();
					if(str.length() != 0)
					{
						if(str.startsWith("M") == true)
							sendMsg.setText(str.substring(1));
						else	if(str.startsWith("O") == true)
						{	//: ChessMan
							String	tmp = str.substring(1);
							addChessMan(tmp);
							goFlag = true;
						}
						else	if(str.startsWith("W") == true)
						{
							String	tmp = str.substring(1);
							int who = Integer.parseInt(tmp);
							if(who == 3) chessBoard.showMessage("白棋赢!!!");
							else	if(who == 7) chessBoard.showMessage("黑棋赢!!!");
							for(int i = 0; i < 19; i ++)
							for(int j = 0; j < 19; j ++)
								chessBoard.chessMap[i][j] = 0;
							chessBoard.setLastChessman(-1, -1);
							chessBoard.repaint();
							goFlag = true;
							sendMsg.setText("先手?");
						}
						else	if(str.startsWith("T") == true)
						{	//: 提子
							String	tmp = str.substring(1);
							String[] packet = tokenize(tmp, ",");
							for(int i = 0; i < packet.length - 1;)
							{
								int x = Integer.parseInt(packet[i ++]);
								int y = Integer.parseInt(packet[i ++]);
								chessBoard.chessMap[x][y] = 0;
							}
							chessBoard.repaint();
						}
						else	if(str.startsWith("Y_TO_CLEAR") == true)
						{	//: Clear Chess
							for(int i = 0; i < 19; i ++)
							for(int j = 0; j < 19; j ++)
								chessBoard.chessMap[i][j] = 0;
							chessBoard.setLastChessman(-1, -1);
							chessBoard.repaint();
							newButton.setEnabled(true);
							goFlag = true;
						}
						else	if(str.compareTo("N_TO_CLEAR") == 0)
						{
							chessBoard.showMessage("对方不同意重新开局!!!");
							newButton.setEnabled(true);
						}
						else	if(str.compareTo("BEG CLEAR") == 0)
						{
							int res = chessBoard.showMessage("对方认输,请求新棋局,是否同意?");
							if(res == 0)
							{
								out.println("Y_TO_CLEAR");
								for(int i = 0; i < 19; i ++)
								for(int j = 0; j < 19; j ++)
									chessBoard.chessMap[i][j] = 0;
								chessBoard.setLastChessman(-1, -1);
								chessBoard.repaint();
								goFlag = true;
							}
							else	out.println("N_TO_CLEAR");
						}
					}
					sleep(500);
				} catch(IOException ioe) {
					sendMsg.setText(ioe.getMessage());
					return;
				} catch(InterruptedException e) {}
			}
		}
	}
	class	NewButtonL implements ActionListener
	{
		public	void	actionPerformed(ActionEvent evt)
		{
			out.println("BEG CLEAR");
			newButton.setEnabled(false);
		}
	}
	class	AcceptClient extends	Thread
	{
		public	AcceptClient()
		{
			start();
		}
		public	void	run()
		{
			sendMsg.setText("等待对方连接......");
			try {
				socket = server.accept();
				sendMsg.setText("联机:" + socket);
				in =	new BufferedReader(
					new InputStreamReader(
				    	socket.getInputStream()));
				out =	new PrintWriter(
					new BufferedWriter(
					new OutputStreamWriter(
				    	socket.getOutputStream())), true);
					NetService net = new NetService();
					newButton.setEnabled(true);
					goFlag = true;
			} catch(IOException ioe) {
				sendMsg.setText(ioe.getMessage());
				return;
			}
		}
	}
	class	BeginButtonL implements ActionListener
	{
		public	void	actionPerformed(ActionEvent evt)
		{
			beginButton.setEnabled(false);
			appType.setEnabled(false);
			if(myAppType == 0)
			{
				sendMsg.setText("正在创建服务......");
				try {
					server = new ServerSocket(15555);
				} catch(IOException ioe) {
					sendMsg.setText(ioe.getMessage());
					return;
				}
				new AcceptClient();
			}
			if(myAppType == 1)
			{
				try {
					address = InetAddress.getByName(serverIp.getText());
					sendMsg.setText("Connecting To " + serverIp.getText());
					socket = new Socket(address, 15555);
					in =	new BufferedReader(
						new InputStreamReader(
					    	socket.getInputStream()));
					out =	new PrintWriter(
						new BufferedWriter(
						new OutputStreamWriter(
					    	socket.getOutputStream())), true);
					sendMsg.setText("Connect OK!!!");
					NetService net = new NetService();
					newButton.setEnabled(true);
					goFlag = true;
				} catch(IOException e) {
					sendMsg.setText(e.getMessage());
					return;
				}
			}
		}
	}
	public	void	itemStateChanged(ItemEvent e)
	{
		if(e.getSource() instanceof Choice)
		{
			String choice = (String)e.getItem();
			//System.out.println(choice);
      			if(choice.equals("Server"))
      			{
				myAppType = 0;
				myChessColor = 3;
				beginButton.setLabel(" 创建 ");
				beginButton.setEnabled(true);
			}
      			else if(choice.equals("Client"))
      			{
				myAppType = 1;
				myChessColor = 7;
				beginButton.setLabel(" 连接 ");
				beginButton.setEnabled(true);
			}
			else if(choice.equals("围棋"))
			{
				chess = 1;
				setTitle("围棋");
			}
			else if(choice.equals("五子棋"))
			{
				chess = 2;
				setTitle("五子棋");
			}
		}
	} //: itemStateChanged()
	public	void	keyTyped(KeyEvent e)
	{
		if(e.getKeyChar() == '\n')
			out.println("M" + sendMsg.getText());
	}
	public	void	keyPressed(KeyEvent e) {}
	public	void	keyReleased(KeyEvent e) {}
	public	class	WinListener	extends	WindowAdapter
	{
		public	void	windowClosing(WindowEvent e)
		{
			System.exit(0);
		}
	}
	public	static	void	main(String[] args)
	{
		int	fwidth 	= 0;
		int	fheight = 0;
		int	localx  = 0;
		int	localy  = 0;
		
		Go go = new Go();
		fwidth  = 624;
		fheight = 702;
		if(go.toolkit.getScreenSize().width > fwidth)
			localx = (go.toolkit.getScreenSize().width - fwidth)/2;
		if(go.toolkit.getScreenSize().height > fheight)
			localy = (go.toolkit.getScreenSize().height - fheight)/2;
		go.setSize(fwidth, fheight);
		go.setLocation(localx, localy);
		go.setVisible(true);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -