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

📄 gameclient.java

📁 局域网斗地主框架,好象没有card的功能不能打牌
💻 JAVA
字号:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/*
 * 创建日期 2005-7-22
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */

/**
 * @author 叶少伟 TODO 要更改此生成的类型注释的模板,请转至 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class GameClient implements Runnable
{
	private Socket				cSocket;
	private ObjectInputStream	cin;
	private ObjectOutputStream	cout;
	private Player				player;
	private JTextArea			messageTextArea;
	private JTextField			messageTextField;
	private JButton				pButton, nButton, jButton;
	private JFrame				owner;
	private PlayerTableValue	tValue;
	private boolean				closed	= false;
	private int					i		= 0;
	private GamePanel			gPanel;

	public GameClient(Player p, JTextArea textArea, JTextField text,
			JButton pb, JButton nb, JButton jb, JFrame owner,
			PlayerTableValue tv, GamePanel gp)
	{
		this.player = p;
		this.messageTextArea = textArea;
		this.messageTextField = text;
		this.pButton = pb;
		this.nButton = nb;
		this.jButton = jb;
		this.owner = owner;
		this.tValue = tv;
		this.gPanel = gp;
		new Thread(this).start();
	}

	public boolean isClosed()
	{
		return closed;
	}

	public void close()
	{
		try
		{
			cout.writeObject(new Message(Message.CONTROL, "exit"));
			messageTextArea.setText("");
			tValue.removeAllPlayer();
			gPanel.removeAllNames();
			gPanel.removeAllCards();
			owner.update(owner.getGraphics());
		}
		catch(IOException e)
		{
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
	}

	public void sendMessage(Message mess)
	{
		try
		{
			cout.writeObject(mess);
		}
		catch(IOException e)
		{
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
	}

	/*
	 * (非 Javadoc)
	 * 
	 * @see java.lang.Runnable#run()
	 */
	public void run()
	{
		try
		{
			// TODO 自动生成方法存根
			this.cSocket = new Socket(InetAddress.getByName(this.player
					.getSIp()), this.player.getPort());
			this.cout = new ObjectOutputStream(this.cSocket.getOutputStream());
			this.cout.writeObject(new Message(Message.PLAYER, this.player));
			this.cin = new ObjectInputStream(this.cSocket.getInputStream());
			while(true)
			{
				try
				{
				Message mess = (Message) cin.readObject();
				if(mess.getType() == Message.CONTROL
						&& mess.getContent().toString().equalsIgnoreCase(
								"服务器已满"))
				{
					JOptionPane.showMessageDialog(owner, "服务器已满!", "提示",
							JOptionPane.WARNING_MESSAGE);
					messageTextField.setEditable(false);
					pButton.setEnabled(true);
					nButton.setEnabled(true);
					jButton.setText("加入游戏");
					closed = true;
					return;
				}
				else if(mess.getType() == Message.CONTROL
						&& mess.getContent().toString().equalsIgnoreCase("已存在"))
				{
					JOptionPane.showMessageDialog(owner, "此姓名已存在!", "提示",
							JOptionPane.WARNING_MESSAGE);
					messageTextField.setEditable(false);
					pButton.setEnabled(true);
					nButton.setEnabled(true);
					jButton.setText("加入游戏");
					closed = true;
					return;
				}
				else if(mess.getType() == Message.STRING)
				{
					this.messageTextArea.setText(this.messageTextArea.getText()
							+ mess.getContent() + "\n");
					int len = messageTextArea.getText().length();
					messageTextArea.setSelectionStart(len);
					messageTextArea.setSelectionEnd(len);
				}
				else if(mess.getType() == Message.CONTROL
						&& mess.getContent().toString().equals("okexit"))
				{
					this.cout.close();
					this.cin.close();
					this.cSocket.close();
					closed = true;
					return;
				}
				else if(mess.getType() == Message.CONTROL
						&& mess.getContent().toString().equals("exit"))
				{
					cout.writeObject(new Message(Message.CONTROL, "okexit"));
					this.cin.close();
					this.cout.close();
					this.cSocket.close();
					gPanel.removeAllNames();
					messageTextArea.setText("");
					messageTextField.setEditable(false);
					pButton.setEnabled(true);
					nButton.setEnabled(true);
					jButton.setText("加入游戏");
					tValue.removeAllPlayer();
					gPanel.removeAllCards();
					JOptionPane.showMessageDialog(owner, "服务器已关闭游戏!", "提示",
							JOptionPane.WARNING_MESSAGE);
					closed = true;
					return;
				}
				else if(mess.getType() == Message.PLAYER)
				{
					tValue.setPlayer((Player) mess.getContent(), i++);
					if(i == 3)
					{
						i = 0;
						gPanel.setNames(tValue.getNames(player));
					}
				}
				else if(mess.getType() == Message.CONTROL
						&& mess.getContent().toString().equals("start"))
				{
					cout.writeObject(new Message(Message.CONTROL, "okstart"));
				}
				else if(mess.getType() == Message.NUMBER)
				{
					messageTextArea.setText(this.messageTextArea.getText()
							+ "number\n");
					int [] n = mess.getNumber();
					gPanel.setCardsLocation(n[0], n[1], n[2]);
				}
				else if(mess.getType() == Message.PLAYERCARDS)
				{
					messageTextArea.setText(this.messageTextArea.getText()
							+ "playercards\n");
					gPanel.setPlayerCards(mess.getPlayerCards());
					cout.writeObject(new Message(Message.CONTROL,
							"okplayercards"));
				}
				else if(mess.getType() == Message.LASTCARDS)
				{
					messageTextArea.setText(this.messageTextArea.getText()
							 + "lastcards\n");
					gPanel.setLastCards(mess.getLastCards());
					cout
							.writeObject(new Message(Message.CONTROL,
									"oklastcards"));
				}
				else if(mess.getType() == Message.CONTROL
						&& mess.getContent().toString().equals("oneclientexit"))
				{
					gPanel.removeAllCards();
				}
				}
				catch(ClassCastException e)
				{
					e.printStackTrace();
					if(e.getMessage().indexOf("Message") != -1)
					{
						cout.writeObject(new Message(Message.CONTROL, "resend"));
						messageTextArea.setText(this.messageTextArea.getText()
								+ "resend\n");
					}
				}
			}
		}
		catch(SocketException e)
		{
			// TODO 自动生成 catch 块
			//			e.printStackTrace();
			String m = e.getMessage();
			if(m.indexOf("refused") != -1)
			{
				JOptionPane.showMessageDialog(owner, "没有找到游戏服务器!", "提示",
						JOptionPane.WARNING_MESSAGE);
			}
			else if(m.indexOf("reset") != -1)
			{
				JOptionPane.showMessageDialog(owner, "丢失与服务器的连接!", "提示",
						JOptionPane.WARNING_MESSAGE);
				tValue.removeAllPlayer();
				gPanel.removeAllCards();
			}
			messageTextArea.setText("");
			messageTextField.setEditable(false);
			pButton.setEnabled(true);
			nButton.setEnabled(true);
			jButton.setText("加入游戏");
			closed = true;

		}
		catch(ClassNotFoundException e)
		{
			e.printStackTrace();
		}
		catch(UnknownHostException e)
		{
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		catch(IOException e)
		{
			e.printStackTrace();
		}
	}

}

⌨️ 快捷键说明

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