package app;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.*;
import java.util.*;
import java.awt.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import net.sf.json.JSONObject;
//继承JFrame实现可视化
public class Server extends JFrame {
//用户列表,用于存放连接上的用户信息
ArrayList<User> user_list = new ArrayList<>();
//用户名列表,用于显示已连接上的用户
ArrayList<String> username_list = new ArrayList<>();
//消息显示区域
JTextArea show_area = new JTextArea();
//用户名显示区域
JTextArea show_user = new JTextArea(10, 10);
//socket的数据输出流
DataOutputStream outputStream = null;
//socket的数据输入流
DataInputStream inputStream = null;
//构造函数
public Server() {
//设置流式布局
setLayout(new BorderLayout());
//VERTICAL_SCROLLBAR_AS_NEEDED设置垂直滚动条需要时出现
//HORIZONTAL_SCROLLBAR_NEVER设置水平滚动条不出现
//创建信息显示区的画布并添加到show_area
JScrollPane panel = new JScrollPane(show_area, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
//设置信息显示区标题
panel.setBorder(new TitledBorder("信息显示区"));
//布局到中央
add(panel, BorderLayout.CENTER);
//设置信息显示区为不可编辑
show_area.setEditable(false);
//创建用于显示用户的画布
final JPanel panel_east = new JPanel();
//添加流式布局
panel_east.setLayout(new BorderLayout());
//设置标题
panel_east.setBorder(new TitledBorder("在线用户"));
//在用户显示区添加show_uesr
panel_east.add(new JScrollPane(show_user), BorderLayout.CENTER);
//设置用户显示区域为不可编辑
show_user.setEditable(false);
//将显示用户的画布添加到整体布局的右侧
add(panel_east, BorderLayout.EAST);
//创建关于踢下线用户的画布
final JPanel panel_south = new JPanel();
//创建标签
JLabel label = new JLabel("输入要踢下线用户的ID");
//创建输入框
JTextField out_area = new JTextField(40);
//创建踢下线按钮
JButton out_btn = new JButton("踢下线");
//依次添加进画布
panel_south.add(label);
panel_south.add(out_area);
panel_south.add(out_btn);
//将踢下线用户的画布添加到整体布局的下侧
add(panel_south, BorderLayout.SOUTH);
//设置踢下线按钮的监听
out_btn.addActionListener(e -> {
//用于存储踢下线用户的名字
String out_username;
//从输入框中获取踢下线用户名
out_username = out_area.getText().trim();
//踢出该用户,踢出类型1
dismiss(out_username,1);
//重置输入框
out_area.setText("");
});
//设置该窗口名
setTitle("服务器 ");
//引入图片
BufferedImage img;
try {
//根据图片名引入图片
img = ImageIO.read(Server.class.getResource("/logo/hayden.png"));
//设置其为该窗体logo
setIconImage(img);
} catch (IOException exception) {
exception.printStackTrace();
}
//设置窗体大小
setSize(700, 700);
//设置窗体位置可移动
setLocationRelativeTo(null);
//设置窗体关闭方式
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗体可见
setVisible(true);
//socket连接相关代码
try {
//开启socket服务器,绑定端口11111
ServerSocket serverSocket = new ServerSocket(11111);
//信息显示区打印服务器启动时间
show_area.append("服务器启动时间 " + new Date() + "\n");
//持续接收连接
while (true) {
//接收连接
Socket socket = serverSocket.accept();
//创建用户对象
User user = new User();
//判断是否连接上
if (socket != null) {
//获取输入流
inputStream = new DataInputStream(socket.getInputStream());
//读取输入流
String json = inputStream.readUTF();
//创建信息对象
JSONObject data = JSONObject.fromObject(json);
//信息显示区打印用户上线
show_area.append("用户 " + data.getString("username") + " 在" + new Date() + "登陆系统" + "\n"+
data.getString("username")+"的累计分数为"+data.getString("score")+"\n");
//创建新用户
user = new User();
//存储socket对象
user.setSocket(socket);
//获取输入流用户名
user.setUsername(data.getString("username"));
//添加进用户列表
user_list.add(user);
//添加进用户名列表
username_list.add(data.getString("username"));
//刷新在线人数
show_user.setText("人数有 " + username_list.size() + " 人\n");
//刷新在线用户
for (String s : username_list) {
show_user.append(s + "\n");
}
//玩家人数大于2时自动踢出,踢出类型2
if(username_list.size()>2){
dismiss(data.getString("username"),2);
}
}
//封装信息对象
JSONObject online = new JSONObject();
//设置接收信息对象
online.put("user_list", username_list);
//设置信息内容
online.put("msg", user.getUsername() + "上线了");
//默认未选择角色
online.put("select",0);
//发送者为服务端
online.put("sender","server");
//依次遍历,将信息广播给所有在线用户
for (User value : user_list) {
//获取输出流
outputStream = new DataOutputStream(value.getSocket().getOutputStream());
//给所有用户输出上线信息
outputStream.writeUTF(online.toString());
}
//开启新线程,持续接收该socket信息
new Thread(new ServerThread(socket)).start();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
//用于踢出用户的方法
private void dismiss(String out_username,int type) {
try {
//用于判断盖用户是否被踢下线
boolean is_out = false;
//遍历用户列表依次判断
for (int i = 0; i < user_list.size(); i++) {
//比较用户名,相同则踢下线
if (user_list.get(i).getUsername().equals(out_username)) {
//获取被踢下线用户对象
User out_user = user_list.get(i);
//使用json封装将要传递的数据
JSONObject data = new JSONObject();
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Java大作业—双人联机小游戏森林冰火人项目源码(高分),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。该项目可以直接作为毕设、期末大作业使用,代码都在里面,系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值,项目都经过严格调试,确保可以运行! Java大作业—双人联机小游戏森林冰火人项目源码(高分)Java大作业—双人联机小游戏森林冰火人项目源码(高分)Java大作业—双人联机小游戏森林冰火人项目源码(高分)Java大作业—双人联机小游戏森林冰火人项目源码(高分)Java大作业—双人联机小游戏森林冰火人项目源码(高分)Java大作业—双人联机小游戏森林冰火人项目源码(高分)Java大作业—双人联机小游戏森林冰火人项目源码(高分)Java大作业—双人联机小游戏森林冰火人项目源码(高分)Java大作业—双人联机小游戏森林冰火人项目源码(高分)Java大作业—双人联机小游戏森林冰火人项目源码(高分)Java大作业—双人联机小游戏森林冰火人项目源码(高分)Java大作
资源推荐
资源详情
资源评论
收起资源包目录
Java大作业——双人联机小游戏森林冰火人.zip (67个子文件)
Java-task-main
Java
pom.xml 2KB
src
main
resources
druid.properties 149B
logo
hayden.png 31KB
HaydenLogo.png 235KB
java
game
FirePeople.java 9KB
Mykey.java 2KB
Play.java 13KB
IcePeople.java 9KB
app
Client.java 3KB
UserDao.java 1KB
JDBCUtils.java 686B
GameRoom.java 12KB
Register.java 4KB
Server.java 15KB
User.java 818B
target
classes
game
Mykey.class 2KB
Play.class 8KB
FirePeople.class 6KB
Play$Read.class 2KB
IcePeople.class 6KB
Play$TimeThread.class 2KB
app
GameRoom.class 7KB
Server.class 8KB
UserDao.class 2KB
User.class 1KB
Register.class 4KB
JDBCUtils.class 1KB
Server$ServerThread.class 5KB
GameRoom$Read.class 5KB
Client.class 5KB
druid.properties 149B
logo
hayden.png 31KB
HaydenLogo.png 235KB
images
hePicture
操作说明.jpg 55KB
pPle
左跑火人.gif 2KB
右跑火人.jpg 1KB
左跑冰人.jpg 1KB
小火人.gif 2KB
小冰人.gif 2KB
双人.jpg 106KB
左跑火人.jpg 1KB
右跑冰人.jpg 1KB
小火人.jpg 1KB
右跑冰人.gif 2KB
小冰人.jpg 1KB
左跑冰人.gif 2KB
冰.gif 32KB
右跑火人.gif 2KB
plPicture
控制按钮1.jpg 927B
移动板1.jpg 1KB
火钻石.jpg 1KB
游戏主页面背景.jpg 503KB
游戏主页面.jpg 116KB
水钻石.jpg 1KB
移动板2.jpg 2KB
水门.jpg 1KB
木板.jpg 1KB
火门.jpg 1KB
logo
hayden.png 31KB
HaydenLogo.png 235KB
loPicture
按钮2.jpg 52KB
按钮3.jpg 24KB
按钮1.jpg 51KB
登录窗口.jpg 503KB
按钮4.jpg 23KB
lePicture
排行榜按钮.jpg 2KB
排行榜.jpg 185KB
共 67 条
- 1
资源评论
王二空间
- 粉丝: 6643
- 资源: 1997
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功