大二上学期JAVA语言结课大作业
通过使用面向对象的编程思想,采用数据库、Http协议、Spring图像可视化、多线程、发送邮件等技术实现在线双人联机坦克大战小游戏
源码链接
喜欢的欢迎大家点Star
有疑问的欢迎大家提ISSUE交流学习
----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
Java SDK 17/16/15
Mysql(任意版本,不要太老就行)
IDEA
Navicat
注意?:放置代码时,建议文件路径中不要出现中文,否则会报错。
新建一个Mysql连接

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

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

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

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

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

习惯用命令行操作的大佬可以直接再命令行里新建库(库名记得对应),然后运行sql文件即可
后续的所有游戏记录、用户信息均会被服务器保存在数据库中
对数据库表结构的介绍在这就不做过多赘述
注意?:由于是本地数据库,请在每次运行代码前,提前打开数据库
(在Navicat里双击tankgame数据库,显示为绿色即可)
否则代码会因找不到数据库而报错
注意事项?:当时编写代码时,文件可能是以ASCII格式进行保存的
所以再次打开可能会出现乱码的情况
只需以GBK格式载入文件
或者把*.java文件先用记事本打开,然后选择另存为,最后再在保存界面的右下角选择UTF-8格式重新保存一下即可

从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”);
…
从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操控坦克开始游戏吧

仅供学习交流,文档均已加密且添加水印
请勿直接git clone后提交作业
尽管游戏能正常运行,但依旧存在一些懒得改的Bug,欢迎大家提Issue交流学习
这个项目是我大学完成的第一个最自豪的大项目
个人项目,纯独立原创完成,工作量可想而知
遇到过很多坑,但在自己的摸索中也一个个地解决了,积累了很多经验,也自学了很多东西
虽然网上有很多现成的轮子可以直接CV,但当时的自己还有着坚定的多造轮子,少CV的信念。因此这个大项目的完成经历,为我后面代码编写规范、新语言(C++、Python、Html等)的学习都打下了坚实的基础(虽然很多都没学精)。
该项目所有代码均为Zevin原创
如果有问题,欢迎大家提ISSUE
整理不易,如果觉得还不错的话记得给个star哦
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦