基于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.md1.2 環境配置
-
Java SDK 17/16/15
-
Mysql(任意版本,不要太老就行)
-
IDEA
-
Navicat
注意?:放置代碼時,建議文件路徑中不要出現中文,否則會報錯。
2. 實現功能
3. 使用說明
3.1 數據庫準備
下載安裝好Mysql和Navicat后,打開Navicat
新建一個Mysql連接
連接名填tankGame;密碼填安裝Mysql時,設置賬戶時自己設置的密碼(可自行百度如何安裝Mysql);點擊測試連接,顯示成功后,一路點確定
雙擊設置好的連接名tankGame,右鍵新建數據庫,命名為tankgame
右鍵新建好的數據庫,選擇運行SQL文件
選取代碼中提供的sql文件,點擊開始等待運行結束
刷新一下即可看見數據庫結構和數據均已導入到數據庫中
習慣用命令行操作的大佬可以直接再命令行里新建庫(庫名記得對應),然后運行sql文件即可
后續的所有游戲記錄、用戶信息均會被服務器保存在數據庫中
對數據庫表結構的介紹在這就不做過多贅述
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();
}
對于郵件發送功能(代碼中支持的是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开发的在线双人联机坦克大战小游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html透明页面锁定窗口,CSS弹出背景
- 下一篇: 在网络蚂蚁中设置代理服务器