【開源】釋出一個基於JavaFX的小遊戲:CrazyAlpha

畫星星高手發表於2020-01-31

Features

  1. 基於JavaFX設計了遊戲引擎XEngine
  2. 使用自行開發的遊戲引擎XEngine實現完整遊戲功能
  3. 遊戲資源管理:字型、圖片、音訊管理
  4. 遊戲地圖管理,多地圖切換
  5. MVVM分層設計,程式碼解耦合,模組高內聚
  6. Model模型系統設計,模組化設計
  7. 使用訂閱者模式實現的訊息系統和事件處理
  8. 使用Gradle構建

下載執行

首先,點選開啟:CrazyAlpha下載頁面

【開源】釋出一個基於JavaFX的小遊戲:CrazyAlpha

下載CrazyAlpha的最新版本,例如圖中的是1.0.1,檔名是:crazyalpha.jar

PS:由於遊戲是使用Java編寫的,所以沒有安裝Java的小夥伴請先下載Java,Windows版本的Java執行環境下載:點選下載

在安裝完java環境之後,可以雙擊jar包執行,或者右鍵選擇使用Java Runtime執行 當然也可以在命令列中執行

java -jar crazyalpha.jar
複製程式碼

開源

Github專案地址:github.com/Deali-Axy/C…

PS:由於版權原因,Github程式碼中不包含遊戲用到的圖片、字型、聲音等資原始檔,所以要執行遊戲的同學可以自行替換資原始檔,或者聯絡我獲取資原始檔。

架構

  1. Game.Engine:自行實現的遊戲引擎包
    1. Annotation:引擎註解包,包含引擎定義的註解
      1. GameEventHandler:事件處理器註解
      2. GameManager:遊戲中各類管理器的註解
      3. GameModel:模型註解
      4. GameObject:遊戲物件註解
      5. GameView:檢視註解,用於實現MVVM分層設計
    2. Base:基礎類包,包含了引擎定義的各種抽象基類
      1. BaseModel:基礎模型
      2. ImageModel:基礎圖形模型
      3. ShapeModel:基礎形狀模型
      4. TextModel:基礎文字模型
    3. Enum:各類列舉的定義(略)
    4. Utils:其他工具(略)
    5. GameObject:遊戲物件基類,所有物件都從這個類派生
    6. GameView:除了遊戲主介面外的其他介面都由檢視基類派生
  2. Game.EventHandler:包含所有事件處理器
  3. Game.Manager:包含了各類管理器,地圖、資源、資料、模型、事件等管理器
  4. Game.Object:包含所有遊戲物件的定義
    1. Model:包含所有遊戲模型的定義
    2. GameMap:遊戲地圖物件
    3. Generator:遊戲事件發生器
  5. Game.View:檢視包,包含所有檢視的定義
  6. Game:全域性遊戲物件,使用單例模式建立
  7. Main:遊戲主類
  8. Render:核心渲染器,負責遊戲的渲染工作

圖形介面實現

為了開發這個遊戲,我先開發了一個基於JavaFX的遊戲引擎,引擎實現了從遊戲資源管理、模型定義,到畫面渲染等一系列功能,按照市面上現有的商業遊戲引擎的設計思路進行設計,“麻雀雖小,五臟俱全”,雖然無法匹敵其他成熟的遊戲引擎,但是就功能來說,是一應俱全的,能夠滿足大部分2D小遊戲的開發需要。

介面截圖

遊戲啟動畫面:

左上方是遊戲的logo,左下角顯示最高分記錄,下面是作者資訊和版本。 右下角是兩個按鈕,一個啟動遊戲按鈕,另一個退出按鈕。

【開源】釋出一個基於JavaFX的小遊戲:CrazyAlpha

遊戲主介面:

左上角是玩家頭像,當前得分,以及生命值;正上方是當前關卡; 畫面中央是大風車,大風車跟隨音樂節奏發射字母,玩家需要在字母飛出螢幕之前按下對應的字母才能得分。

【開源】釋出一個基於JavaFX的小遊戲:CrazyAlpha

遊戲暫停畫面

image.png

遊戲結束畫面

左下方顯示本局遊戲得分,以及是否打破最高分記錄。右下角顯示返回主介面按鈕。

【開源】釋出一個基於JavaFX的小遊戲:CrazyAlpha

開發心得

這是我第一次使用Java做遊戲開發,之前對Java這門語言的理解僅限於JavaEE做Web開發這方面,最近學習了JavaFX,用了一下,才發現原來JavaFX這麼好用,確實是專門為GUI設計的框架,只是用的人比較少,我在開發過程中遇到了很多問題,基本都找不到國內的資料,還好有萬能的StackOverFlow,另外,Oracle官網的文件也是挺詳細的,感謝~

對於我這樣寫習慣了Python這類動態語言的人來說,寫大量Java程式碼的感受就是,很繁瑣,但是很省心,不需要怎麼動腦,不用糾結這個引數是什麼型別,需不需要做強制型別檢查,一切都由IDE和JVM安排的明明白白,不需要我再去操心型別的問題,另外因為Java語法比較死板,沒有那麼多靈活的寫法,這既是缺點又是優點,缺點就是對於我這種喜歡炫技的人來說,寫Java程式碼沒有多少快感,但是優點是同樣的功能,實現的程式碼基本都差不多,不同的人來實現也不會有多大的差別,這就保證了程式碼的可維護性,可能現在用Python寫一個大專案,程式碼全都是揮灑飄逸,不拘一格,寫的時候很爽,但是等到後面重構的時候,完蛋了,看不懂之前的程式碼了,儘管有註釋,但不可能每一行程式碼都有註釋吧,靈活的寫法增加了理解難度,因此Java在大型專案的絕對統治地位不是空穴來風。

這次遊戲開發也加深了我對Java這門語言的理解,比如說反射,比如說事件,一開始在做事件處理部分的時候,讓我感到有點困惑的就是,Java既沒有委託、也沒有真正的“事件”這個概念,一切都是用介面和類實現,實現介面功能一般都是通過傳入實現某個事件介面的匿名類(當然在Java8裡可以使用lambda表示式),不過這也不是什麼大問題,這些問題都有其他方法可以解決,只不過寫起來比較繁瑣而已。可能我之前寫習慣了C#,所以寫Java程式碼的時候總是不由自主拿來對比,但是其實這兩種語言的可對比性不高,因為出生的年代都不一樣,C#在語言設計上確實是比Java高明得多,近年來Java的新版本或有或無的在模仿C#多年前的特性,比如說Java8的lambda表示式,Java11的var定義變數等。

此外,此次開發小遊戲讓我對Java的體會就是,語法很簡單,不像C#和C++那樣多而複雜,所以對於初學者而言特別友好,因為一學就會,配合上最好的IDE:IDEA,輕輕鬆鬆寫出各種專案,有一個說法是,因為Java語言本身的功能太少,所以出現了各種設計模式來補全Java語言的不足。

About

【開源】釋出一個基於JavaFX的小遊戲:CrazyAlpha

Learn more on my WeChat Official Account:DealiAxy

Every post was in my blog:blog.deali.cn

歡迎交流

交流問題請在微信公眾號後臺留言,每一條資訊我都會回覆哈~

相關文章