日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/10 编程问答 94 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于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开发的在线双人联机坦克大战小游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。