20.网络五子棋

网络五子棋

工具组件 commons

​ 双端都需要使用的类 单独开发 以jar形式添加到客户端和服务器端使用

​ 1.右键资源项目 导出 选择 JAR file 导出成.jar文件

​ 2.在要使用该资源的项目中 创建lib文件夹 复制.jar文件

​ 3.右键点击.jar文件 build path—>add to build path 可以访问.jar文件中的类

​ 实体类:

​ Chess 棋子类

​ User 用户类

​ 各种消息类:

​ RegisterMessage 注册请求信息类

​ RegisterResponseMessage 注册响应回写信息类

​ LoginMessage 登录请求信息类

​ LoginResponseMessage 登录响应回写信息类

​ OnlineListMessage 获取在线列表请求信息类

​ OnlineListResponseMessage 在线列表响应回写信息类

​ BattleInviteMessage 对战请求信息类

​ BattleInviteResponseMessage 对战响应信息类

​ ChessMessage 落子信息类

​ PingMessage 心跳检测信息类

​ ResponseMessage 所有响应信息的父类

​ Message 所有信息的父类

客户端

​ Data 记录本身对象 用于判定是否和自己对战

​ MainApplication 程序入口 展示单机or网络

​ LocalGameStage 单机版界面及游戏

​ LoginStage 登录界面

​ RegisterStage 注册界面

​ OnlineListStage 展示在线所有玩家姓名的窗口

​ OnlineGameStage 网络游戏界面

​ GetOnlineListTask 定时发送在线列表请求的任务 可以使用定时器 内部类形式替换

​ ClientMessageHandler 发送各种请求 接收并处理各种响应

服务器端

​ JDBCHelper 数据库连接辅助类

​ UserDao 设计的操作数据库的接口

​ UserDaoImpl 接口实现类

​ Data 保存所有登录成功的客户线程 Map<用户名称,线程对象>

​ ChessServer 服务器开启类 main()方法类

​ 开启心跳检测 开启PingThread线程

​ 循环监听 一旦监听到客户端请求 马上创建对应的一个ServerMessageHandler线程对象

​ 把这个客户端和服务器沟通使用的Socket存入

​ 开启这个ServerMessageHandler线程

​ PingThread 心跳检测线程类

​ ServerMessageHandler 每个客户端和服务器沟通的一个线程 内部有Socket对象属性

心跳检测:

​ 服务器开启后 同时开启心跳检测线程PingThread 该线程循环执行 任务是使用Map集合中所有的线程对象发送PingMessage信息 如果报出异常 则说明对方不在线 将其键值对从Map集合中删除 这个任务中会休眠10s

注册:

​ 客户端点击注册按钮 创建ClientMessageHandler(单例模式)线程的对象 调用send() 将注册信息发送

​ 服务器监听到请求 创建其ServerMessageHandler 线程对象 专门处理当前客户端的请求 利用当前线程中的send方法 发送回写信息

登录:

​ 客户端点击登录按钮 使用之前创建的ClientMessageHandler 线程对象 调用send()将登录信息发送给服务器

​ 服务器监听到 同样创建其ServerMessageHandler 线程对象 处理该客户的请求

​ 如果验证登录成功 则将此线程对象 以键值对的形式保存 键用户名 值线程 回写信息

​ 客户端接收到登陆成功的回写信息后 开启计时器 定时向服务器发送获取在线列表的请求 打开在线列表界面

获取在线列表:

​ 客户端用计时器 每隔5s发送一次请求 服务器接收到后 从Map集合中 获取所有键值对的键的集合 会写给客户端

​ 客户端将其集合给到ListView对象 ListView添加进画板 展示在线列表 ListView添加双击事件 邀请对战

邀请对战:

​ 客户端1双击在线列表中的用户名 判断不是本人 则预备发出对战邀请信息 记录本人姓名和被邀请人姓名

​ 服务器接收到对战邀请信息BattleInviteMessage解析出被邀请人姓名 获取其线程 直接发出原信息对象

​ 客户端2 接收到BattleInviteMessage 确认是否应战 编辑回写信息类BattleInviteResponseMessage

​ 邀请方姓名 被邀请方姓名 是否应战

​ 服务器接收到对战响应信息BattleInviteResponseMessage 解析出其中邀请方姓名 获取其线程 直接发出该信息

​ 客户端1接收到BattleInviteResponseMessage 获取对方是否应战 应战则关闭在线列表 打开在线游戏界面

落子:

​ 客户端1落子后 生成ChessMessage 发送给服务器 服务器解析出客户端2姓名 获取其线程对象 转发ChessMessage给客户端2

​ 客户端2 接收到ChessMessage后 解析棋子信息 画在客户端2的棋盘上

​ 如果客户端1落子获胜 依然生成ChessMessage给所有属性赋值(获胜方姓名 是否获胜等) 客户端2以此判断并展示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值