基于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 环境配置
Java SDK 17/16/15
Mysql(任意版本,不要太老就行)
IDEA
Navicat
注意?:放置代码时,建议文件路径中不要出现中文,否则会报错。
2. 实现功能
- 基于数据库系统的用户信息注册、改密、分数记录、分数查询功能
- 基于Http传输协议的双人联机小游戏功能、在线聊天室、用户反馈信息功能
- 基于SMTP协议的邮箱验证码、荣誉证书发放功能
- 完备的游戏逻辑(时间限制、投降机制、计分机制、排名机制、输赢机制)
- 采用多线程机制实现坦克发射子弹后,依旧可以控制坦克移动或者重复发送弹药以及倒计时功能
- 采用Spring编程,实现游戏界面可视化
3. 使用说明
3.1 数据库准备
下载安装好Mysql和Navicat后,打开Navicat
新建一个Mysql连接
连接名填
tankGame
;密码填安装Mysql时,设置账户时自己设置的密码(可自行百度如何安装Mysql);点击测试连接,显示成功后,一路点确定
双击设置好的连接名
tankGame
,右键新建数据库,命名为tankgame
右键新建好的数据库,选择
运行SQL文件
选取代码中提供的sql文件,点击
开始
等待运行结束
刷新一下即可看见数据库结构和数据均已导入到数据库中
习惯用命令行操作的大佬可以直接再命令行里新建库(库名记得对应),然后运行sql文件即可
后续的所有游戏记录、用户信息均会被服务器保存在数据库中
对数据库表结构的介绍在这就不做过多赘述
注意?:由于是本地数据库,请在每次运行代码前,提前打开数据库
(在Navicat里双击tankgame数据库,显示为绿色即可)
否则代码会因找不到数据库而报错
3.2 运行程序
注意事项?:当时编写代码时,文件可能是以ASCII格式进行保存的
所以再次打开可能会出现乱码的情况
只需以GBK格式载入文件
或者把*.java文件先用记事本打开,然后选择另存为,最后再在保存界面的右下角选择UTF-8格式重新保存一下即可
3.2.1 打开后端服务器(先运行)
从IDEA上导入后端服务器文件夹
code ankGameServer
可运行Main程序在
code ankGameServersrc ankGameServerTankGameServer.java
中
直接运行到命令行出现Server: Wainting connection~~~
即可
在该文件夹中,可以利用
code ankGameServer坦克地图.xlsx
来设计地图,设计好后,把对应的文本数据复制粘贴到code ankGameServerMAP.txt
中即可
对于读取数据库部分,需要将
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(); }
}
对于邮件发送功能(代码中支持的是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 打开前端游戏(后运行)
从IDEA上导入前端游戏文件夹
code ankGame
可执行main文件在
code ankGamesrcmainjava unGameBeginGame.java
中,直接运行项目即可
注册或输入正确的用户名和密码即可进入游戏主页面。此刻会显示等待其他玩家连接
若在公网或局域网中双人游戏,请修改
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);若只想在本地进行游戏测试,可以使用编译器或者命令行重复运行该项目即可(注意不要把之前开启的第一个游戏界面给挤掉)
使用
WASDJ
操控坦克开始游戏吧
4. One More Thing
更多更详细的内容可见用户手册、设计文档
仅供学习交流,文档均已加密且添加水印
请勿直接git clone
后提交作业
尽管游戏能正常运行,但依旧存在一些懒得改的Bug,欢迎大家提Issue交流学习
5. 最后说一句
这个项目是我大学完成的第一个最自豪的大项目
个人项目,纯独立原创完成,工作量可想而知
遇到过很多坑,但在自己的摸索中也一个个地解决了,积累了很多经验,也自学了很多东西
虽然网上有很多现成的轮子可以直接CV,但当时的自己还有着坚定的多造轮子,少CV的信念。因此这个大项目的完成经历,为我后面代码编写规范、新语言(C++、Python、Html等)的学习都打下了坚实的基础(虽然很多都没学精)。
版权声明
该项目所有代码均为Zevin原创
如果有问题,欢迎大家提ISSUE
整理不易,如果觉得还不错的话记得给个star哦
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
基于JAVA开发的在线双人联机坦克大战小游戏相关推荐
- 基于Java语言在窗体上实现飞机大战小游戏
全套资料下载地址:https://download.csdn.net/download/sheziqiong/85594271 项目介绍 飞机大战:用 Java 语言在窗体上实现飞机大战小游戏,运行程 ...
- 探果(简称tamguo)是基于java开发的在线题库系统
简介: 探果(简称tamguo)是基于java开发的在线题库系统 启动 tms 找到tamguo-tms下面的application.propertys. domain.name // 页面引用静态资 ...
- 【JAVA程序设计】基于JAVA的坦克大战小游戏--入门级小游戏
基于JAVA的坦克大战小游戏--入门级小游戏 零.项目获取 一.项目简介 二.开发环境 三.游戏玩法 四.运行截图 零.项目获取 获取方式(点击下载):是云猿实战 项目经过多人测试运行,可以确保100 ...
- Java实现的经典坦克大战小游戏
Java实现的经典坦克大战小游戏 先看一下游戏结构: 有点多,没有耐心的可以不用看,这里先给出链接吧! 云链接:经典坦克大战 提取码:s9ai 这里就不介绍功能了,贴了一张游戏运行的截图,具体的功能自 ...
- 【180930】坦克大战小游戏源码
坦克大战小游戏源码程序实现了小霸王游戏机上坦克大战的功能,主要功能是开火.移动.3种不同的敌方坦克.用户自制地图等,缺点是有些小细节还处理的不好,感觉画面不够好,还没实现自动的下一关功能(主要是嫌做默 ...
- Vue 开发一个简略版的飞机大战小游戏
文章目录 使用 Vue 开发一个简略版的飞机大战小游戏 一.实现思路 二.所需知识点 三.实现步骤 使用 Vue 开发一个简略版的飞机大战小游戏 如题,假设你为了向更多访问你博客的人展示你的技术,你决 ...
- html实现经典坦克大战小游戏
文章目录 1.设计来源 1.1 游戏主界面 1.2 游戏界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/w ...
- C++实用编程——坦克大战小游戏
C++实用编程--坦克大战小游戏 Warning: 转载类 原文地址:*HTML https://yq.aliyun.com/articles/683666 改变速度的玩意坏了 我们直接看代码吧,适于 ...
- canvas+js实现简单的坦克大战小游戏
使用canvas和js实现经典的坦克大战并不难,坦克和炮弹的绘制可以使用canvas的里API画出,而坦克的移动和炮弹的发射可以依赖于键盘事件和定时器来实现. 在这里我要实现的坦克大战是双人模式,有木 ...
- netty+kotlin实现双人联机坦克大战
最近因为我在学校报了一个实训项目,这个项目要实现pc安卓双平台所以学习了自己觉得还不错的一个函数语言kotlin,学习过程中有了开发一个联机游戏练手的想法 这里我们实现的方法是将坦克1开启的窗体看作是 ...
最新文章
- suse linux ps简介
- 微信关闭html5游戏吗,5月20日起,微信将彻底关闭这个功能!
- 计算机考试字字处理重点,计算机等级考试一级B上机试题:字表处理题(1)
- 快速部署Linkis1.0文档
- SQL Server性能优化案例报告
- TensorFlow简介:向量对象
- Hive 查看库有多少表,表有多少字段以及动态监控
- 在c语言中合法标识符的第一个字符必须是,c语言合法标识符判断规则是什么?...
- python入门——P40类和对象:一些相关的BIF
- 使用迁移学习后使用微调再次提高模型训练的准确率
- Eclipse — 如何快速生成servlet类和配置文件(web里)
- 设置eclipse主题风格和取消黑色主题(详细)
- 解决台式机外放和插耳机都没声音[基础版]
- Workflow 规则大全 最新版
- PythonC++相互混合调用编程全面实战-24QT按钮事件的Open槽函数中调用python函数
- linux中FAT的中文意思,Linux_细说FAT16与FAT32区别,在说明FAT文件系统之前,我们 - phpStudy...
- buu逆向刷题(三)
- 计算机课翻转课堂教案,翻转课堂式教学
- Redis6:第六章:(2)Redis6 新数据类型:HyperLogLog
- html div鼠标选中状态,CSS鼠标移动div时如何避免选中div中的文字