基于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 环境配置

  • Java SDK 17/16/15

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

  • IDEA

  • Navicat

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

2. 实现功能

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

3. 使用说明

3.1 数据库准备

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

  2. 新建一个Mysql连接

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

  4. 双击设置好的连接名tankGame,右键新建数据库,命名为tankgame

  5. 右键新建好的数据库,选择运行SQL文件

  6. 选取代码中提供的sql文件,点击开始等待运行结束

  7. 刷新一下即可看见数据库结构和数据均已导入到数据库中

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

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

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

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

3.2 运行程序

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

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();
    }
    

    }

  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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

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

  1. 基于Java语言在窗体上实现飞机大战小游戏

    全套资料下载地址:https://download.csdn.net/download/sheziqiong/85594271 项目介绍 飞机大战:用 Java 语言在窗体上实现飞机大战小游戏,运行程 ...

  2. 探果(简称tamguo)是基于java开发的在线题库系统

    简介: 探果(简称tamguo)是基于java开发的在线题库系统 启动 tms 找到tamguo-tms下面的application.propertys. domain.name // 页面引用静态资 ...

  3. 【JAVA程序设计】基于JAVA的坦克大战小游戏--入门级小游戏

    基于JAVA的坦克大战小游戏--入门级小游戏 零.项目获取 一.项目简介 二.开发环境 三.游戏玩法 四.运行截图 零.项目获取 获取方式(点击下载):是云猿实战 项目经过多人测试运行,可以确保100 ...

  4. Java实现的经典坦克大战小游戏

    Java实现的经典坦克大战小游戏 先看一下游戏结构: 有点多,没有耐心的可以不用看,这里先给出链接吧! 云链接:经典坦克大战 提取码:s9ai 这里就不介绍功能了,贴了一张游戏运行的截图,具体的功能自 ...

  5. 【180930】坦克大战小游戏源码

    坦克大战小游戏源码程序实现了小霸王游戏机上坦克大战的功能,主要功能是开火.移动.3种不同的敌方坦克.用户自制地图等,缺点是有些小细节还处理的不好,感觉画面不够好,还没实现自动的下一关功能(主要是嫌做默 ...

  6. Vue 开发一个简略版的飞机大战小游戏

    文章目录 使用 Vue 开发一个简略版的飞机大战小游戏 一.实现思路 二.所需知识点 三.实现步骤 使用 Vue 开发一个简略版的飞机大战小游戏 如题,假设你为了向更多访问你博客的人展示你的技术,你决 ...

  7. html实现经典坦克大战小游戏

    文章目录 1.设计来源 1.1 游戏主界面 1.2 游戏界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/w ...

  8. C++实用编程——坦克大战小游戏

    C++实用编程--坦克大战小游戏 Warning: 转载类 原文地址:*HTML https://yq.aliyun.com/articles/683666 改变速度的玩意坏了 我们直接看代码吧,适于 ...

  9. canvas+js实现简单的坦克大战小游戏

    使用canvas和js实现经典的坦克大战并不难,坦克和炮弹的绘制可以使用canvas的里API画出,而坦克的移动和炮弹的发射可以依赖于键盘事件和定时器来实现. 在这里我要实现的坦克大战是双人模式,有木 ...

  10. netty+kotlin实现双人联机坦克大战

    最近因为我在学校报了一个实训项目,这个项目要实现pc安卓双平台所以学习了自己觉得还不错的一个函数语言kotlin,学习过程中有了开发一个联机游戏练手的想法 这里我们实现的方法是将坦克1开启的窗体看作是 ...

最新文章

  1. suse linux ps简介
  2. 微信关闭html5游戏吗,5月20日起,微信将彻底关闭这个功能!
  3. 计算机考试字字处理重点,计算机等级考试一级B上机试题:字表处理题(1)
  4. 快速部署Linkis1.0文档
  5. SQL Server性能优化案例报告
  6. TensorFlow简介:向量对象
  7. Hive 查看库有多少表,表有多少字段以及动态监控
  8. 在c语言中合法标识符的第一个字符必须是,c语言合法标识符判断规则是什么?...
  9. python入门——P40类和对象:一些相关的BIF
  10. 使用迁移学习后使用微调再次提高模型训练的准确率
  11. Eclipse — 如何快速生成servlet类和配置文件(web里)
  12. 设置eclipse主题风格和取消黑色主题(详细)
  13. 解决台式机外放和插耳机都没声音[基础版]
  14. Workflow 规则大全 最新版
  15. PythonC++相互混合调用编程全面实战-24QT按钮事件的Open槽函数中调用python函数
  16. linux中FAT的中文意思,Linux_细说FAT16与FAT32区别,在说明FAT文件系统之前,我们 - phpStudy...
  17. buu逆向刷题(三)
  18. 计算机课翻转课堂教案,翻转课堂式教学
  19. Redis6:第六章:(2)Redis6 新数据类型:HyperLogLog
  20. html div鼠标选中状态,CSS鼠标移动div时如何避免选中div中的文字

热门文章

  1. MD5加密概述,原理及实现
  2. http://bbs.3dmgame.com/forum.php,3DM游戏运行库合集安装包v2.9
  3. 简单好用的应用加密软件:Cisdem AppCrypt Mac版
  4. 平板边界层内的流速分布实验
  5. c盘满了一键检测,清理,瘦身!
  6. Mac UE各版本破解方法
  7. python PDF文件转JPG
  8. PDF如何转换成jpg图片
  9. modelsim与quartus仿真的区别
  10. 打印机添加或者设置流程