• Java多线程+IO流+网络编程+MySQL+JDBC编程实现多人联机版坦克大战


    在这里插入图片描述

    ⭐️前言⭐️
    该项目为博主与几位伙伴的共同成果,历时1个月,由最初知识尚未掌握,到最后开发出完整项目,一途走过不少弯路,但也对个人的编程能力及对java知识的掌握更进一步,游戏逻辑主要参考【马士兵网络版坦克大战】

    项目源码、说明文档及开发所用到的工具均在【gitee仓库】,请自行获取,文件名为FinalResults。

    🍉博客主页: 🍁【如风暖阳】🍁
    🍉精品Java专栏【JavaSE】【Java数据结构】【备战蓝桥】、【JavaEE初阶】
    🍉欢迎点赞 👍 收藏留言评论 📝私信必回哟😁

    🍉本文由 【如风暖阳】 原创,首发于 CSDN🙉

    🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言

    🍉博客中涉及源码及博主日常练习代码均已上传码云(gitee)

    ⚡️操作流程及效果预览⚡️
    在这里插入图片描述


    Java多人联机版坦克大战

    🍅1.游戏介绍:

    该游戏涵盖多线程、IO、网络编程、JDBC知识,实现多人联机版坦克大战。

    编码方式:GBK

    MySQL jar包版本:mysql-connector-java-8.0.28(已上传至gitee)

    jdk版本:1.8

    🍅2.游戏启动流程:

    需要先在本地的建立MySQL数据库bjpowernode,建表create table userlist(username varchar(255),password int);,可以在表中存储用户名和密码,也可以不存储。

    在Main包下启动TankServer端,然后在login包下启动LoginServer,最后启动LogOnFrm出现登录界面,如果数据库中已经存有的用户名和密码,直接登录即可,若不存在,点击两下完成注册,登录成功以后会跳转到游戏界面,按下c键完成IP号和端口号的设置,通过连接同一IP的方式完成多人联机。

    在游戏中wasd控制坦克的移动,空格键完成射击。

    🍅3.项目类的主要说明:

    3.1Game包

    在该包下为坦克大战游戏物体的主要实现,NetClint端为网络联机客户端的实现

    • NetClient类为网络交互功能中客户端的实现类,在该类中与服务器完成连接后可以发送坦克新诞生的消息,再让服务器传输给其他的客户端以实现同步,在client端中的关键代码为UDP接受线程,不断的接受其他的客户端传给服务器,服务器又传给该客户端的UDP包,在该UDPRecvThread中利用信息的封装性,调用send方法完成拆包,拆包的具体细节在各自的信息中具体实现。
    • Dir类为方向枚举类,用以为坦克和子弹的方向属性使用
    • Tank类为坦克逻辑的具体实现,每一辆坦克都有自己独一无二的ID号,在NetClient端启动时根据坦克的id号的奇偶性绘制不同的坦克
    • Explode类为爆炸类,在塔克被击中时产生爆炸特效,利用TankClient端的重绘线程实现多张图片切换出现从而产生爆炸的效果
    • Missile类为子弹类,根据坦克的id也对应绘制出不同颜色的子弹图片,注意在子弹打中坦克或移出边界后需要及时清除。

    3.2 Main包

    在这里插入图片描述

    运行该项目在该包下操作即可,先启动server端再启动client端,此处的TankClient具体的网络联机在Game包下的NetClient类中实现

    • TankClient类为游戏逻辑的主要实现,是坦克的游戏场所
    • TankServer类为网络交互的服务端的主要实现,该类主要实现UDP线程,接收到客户端的信息后为多个客户端实时的发送消息

    在这里插入图片描述

    3.3Message包

    在这里插入图片描述
    该包用以实现网络版的信息传输,不同的信息都实现Msg接口,在Msg接口中的send和parse抽象方法,在各自的类中重写send和parse方法(当信息传输过来时在对应的类中完成发包和拆包的具体实现),这样使得这两个方法很好的包装,在client端和server端传输信息时通过多态实现不同类别信息的传输。

    • 代表坦克诞生的消息类 TankNewMsg
    • 代表坦克改变方向的消息类 TankMoveMsg
    • 代表坦克被击毙的消息类 TankDeadMsg
    • 代表子弹产生的消息类 MissileNewMsg
    • 代表子弹消失的消息类 MissileDeadMsg

    3.4 login包

    通过连接JDBC实现用户登录界面,完成与数据库的交互,实现登录跳转


    ⚡️最后的话⚡️

    总结不易,希望uu们不要吝啬你们的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁
    在这里插入图片描述

  • 相关阅读:
    【目标检测】【边界框回归】Bounding-Box regression
    基于JAVA新生报到管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    Redis_05_Lua脚本实现多条Redis命令原子性
    【C++】从无到有学习路线
    深度学习系列1——Pytorch 图像分类(LeNet)
    Linux启动流程分析
    《OpenHarmony开源鸿蒙学习入门》-- 状态管理
    如何swagger关闭及给swagger加参数信息
    (Matlab)基于蝙蝠算法实现电力系统经济调度
    react项目中使用mobx
  • 原文地址:https://blog.csdn.net/qq_60856948/article/details/124920722