程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 從零開始制作Minecraft啟動器(C++開源),

從零開始制作Minecraft啟動器(C++開源),

編輯:C++入門知識

從零開始制作Minecraft啟動器(C++開源),


從零開始制作Minecraft啟動器(C++開源)

 

  新手飙車了~~~,MC啟動器源碼大放送,隨心所欲打造自己的專屬MC啟動器,這不是易語言,是C++。。。分析原理,關鍵源碼都有詳細的注釋,代碼編好就打包放送,所以說凌亂無比。。。

 

下載地址:

百度網盤:http://pan.baidu.com/s/1i3UDOXn

CSDN下載:http://download.csdn.net/detail/u010661060/9376136

 

MClauncher(公版)啟動器界面:

 

 

 

代碼全部開源,擁有詳細的注釋:

 

 

 

測試過的平台:windows7 64位、windowsXP,在這兩個平台上都能運行。

 

測試MC啟動版本:Minecraft1.7.10純淨版、Minecraft1.7.10 forge版都能啟動,講道理的話,其他版本的游戲也有可能啟動。。。

 

特別說明:

  因為采用的Qt為誇平台軟件,編譯出來的exe文件運行需要很多的誇平台庫,這樣的話導致啟動器比一般的都要大而且啟動器目錄非常混亂,為了解決此問題,已將所有的庫文件和exe打包成新的exe文件了,直接點擊MClauncher.exe運行即可。注意,360會瞎比報毒,直接無視即可。。。

 

 

  歷經千辛萬苦終於撸出了自己的啟動器,盡管還有無數的BUG,但至少能用了。。。

 

  剛開始什麼都不知道,在網上大量搜索MC啟動器源碼、MC啟動原理等。搜索到的源碼還是挺多的,但是大多是易語言寫的,下了好多下來。但是,不懂易語言,愣是沒看懂怎麼啟動的。後想到Google上找點源碼,但是有GFW的存在,買不起VPN,好多網頁都打不開,而且最為關鍵的是尼瑪看不懂英文啊。後來在某個論壇裡看見一條回復,說是要啟動MC,分析裡面的JSON文件就可以了,看到這句話,制作MC啟動器終於有了眉目了。

 

         先著手分析MC啟動器啟動參數,參考旋律啟動器,打開旋律啟動器調試開關,就可獲得啟動器傳給游戲的參數。當然,也可以打開cmd,在啟動器啟動時輸入“wmic process where caption="javaw.exe" get caption,commandline /value>D:\canshu.txt”參數,即可獲得啟動器參數。

 

         在看MC啟動器參數之前,先來看看運行jar包參數傳遞及依賴關系分析。

之前為了弄清MC參數傳遞,特地做了個小的java程序模擬MC游戲,這樣不必在龐大的MC游戲上做這個小參數測試。

 

小游戲啟動腳本:

java -Xmx1024m -Dplayer.name=BlueCat -cp HelloFrame.jar HelloFrame

參數分析:

-Xmx1024m:代表JVM最大堆內存值(不懂,反正照著別人的抄就行。。。)

 

-Dplayer.name:(用-D<name>=<value>來設定系統屬性值)這裡利用來傳遞游戲參數,在java程序裡可以用:System.getProperty("player.name")獲得其值,這樣就可以在測試窗口上顯示玩家名稱了。

 

-cp:目錄和 zip/jar 文件的類搜索路徑,後面的參數為main函數執行所依賴的jar包,以及其所在的jar包,無先後順序。

 

最後一個參數:指定main函數所在的類HelloFrame,若該類在包中,前面加上包名,否則只寫類名即可。

 

現在再來看真正的Minecraft啟動參數,太長了,分段來看。

 

第一段:

C:\Program Files\Java\jre7\bin\javaw.exe

(包含全路徑的javaw.exe)

 

第二段:

-Xmx1024m

-Dfml.ignoreInvalidMinecraftCertificates=true

-Dfml.ignorePatchDiscrepancies=true

-Djava.library.path=".minecraft\natives"

(堆內存及相關系統變量設置)

 

第三段:

-cp “ ...(此處省略一萬個jar包)...1.7.10-Forge10.13.2.1230.jar”

(所依賴的jar包)

 

第四段:

net.minecraft.launchwrapper.Launch

(main所在的類)

 

第五段:

--username      BlueCat

--version        1.7.10-Forge10.13.2.1230

--gameDir       .minecraft

--assetsDir       .minecraft\assets

--assetIndex      1.7.10

--uuid           ${auth_uuid}

--accessToken     ${auth_access_token}

--userProperties   {}

--userType        legacy

--tweakClass      cpw.mods.fml.common.launcher.FMLTweaker

(游戲參數,在JSON文件中的minecraftArguments)

 

在模擬小程序中,除了第五段沒有模擬外,其他都是類似的。

啟動游戲時傳遞這些參數即可啟動游戲了,這些參數都可以從JSON文件中獲得,當然有些參數是固定的有的是自己設置,比如游戲名字自己設置吧。

 

所說的JSON文件在.minecraft\versions\1.7.10\目錄下的1.7.10.json

 

  重要的參數都在這裡,所以啟動器要做的就是解析這個JSON文件,獲得其中的值,轉化為啟動參數,傳遞給JVM就可以了。所以,做啟動器做的最多的就是字符串處理了,我是個菜雞,C++和Qt都是半吊子,一知半解,也不知道有什麼好的方法。反正很多地方都做得比較蠢,代碼也寫的相當的凌亂,想起什麼就寫什麼,寫到最後連我自己都理不清思路了,所以看源代碼可能會比較費解,不過關鍵的方法都有注釋。在閱讀源代碼時記住一條,所做的一切的目的是將JSON中的一串字符轉化為合適的啟動參數。所以在看到代碼在瞎JB做循環或者突然減個1時,不要懵圈了,~_~。關於啟動器的原理就說這麼多了,更多的查看源代碼,哈哈~~~。

 

噢,對了,還有些事情。

1、  就是希望大家幫忙測試啟動器,BUG發送至我的郵箱[email protected],感激不盡!

可能不會盡快修復BUG,因為有更重要的事情要做,應該最近很長一段時間內不會再碰啟動器了。

 

2、  公版啟動器現存的BUG:

(1)在選啟動版本時存在窗口滑動BUG,類似下圖。

 

這個BUG,我暫時無能為力,我只是一只菜雞,在不斷的學習中。。。

(2)那個自動設置內存選項是假的,就是固定設置為1024m,我暫時還不知到怎麼弄。

(3)java路徑自動查找算法還有待強化,這其實也不太算是BUG,目前只是查找系統環境變量中PATH中含有的java路徑,在別的電腦上測試時有失敗過。

 

3、  關於制作啟動器過程中一點蛋疼的問題

先是在Qt4上撸出了啟動器的界面,大多按鈕采用假連接,後來到解析JSON文件時才發現Qt4沒有JSON相關的類,JSON相關的類從Qt5才開始有。於是跑到官網上下了最新版的Qt5.5.1(minGW版),編譯好了程序一運行就導致Qt Creater一直未響應,這真的是很蛋疼。後來換到Qt5.0.2才沒有這個問題,可是這版本編譯的Release版要在沒有裝Qt的電腦上運行很麻煩,要多很多的庫文件。於是,又下了個Qt5.5.0,還是有一直未響應的問題。所以呢,最後用Qt5.0.2編譯調試,然後用Qt5.5.0編譯在別的電腦上測試。。。

 

4、  最後一點,參考旋律啟動器時有個natives文件夾,裡面放的是些dll文件,不知道有什麼用,反正沒了就是啟不動,旋律缺少的話是下載過來的。在這裡的話,我是解壓相關jar包中的文件到該目錄下的,所以,公版啟動器中還內置了一個unzip32.exe程序。

 

啟動器是從零開始撸出來的,很多地方不是很理解,也有的地方做的有些愚,還望有大牛能夠指點一二,萬分感謝!!!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved