hana引擎介紹

 

hana引擎介紹

用途

hana引擎是參考Electron的想法(我沒有查過他的實做,所以不敢說是用一樣的作法)製作的java galgame引擎。
主要目標是想讓不會寫程式但會畫圖跟寫腳本的人可以輕鬆做出galgame,並且讓前端開發者可以用html + css + js做出更複雜的功能甚至是小遊戲,理論上可以套用所有網頁框架甚至是非js,為什麼可以這樣做下面會說明。
另外它採用完全的前後端分離,並且可能會使用graalVm 因此"應該"可以跨多語言(以官方來看可以支援js, node.js, python, ruby, R, LLVM家族)

架構

整體架構簡單來說是:
javaFx + SpringBoot + MyBatis + H2DB + hana script
所有東西(包含DB)都是執行在jre(jvm)上面,所以這個專案不用處理任何作業系統的問題,可以幾乎跨全平台。
但android 不包含在內。
雖然android有類似jvm的東西,但由於ART那個我很討厭的東西是google高度訂製的類似jvm的東西,所以會有缺一堆lib跟多一堆有的沒的lib所以無法跨平台上,但關於這點有備案可以另外聊(不是這次)。
整個啟動流程滿簡單易懂的,當使用者開啟應用程式的時候會啟動上述 javaFx + SpringBoot + H2DB。

前端

前端是使用JavaFx 上的 Webkit。
簡單來說當使用者開啟的時候就是開啟一個java的網頁瀏覽器。
對於開發者來說就是開發總計三個一頁式網頁並且透過spring boot的API去取得資料或存取檔而已。
同時由於是直接使用 Webkit 所以理論上來說可以跑unity 3d網頁版跟live 2d,但由於沒有測試過所以不確定。
對於沒學過前端的人hana引擎本身會提供基本的網頁讓使用者不用寫網頁也可以得到想要的東西。
所以理論上玩家會看到的東西應該是極高度訂製化的才對。

後端

後端是採用 java 目前最主流的後端框架,基本上所有的類別呼叫都是透過依賴注入(DI)跟控制反轉(IOC)去實現的。
換句話說當hana引擎開發完成後可以提供界面讓非hana引擎維護者的開發人員可以不用看hana引擎的code就可以客製化自己的後端內容甚至修改API,但因為剛開始就考慮這塊會大幅影響開發進度,所以目前不開發這個內容。

持久化

使用MyBatis,因為它可以檔sql注入也可以做動態sql組成,感覺很不錯。

DB

資料庫使用H2 DB的嵌入模式,他是純 Java 實現的資料庫。
這個東西滿屌的

  • 它雖然是DB但對於玩家來說它不用手動安裝任何東西,
  • 對於開發者來說它就是一個大約2MB大小的lib而已

真的超簡單的,只需要在spring boot設定幾個參數而已就有DB可以用了,而且有網頁控制台,如果資料只有幾十萬的話效能上完全可以和mysql媲美。

後言

java是我從高二用到現在,一直是我很喜歡的語言,是一個說不出來的喜歡,不過這件事情其實很愚蠢,就有點像是工具箱裡獨愛十字螺絲起子一樣。
同時看著它成長,你知道嗎?他讀取檔案這件事情從

String fileName = "c://lines.txt";
List<String> list = new ArrayList<>();

try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
    list = stream.collect(Collectors.toList());
} catch (IOException e) {
    e.printStackTrace();
}

這麼麻煩的寫法變成了:

try {
    var content = Files.readAllLines(Paths.get(fileName));
} catch (Exception e) {
    e.printStackTrace();
}

很有趣吧,但大部分的人都還停留在那個麻煩的寫法就是了…
雖然說著喜歡,但其實從來沒有用它來完成過任何東西。(第一個完成的是類C語言,第二個是python。)
所以這次算是一個彌補吧。
另外這次的專案目前沒有想要拿來賺錢,完全只是自己想做遊戲所以才做的。
有點回到小時候的感覺,不考慮金錢不考慮大家是否喜歡甚至不在意會不會有一堆BUG,只是單純做有趣好玩的東西。
或許有點向"理想的大人"邁進了吧哈哈。

目前進度

現在進度的話…
前端做了標題畫面,還有遊戲對話的部份跟選擇存檔畫面沒做,阿好不喜歡前端,好不想做阿
後端的部份持久層的sql全部寫好了,剩下service層跟controller層。如果不偷懶的話九月初可以做完吧。但是好多遊戲想玩阿~~~
主要是讀取hana腳本的邏輯會花比較多時間寫吧。
恩希望明年夏天可以壓幾張去CWT賣~~~

留言

這個網誌中的熱門文章

基本 Spring security 快速入門

記帳專案說明

JMSTemplate 的教學