62,614
社区成员
发帖
与我相关
我的任务
分享
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Client extends JFrame {
private static final long serialVersionUID = 7388327725127247126L;
private JLabel jl, jl1, jl2, jl3, jl4;
int i;
String c = "";
final String[] arr = new String[3];
public void pic() {
arr[0] = "st.png";// 石头
arr[1] = "jd.png";// 剪刀
arr[2] = "b.png";// 布
}
public Client() {
jl = new JLabel();
jl1 = new JLabel();
jl2 = new JLabel();
jl3 = new JLabel();
jl4 = new JLabel();
}
public void ClientJF() {
this.setSize(500, 400);
this.setTitle("猜拳游戏");
this.setLayout(null);
jl = new JLabel("服务端:");
jl.setFont(new java.awt.Font("黑体", Font.BOLD, 20));
jl.setBounds(50, 95, 150, 50);
this.add(jl);
jl1 = new JLabel("客户端:");
jl1.setFont(new java.awt.Font("黑体", Font.BOLD, 20));
jl1.setBounds(50, 195, 150, 50);
this.add(jl1);
// 电脑出招的图片
jl2 = new JLabel();
jl2.setBounds(170, 75, 145, 95);
this.add(jl2);
// 人出招的图片
jl3 = new JLabel();
jl3.setBounds(170, 185, 145, 95);
this.add(jl3);
// 输赢结果显示
jl4 = new JLabel("");
jl4.setFont(new java.awt.Font("黑体", Font.BOLD, 30));
jl4.setBounds(200, 300, 100, 70);
this.add(jl4);
// 按钮
Font f = new Font("黑体", 0, 18);// 设置按钮字体
final JButton btn = new JButton("石头");
btn.setFont(f);
btn.setBounds(380, 60, 70, 60);
this.add(btn);
final JButton btn1 = new JButton("剪刀");
btn1.setFont(f);
btn1.setBounds(380, 160, 70, 60);
this.add(btn1);
final JButton btn2 = new JButton("布");
btn2.setFont(f);
btn2.setBounds(380, 260, 70, 60);
this.add(btn2);
// 按钮事件监听
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// 如果你鼠标点击的是石头按钮
i = 0;
String b = btn.getActionCommand();
jl3.setText(b);
jl3.setIcon(new ImageIcon("st.png"));
client();
// Client.this.jl2.setIcon(new ImageIcon(c));
}
});
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
i = 1;
String b1 = btn1.getActionCommand();
jl3.setText(b1);
jl3.setIcon(new ImageIcon("jd.png"));
client();
// Client.this.jl2.setIcon(new ImageIcon(c));
}
});
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
i = 2;
String b2 = btn2.getActionCommand();
jl3.setText(b2);
jl3.setIcon(new ImageIcon("b.png"));
client();
// Client.this.jl2.setIcon(new ImageIcon(c));
}
});
this.setVisible(true);// 使窗口可见
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);// (Component c)设置窗口相对于指定组件的位置。
// 如果组件当前未显示,或者 c 为 null,则此窗口将置于屏幕的中央
this.setResizable(false);// 使其不可最大化
}
public void client() {
try {
// 创建客户端socket;
Socket socket = new Socket("localhost", 8888);
// 获取输入流用来读取服务端的响应信息
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));// 字节流包装为字符流
String info = null;
// 获取输出流向服务器端发送信息
OutputStream os = socket.getOutputStream();// 字节输入流
PrintWriter pw = new PrintWriter(os);// 输出流包装为打印流
// XXX
String t = String.valueOf(i) + "\n";// 将i转为String类型
pw.write(t);
pw.flush();
info = br.readLine();
{
int d = Integer.parseInt(info);// 将info转为int 类型用于下面的比较
c = arr[d];
Client.this.jl2.setIcon(new ImageIcon(c));
if (d == i)
jl4.setText("平手");
if (d > i)
jl4.setText("你输了");
if (d < i)
jl4.setText("你赢了");
}
Thread.sleep(250);
socket.shutdownOutput();
pw.close();
os.close();
// 关闭资源
br.close();
is.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public void rungame() {
ClientJF();
// XXX
//Client();
}
public static void main(String[] args) {
Client testClient = new Client();
testClient.rungame();
}
}
服务端:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Server extends JFrame {
private static final long serialVersionUID = 6929066428999708107L;
private JLabel jl, jl1, jl2, jl3, jl4;
int i;
String c = "";
final String[] arr = new String[3];
public Server() {
jl = new JLabel();
jl1 = new JLabel();
jl2 = new JLabel();
jl3 = new JLabel();
jl4 = new JLabel();
}
public void pic() {
arr[0] = "st.png";// 石头
arr[1] = "jd.png";// 剪刀
arr[2] = "b.png";// 布
}
public void ServerJF() {
this.setSize(500, 400);
this.setTitle("猜拳游戏");
this.setLayout(null);
jl = new JLabel("客户端:");
jl.setFont(new java.awt.Font("黑体", Font.BOLD, 20));
jl.setBounds(50, 95, 150, 50);
this.add(jl);
jl1 = new JLabel("服务端:");
jl1.setFont(new java.awt.Font("黑体", Font.BOLD, 20));
jl1.setBounds(50, 195, 150, 50);
this.add(jl1);
// 客户端出招的图片
jl2 = new JLabel();
jl2.setBounds(170, 75, 145, 95);
this.add(jl2);
// 服务端出招的图片
jl3 = new JLabel();
jl3.setBounds(170, 185, 145, 95);
this.add(jl3);
// 输赢结果显示
jl4 = new JLabel("");
jl4.setFont(new java.awt.Font("黑体", Font.BOLD, 30));
jl4.setBounds(200, 300, 100, 70);
this.add(jl4);
// 按钮
Font f = new Font("黑体", 0, 18);// 设置按钮字体
final JButton btn = new JButton("石头");
btn.setFont(f);
btn.setBounds(380, 60, 70, 60);
this.add(btn);
final JButton btn1 = new JButton("剪刀");
btn1.setFont(f);
btn1.setBounds(380, 160, 70, 60);
this.add(btn1);
final JButton btn2 = new JButton("布");
btn2.setFont(f);
btn2.setBounds(380, 260, 70, 60);
this.add(btn2);
// 按钮事件监听
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// 如果你鼠标点击的是石头按钮
i = 0;
String b = btn.getActionCommand();
jl3.setText(b);
jl3.setIcon(new ImageIcon("st.png"));
socket();
// Server.this.jl2.setIcon(new ImageIcon(c));
}
});
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
i = 1;
String b1 = btn1.getActionCommand();
jl3.setText(b1);
jl3.setIcon(new ImageIcon("jd.png"));
socket();
// Server.this.jl2.setIcon(new ImageIcon(c));
}
});
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
i = 2;
String b2 = btn2.getActionCommand();
jl3.setText(b2);
jl3.setIcon(new ImageIcon("b.png"));
socket();
// Server.this.jl2.setIcon(new ImageIcon(c));
}
});
this.setVisible(true);// 使窗口可见
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);// (Component c)设置窗口相对于指定组件的位置。
// 如果组件当前未显示,或者 c 为 null,则此窗口将置于屏幕的中央
this.setResizable(false);// 使其不可最大化
}
public void socket() {
InputStream is = null;
InputStreamReader isReader = null;
BufferedReader br = null;
OutputStream os = null;
PrintWriter pw = null;
try {
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
// 获取输出流
os = socket.getOutputStream();
pw = new PrintWriter(os);
// XXX
String t = String.valueOf(i)+ "\n";
pw.write(t);
pw.flush();// 刷新缓存
// 输入流获取客户端信息
is = socket.getInputStream();
isReader = new InputStreamReader(is);
br = new BufferedReader(isReader);
String info = null;
//while (() != null)
info = br.readLine();
{
int d = Integer.parseInt(info);
c = arr[d];
Server.this.jl2.setIcon(new ImageIcon(c));
if (d == i)
jl4.setText("平手");
if (d > i)
jl4.setText("你输了");
if (d < i)
jl4.setText("你赢了");
}
Thread.sleep(250);
socket.shutdownInput();// 关闭输入流
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void rungame() {
ServerJF();
// XXX delete
//socket();
}
public static void main(String[] args) {
Server test = new Server();
test.rungame();
}
}