• 基于JAVA开发的在线双人联机坦克大战小游戏


    基于JAVA开发的在线双人联机坦克大战小游戏

    1. 介绍

    大二上学期JAVA语言结课大作业

    通过使用面向对象的编程思想,采用数据库、Http协议、Spring图像可视化、多线程、发送邮件等技术实现在线双人联机坦克大战小游戏

    源码链接
    喜欢的欢迎大家点Star
    有疑问的欢迎大家提ISSUE交流学习

    1.1 文件结构

    ----onlineTankGame
    |----code
    |    |----tankGame
    |    |    |----img
    |    |    |----Music
    |    |    |----src
    |    |    |    |----main
    |    |    |    |    |----java
    |    |    |    |    |    |----actions
    |    |    |    |    |    |----allUI
    |    |    |    |    |    |----getElements
    |    |    |    |    |    |----music
    |    |    |    |    |    |----runGame
    |    |    |    |    |----resources
    |    |    |----target
    |    |    |    |----classes
    |    |    |    |    |----actions
    |    |    |    |    |----allUI
    |    |    |    |    |----getElements
    |    |    |    |    |----music
    |    |    |    |    |----runGame
    |    |    |----.classpath
        |    |    |----.project
        |    |----tankGameServer
    |    |    |----bin
    |    |    |    |----lib
    |    |    |    |----tankGameServer
    |    |    |----src
    |    |    |    |----lib
    |    |    |    |----tankGameServer
    |    |    |----.classpath
        |    |    |----.project
        |    |    |----certificate.pdf
        |    |    |----example.pdf
        |    |    |----MAP.txt
        |    |    |----tankGameServer.iml
        |    |    |----坦克地图.xlsx
        |    |----tankgame.sql
        |----Documents
    |    |----用户手册.pdf
        |    |----项目文档.pdf
        |----image
    |    |----README
    |    |    |----IDEA
    |    |    |    |----op1.jpg
        |    |    |    |----op2.jpg
        |    |    |    |----op3.jpg
        |    |    |    |----op4.jpg
        |    |    |    |----op5.jpg
        |    |    |    |----op6.jpg
        |    |    |----navicat
    |    |    |    |----op1.jpg
        |    |    |    |----op2.jpg
        |    |    |    |----op3.jpg
        |    |    |    |----op4.jpg
        |    |    |    |----op5.jpg
        |    |    |    |----op6.jpg
        |    |    |----others
    |    |    |    |----ascii2utf8.jpg
        |----README.md
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    1.2 环境配置

    • Java SDK 17/16/15

    • Mysql(任意版本,不要太老就行)

    • IDEA

    • Navicat

      注意?:放置代码时,建议文件路径中不要出现中文,否则会报错。

    2. 实现功能

    1. 基于数据库系统的用户信息注册、改密、分数记录、分数查询功能
    2. 基于Http传输协议的双人联机小游戏功能、在线聊天室、用户反馈信息功能
    3. 基于SMTP协议的邮箱验证码、荣誉证书发放功能
    4. 完备的游戏逻辑(时间限制、投降机制、计分机制、排名机制、输赢机制
    5. 采用多线程机制实现坦克发射子弹后,依旧可以控制坦克移动或者重复发送弹药以及倒计时功能
    6. 采用Spring编程,实现游戏界面可视化

    3. 使用说明

    3.1 数据库准备

    1. 下载安装好MysqlNavicat后,打开Navicat

    2. 新建一个Mysql连接
      在这里插入图片描述

    3. 连接名填tankGame;密码填安装Mysql时,设置账户时自己设置的密码(可自行百度如何安装Mysql);点击测试连接,显示成功后,一路点确定
      在这里插入图片描述

    4. 双击设置好的连接名tankGame,右键新建数据库,命名为tankgame
      在这里插入图片描述

    5. 右键新建好的数据库,选择运行SQL文件
      在这里插入图片描述

    6. 选取代码中提供的sql文件,点击开始等待运行结束
      在这里插入图片描述

    7. 刷新一下即可看见数据库结构和数据均已导入到数据库中
      在这里插入图片描述

    8. 习惯用命令行操作的大佬可以直接再命令行里新建库(库名记得对应),然后运行sql文件即可

    9. 后续的所有游戏记录、用户信息均会被服务器保存在数据库中

    10. 对数据库表结构的介绍在这就不做过多赘述

    注意?:由于是本地数据库,请在每次运行代码前,提前打开数据库
    (在Navicat里双击tankgame数据库,显示为绿色即可)
    否则代码会因找不到数据库而报错
    
    • 1
    • 2
    • 3

    3.2 运行程序

    注意事项?:当时编写代码时,文件可能是以ASCII格式进行保存的
    所以再次打开可能会出现乱码的情况
    只需以GBK格式载入文件
    或者把*.java文件先用记事本打开,然后选择另存为,最后再在保存界面的右下角选择UTF-8格式重新保存一下即可
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    3.2.1 打开后端服务器(先运行)

    1. 从IDEA上导入后端服务器文件夹code ankGameServer
      在这里插入图片描述

    2. 可运行Main程序在code ankGameServersrc ankGameServerTankGameServer.java
      直接运行到命令行出现Server: Wainting connection~~~即可
      在这里插入图片描述

    3. 在该文件夹中,可以利用code ankGameServer坦克地图.xlsx来设计地图,设计好后,把对应的文本数据复制粘贴到code ankGameServerMAP.txt中即可
      在这里插入图片描述

    4. 对于读取数据库部分,需要将TankGameServer.java中的TankGameServer类中的yourUserName以及yourUserRoot修改成自己本地或者云数据库中的用户名和密码

      private TankGameServer() {
      File file = new File(fileName);
      try {
      // Read the map information from the map file
      BufferedReader buf = new BufferedReader(new FileReader(file));
      String s = “”;
      int i = 0;
      while ((s = buf.readLine()) != null) {
      map += s + "
      ";
      i++;
      }
      map += “end123”;
      // Connect the sql
      Class.forName(“com.mysql.cj.jdbc.Driver”);
      String url = “jdbc:mysql://localhost:3306/tankGame?useSSL=false&serverTimezone=UTC”;
      conn = DriverManager.getConnection(url, “yourUserName”, “yourUserRoot”);
      stat = conn.createStatement();
      DatabaseMetaData dbMetaData = conn.getMetaData();

      } catch (Exception e) {
          e.printStackTrace();
      }
      
      • 1
      • 2
      • 3

      }

    5. 对于邮件发送功能(代码中支持的是QQ邮箱),由于涉及到账号隐私安全,这里把code ankGameServersrc ankGameServerSendMail.java里面的邮箱和授权码省掉。关于如何申请邮箱授权码,可自行百度
      需要自行填写邮箱和授权码的部分为:

      // Set a session object
      Session session = Session.getDefaultInstance(properties, new Authenticator() {
      @Override
      protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(“yourMail”, “yourAuthorizationCode”);
      }
      });


      // Set the sender mail
      mimeMessage.setFrom(new InternetAddress(“yourMail”));

      // Set the receiver mail
      mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(“yourAnotherEmail”));

      // Connect the server
      // Change the ‘smtp.qq.com’ can make it apply to different types of e-mails
      // Like smtp.163.com for 163 mail, smtp.qq.com for qq mail
      transport.connect(“smtp.qq.com”, “yourMail”, “yourAuthorizationCode”);

    3.2.2 打开前端游戏(后运行)

    1. 从IDEA上导入前端游戏文件夹code ankGame
      在这里插入图片描述

    2. 可执行main文件在code ankGamesrcmainjava unGameBeginGame.java中,直接运行项目即可
      在这里插入图片描述

    3. 注册或输入正确的用户名和密码即可进入游戏主页面。此刻会显示等待其他玩家连接
      在这里插入图片描述

    4. 若在公网或局域网中双人游戏,请修改code ankGamesrcmainjavaallUILoginUI.java中以下代码的("127.0.0.1", 15319)部分为公网IP即可。如果修改端口号,务必记得在服务器文件中也对应修改。

      public LoginUI() throws UnknownHostException, IOException {
      final JFrame frame = new JFrame();
      // Connect with the server
      final Socket server = new Socket(“127.0.0.1”, 15319);

    5. 若只想在本地进行游戏测试,可以使用编译器或者命令行重复运行该项目即可(注意不要把之前开启的第一个游戏界面给挤掉)

    6. 使用WASDJ操控坦克开始游戏吧
      在这里插入图片描述

    4. One More Thing

    更多更详细的内容可见用户手册设计文档

    仅供学习交流,文档均已加密且添加水印

    请勿直接git clone后提交作业

    尽管游戏能正常运行,但依旧存在一些懒得改的Bug,欢迎大家提Issue交流学习

    5. 最后说一句

    这个项目是我大学完成的第一个最自豪的大项目

    个人项目,纯独立原创完成,工作量可想而知

    遇到过很多坑,但在自己的摸索中也一个个地解决了,积累了很多经验,也自学了很多东西

    虽然网上有很多现成的轮子可以直接CV,但当时的自己还有着坚定的多造轮子,少CV的信念。因此这个大项目的完成经历,为我后面代码编写规范、新语言(C++、Python、Html等)的学习都打下了坚实的基础(虽然很多都没学精)。

    版权声明

    该项目所有代码均为Zevin原创

    如果有问题,欢迎大家提ISSUE

    整理不易,如果觉得还不错的话记得给个star哦

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    如何使用 Element UI? 以登录框为例带你感受一下基础使用
    实训笔记9.12
    【Java-LangChain:使用 ChatGPT API 搭建系统-9】评估(上)-存在一个简单的正确答案时
    SSM框架介绍
    mybatis之动态SQL语句&分页查询
    史上最全的web前端面试题汇总及答案1
    代码随想录Day59 | 647. 回文子串 | 516. 最长回文子序列
    浙大陈越何钦铭数据结构08-图7 公路村村通【循环和最小堆版】
    03_ElasticSearch下载安装
    【SQL】SQL可能是你掌握的最有用的技能
  • 原文地址:https://blog.csdn.net/emgexgb_sef/article/details/126081059