📄 gameclient.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 + -