Skip to content
This repository was archived by the owner on Dec 24, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
9dc0071
ci: remove ratchetFrom configuration in spotless (#2)
thnhmai06 Sep 29, 2025
90d06b7
Implement abstract class Ball (#3)
minngoc1213 Sep 30, 2025
b0844df
feat: Brick (#1)
ManhTanTran Sep 30, 2025
bfd5534
feat: Add PowerUp class (#5)
thnhmai06 Sep 30, 2025
9ebb12d
chore: Update .gitignore and add commit instructions
thnhmai06 Oct 1, 2025
f803b3c
Merge pull request #6
ManhTanTran Oct 1, 2025
5d7487b
docs: Update documentation links in PowerUp and Ball classes
thnhmai06 Oct 1, 2025
e5f75a4
Brick (#7)
ManhTanTran Oct 7, 2025
169ad53
refactor: remove duplicate `paddle` folder
thnhmai06 Oct 7, 2025
84c357f
feat/GameApplication (#8)
ManhTanTran Oct 8, 2025
7419cd4
ci: update workflow setup steps for clarity
thnhmai06 Oct 8, 2025
06eb0b7
chore: remove debug script parameters from run configurations
thnhmai06 Oct 8, 2025
f11276a
refactor: reorganize component structure and improve entity tagging (…
thnhmai06 Oct 9, 2025
c0e00af
chore: remove unused logging dependencies from build.gradle
thnhmai06 Oct 11, 2025
91e1aca
chore: update output directory for build artifacts
thnhmai06 Oct 11, 2025
0079733
Add game systems template (#13)
thnhmai06 Oct 13, 2025
a2d0010
chore: update project JDK language level to JDK_24_PREVIEW
thnhmai06 Oct 13, 2025
4ea8826
BREAKING CHANGE: Add Paddle Components, refactor codebase and ci (#10)
ManhTanTran Oct 21, 2025
06f6adc
[skip ci] chore: add CODEOWNERS
thnhmai06 Oct 21, 2025
4b9e256
Add Ball entity and Ball, Brick physic/collision components (#14)
minngoc1213 Oct 22, 2025
07bfda0
[skip ci] chore: remove `/system/` ignore folder
thnhmai06 Oct 22, 2025
74d861c
feat(Factory): use `HealthDeath` component instead of manual set deat…
thnhmai06 Oct 22, 2025
3e70c23
Merge pull request #18 from CodeStormOOP/main
thnhmai06 Oct 25, 2025
424d28e
refactor: Change `@SuitableFor` become a run-time function
thnhmai06 Oct 26, 2025
1ee601b
feat(exception): introduce BounceverseException for better error hand…
thnhmai06 Oct 26, 2025
eba320e
Fix divergence: update game systems, factories, and new PauseMenu
ManhTanTran Oct 28, 2025
240a68d
Update physics and wall logic for Ball–Brick–Paddle collisions
ManhTanTran Oct 28, 2025
30bcdad
feat(assets): Add sounds assets
thnhmai06 Oct 28, 2025
64fce02
[skip ci] chore: remove .idea/misc.xml file
thnhmai06 Oct 28, 2025
7d1ebdf
Merge branch 'dev' into fix/diverged-main
thnhmai06 Oct 28, 2025
bbbb929
[skip ci] chore: reformatting code
thnhmai06 Oct 28, 2025
12f0db1
Fix: Adjust Ball vs Wall collision logic and physics handling
ManhTanTran Oct 29, 2025
72d0790
Update: BrickFactory logic and new texture assets
ManhTanTran Oct 29, 2025
157661f
chore: temp commit before switching device (update brick logic & add …
ManhTanTran Oct 29, 2025
2218e3e
feat: add Special.java and update BrickFactory for strong & shield br…
ManhTanTran Oct 29, 2025
f762f72
feat(powerup): introduce PowerUp and these components
thnhmai06 Oct 29, 2025
0ed868c
chore(GameSystem, UndoableBehavior): clean up imports and add default…
thnhmai06 Oct 29, 2025
bf4be0a
Merge pull request #22 from CodeStormOOP/powerup
thnhmai06 Oct 29, 2025
262a5be
Merge branch 'main' into dev
thnhmai06 Oct 29, 2025
1597519
refactor: update component with new `@ForEntity` annotation
thnhmai06 Oct 29, 2025
daed1e8
feat: implement strong shield brick system
ManhTanTran Nov 1, 2025
5868b44
feat: implement user settings management system
thnhmai06 Nov 4, 2025
779354c
Merge pull request #23 from CodeStormOOP/feat/user-settings
thnhmai06 Nov 4, 2025
5e02ea9
chore: update credits.txt
thnhmai06 Nov 4, 2025
c8b7432
feat: update local changes before merge
ManhTanTran Nov 4, 2025
1338acc
feat(ui): update UISystem & integrate BackgroundColorManager
ManhTanTran Nov 4, 2025
1abddc4
Fix divergence: update game systems, factories, and new PauseMenu
ManhTanTran Oct 28, 2025
970aa30
Update physics and wall logic for Ball–Brick–Paddle collisions
ManhTanTran Oct 28, 2025
48868ae
Merge branch 'dev' into fix/diverged-main
thnhmai06 Oct 28, 2025
da286c0
[skip ci] chore: reformatting code
thnhmai06 Oct 28, 2025
4cf33c7
Fix: Adjust Ball vs Wall collision logic and physics handling
ManhTanTran Oct 29, 2025
59f2892
Update: BrickFactory logic and new texture assets
ManhTanTran Oct 29, 2025
7550af6
chore: temp commit before switching device (update brick logic & add …
ManhTanTran Oct 29, 2025
d626c94
feat: add Special.java and update BrickFactory for strong & shield br…
ManhTanTran Oct 29, 2025
bbc63e9
feat: implement strong shield brick system
ManhTanTran Nov 1, 2025
6017a9b
feat: update local changes before merge
ManhTanTran Nov 4, 2025
e977330
chore: reformatting code
thnhmai06 Nov 4, 2025
f3239a4
merge: integrate feature/strong-shield-brick with latest power-up system
ManhTanTran Nov 4, 2025
2e4d181
feat(powerup): merge and restructure power-up system
ManhTanTran Nov 5, 2025
ba959d1
Merge branch 'main' into dev
thnhmai06 Nov 5, 2025
00201fe
chore: adding "final" keyword for final class
thnhmai06 Nov 5, 2025
e4c9a5b
refactor!: Create abstract class to extends corresponding class from …
thnhmai06 Nov 5, 2025
f44a859
feat(powerup): rework PowerUp system
ManhTanTran Nov 5, 2025
7a11a3f
feat: Add Intro
thnhmai06 Nov 5, 2025
213bcdf
[skip ci] chore: Formating code
thnhmai06 Nov 5, 2025
2dcdc58
fix: fix intro video not play correctly
thnhmai06 Nov 5, 2025
d05b51f
feat: add mouse click event to trigger media playback
thnhmai06 Nov 7, 2025
f437b79
feat: add mouse click event to trigger media playback
thnhmai06 Nov 7, 2025
0a343a0
feat: enable credits
thnhmai06 Nov 7, 2025
6a63b11
feat!: Add LeaderboardManager and refactoring systems
thnhmai06 Nov 7, 2025
44d246f
refactor: rename ForEntity annotation to OnlyForEntity and update ref…
thnhmai06 Nov 7, 2025
1f7755d
feat: introduce BoundedTreeSet and Cooldown classes
thnhmai06 Nov 7, 2025
6d4d59c
feat: add Menu
thnhmai06 Nov 8, 2025
d2a6549
chore: update formatting ruleset
thnhmai06 Nov 8, 2025
77db7dc
refactor: update video asset path and loading mechanism
thnhmai06 Nov 8, 2025
6db9330
refactor: rename CanExecute and CanUndo interfaces to Executable and …
thnhmai06 Nov 8, 2025
7bda65f
Merge branch 'dev' into feature/powerup-merge
ManhTanTran Nov 8, 2025
b024a20
wip: temporary commit before switching device [skip ci]
ManhTanTran Nov 9, 2025
c31062e
Merge branch 'dev' to branch 'feature/strong-shield-brick'
thnhmai06 Nov 10, 2025
92ce587
chore: remove unnecessary file
thnhmai06 Nov 10, 2025
c440b6e
chore: reformatting Menu.java
thnhmai06 Nov 10, 2025
6647004
chore: add textures assets, downgrade formatter to 1.17.0
thnhmai06 Nov 10, 2025
9ad8070
fix: fix no texture when new game
thnhmai06 Nov 10, 2025
ba79775
feat(powerup): add Magnet & Gun power-ups and paddle attachment compo…
ManhTanTran Nov 10, 2025
b543796
fix: wrong username on UserSettingsManager
thnhmai06 Nov 10, 2025
a3eebb0
Merge pull request #24 from CodeStormOOP/feature/strong-shield-brick
thnhmai06 Nov 10, 2025
0c73954
refactor: rename Score interface and update related classes
thnhmai06 Nov 10, 2025
299026d
chore: commit tạm để chuyển máy (merge conflict PowerUpFactory)
ManhTanTran Nov 10, 2025
30a79ee
Resolve all merge conflicts in feature/powerup-merge
ManhTanTran Nov 11, 2025
7b7190e
feat(ui): add PowerUp HUD countdown display and CSS styling
ManhTanTran Nov 11, 2025
3bfdefe
chore(assets): update brick textures and new paddle/ball graphics
ManhTanTran Nov 11, 2025
46702a4
feat: add health management and UI elements for player lives and score
thnhmai06 Nov 11, 2025
56b4aec
[skip ci] feat: add heart and number assets resources
thnhmai06 Nov 11, 2025
066df51
merge: resolve all conflicts (PowerUpFactory, WallFactory, AppEventSy…
ManhTanTran Nov 11, 2025
997c3d5
refactor(assets): update paddle and brick textures; adjust related fa…
ManhTanTran Nov 11, 2025
2d10408
fix(brick): prevent NPE when hpPercent=0 and update strong brick text…
ManhTanTran Nov 11, 2025
c65bf77
fix(powerup): spawn multiple balls from original ball position instea…
ManhTanTran Nov 11, 2025
ae47152
fix(core): update gameplay components and system logic for power-up i…
ManhTanTran Nov 11, 2025
72ef373
feat: add FastNoiseLite library
thnhmai06 Nov 5, 2025
ad94d80
feat: enhance brick spawning with noise-based color selection
thnhmai06 Nov 11, 2025
75b0143
[skip ci] chore: update version numbers to 1.1.0 in gradle and settin…
thnhmai06 Nov 11, 2025
13c4eb9
feat(assets): update paddle textures
ManhTanTran Nov 12, 2025
44ebf59
feat: leaderboard
huynhtuan372 Nov 12, 2025
18d8520
refactor(paddle): replace PaddleSizeManager & PaddleTextureManager wi…
ManhTanTran Nov 12, 2025
ca1d3dc
[skip ci] chore: reformatting code
thnhmai06 Nov 12, 2025
28755b2
refactor(leaderboard): remove BlitzScore references and update leader…
thnhmai06 Nov 12, 2025
1d547cf
feat: add health management and UI elements for player lives and score
thnhmai06 Nov 11, 2025
9e4247d
[skip ci] feat: add heart and number assets resources
thnhmai06 Nov 11, 2025
fba5378
feat: add FastNoiseLite library
thnhmai06 Nov 5, 2025
b207228
feat: enhance brick spawning with noise-based color selection
thnhmai06 Nov 11, 2025
503483f
[skip ci] chore: update version numbers to 1.1.0 in gradle and settin…
thnhmai06 Nov 11, 2025
465a6e9
Merge remote-tracking branch 'origin/dev' into feature/leaderboard
thnhmai06 Nov 12, 2025
2012363
Merge pull request #26 from CodeStormOOP/feature/leaderboard
thnhmai06 Nov 12, 2025
0903a3a
feat: add DeathSubscene, fix Leaderboard and save controls settings
thnhmai06 Nov 12, 2025
7445d22
feat: implement noise-based color assignment for brick spawning and a…
thnhmai06 Nov 12, 2025
6e52770
refactor(powerup): integrate shield logic into ShieldPowerUp and remo…
ManhTanTran Nov 12, 2025
97981a8
Update README.md
huynhtuan372 Nov 12, 2025
fd52b4a
refactor: optimize color assignment logic for brick spawning
thnhmai06 Nov 12, 2025
4de32b5
Update README.md
huynhtuan372 Nov 12, 2025
224cec4
merge: resolve conflicts in core systems (Bounceverse, AppEventSystem…
ManhTanTran Nov 12, 2025
235b80a
fix: update logic and UI behavior after merge (Attachment, BrickFacto…
ManhTanTran Nov 12, 2025
96d8187
refactor: Merging with new version of code
thnhmai06 Nov 12, 2025
e263374
Merge pull request #27 from CodeStormOOP/feature/powerup-merge
thnhmai06 Nov 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/buildRelease.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
- name: Build release
run: |
chmod +x gradlew
./gradlew clean buildRelease
./gradlew clean release

- name: Upload to Release assets
uses: softprops/action-gh-release@v2
Expand Down
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ target/

### IntelliJ IDEA ###
.idea/
!.idea/misc.xml
*.iws
*.iml
*.ipr
Expand Down Expand Up @@ -53,4 +52,5 @@ bin/
**/cache/
**/prefs/

### Workspace
### Workspace
/settings.*.toml
10 changes: 0 additions & 10 deletions .idea/misc.xml

This file was deleted.

24 changes: 24 additions & 0 deletions .run/build.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="build" type="GradleRunConfiguration" factoryName="Gradle" folderName="build">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="build" />
</list>
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<RunAsTest>false</RunAsTest>
<method v="2" />
</configuration>
</component>
25 changes: 0 additions & 25 deletions .run/bytecode.run.xml

This file was deleted.

44 changes: 22 additions & 22 deletions .run/release.run.xml
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="release" type="GradleRunConfiguration" factoryName="Gradle" folderName="build">
<ExternalSystemSettings>
<option name="executionName"/>
<option name="externalProjectPath" value="$PROJECT_DIR$"/>
<option name="externalSystemIdString" value="GRADLE"/>
<option name="scriptParameters" value=""/>
<option name="taskDescriptions">
<list/>
</option>
<option name="taskNames">
<list>
<option value="buildRelease"/>
</list>
</option>
<option name="vmOptions"/>
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<RunAsTest>false</RunAsTest>
<method v="2"/>
</configuration>
<configuration default="false" name="release" type="GradleRunConfiguration" factoryName="Gradle" folderName="build">
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="release" />
</list>
</option>
<option name="vmOptions" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<RunAsTest>false</RunAsTest>
<method v="2" />
</configuration>
</component>
121 changes: 121 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# Bounceverse - A Modern Arkanoid Clone
### Báo cáo Bài tập lớn OOP

**Bounceverse** là một bản làm lại hiện đại của tựa game brick-breaker kinh điển, được xây dựng hoàn toàn bằng **Java** và game engine **FXGL**. Dự án này tập trung vào việc áp dụng kiến trúc **Entity-Component-System (ECS)** tiên tiến, được hỗ trợ bởi các nguyên tắc Lập trình Hướng đối tượng, để tạo ra một cấu trúc game linh hoạt, dễ bảo trì và mở rộng.

Game không chỉ tái hiện lối chơi gốc mà còn bổ sung nhiều tính năng nâng cao như hệ thống sinh màn chơi ngẫu nhiên, hệ thống vật phẩm (power-up) đa dạng, kỹ năng chủ động cho Paddle và các hiệu ứng "game feel" hiện đại để mang lại trải nghiệm hấp dẫn.

---

![Preview](https://s12.gifyu.com/images/b9Mf5.png)

---

## ✨ Tính năng nổi bật

Dự án Bounceverse có các tính năng nâng cao như sau:

* **Sinh màn chơi ngẫu nhiên:** Mỗi lần chơi là một trải nghiệm mới với thuật toán sinh map dựa trên `FastNoiseLite`, tạo ra các layout gạch độc đáo (`GameSystem.java`).

* **Đa dạng các loại gạch:**
* **Gạch Thường (Normal Brick):** Gạch 1 HP.
* **Gạch Cứng (Strong Brick):** Gạch nhiều HP, có hiệu ứng nứt vỡ trực quan (`StrongBrickTextureUpdater`) khi nhận sát thương.
* **Gạch Khiên (Shield Brick):** Chỉ có thể bị phá từ một hướng nhất định.
* **Gạch Nổ (Exploding Brick):** Khi bị phá hủy sẽ tạo ra một vụ nổ (`Explosion`), gây sát thương cho các gạch xung quanh.
* **Gạch Chìa khóa (Key Brick):** Luôn luôn rơi ra vật phẩm (`Power-Up`) khi bị phá hủy.

* **Hệ thống Vật phẩm (Power-Ups) phong phú:**
* `GUN`: Trang bị súng cho Paddle, tự động bắn đạn lên trên để phá gạch.
* `EXPAND_PADDLE`: Tăng kích thước thanh đỡ tạm thời.
* `SHRINK_PADDLE`: Thu nhỏ kích thước thanh đỡ tạm thời (vật phẩm bất lợi).
* `REVERSE_PADDLE`: Đảo ngược điều khiển của thanh đỡ (vật phẩm bất lợi).
* `MULTIPLE_BALL`: Nhân đôi tất cả bóng đang có trên màn hình.
* `FAST_BALL` / `SLOW_BALL`: Tăng hoặc giảm tốc độ của bóng.
* `SHIELD`: Tạo một tấm khiên ở đáy màn hình, ngăn bóng không bị rơi ra ngoài trong một thời gian.

* **Hệ thống UI/Menu hoàn chỉnh và hiện đại:**
* Menu chính và menu tạm dừng được thiết kế riêng (`scenes/Menu.java`) với hiệu ứng hạt (particle effects) và hoạt ảnh mượt mà.
* Màn hình Game Over (`DeathSubscene`) hiển thị điểm số và cho phép nhập tên nếu lọt vào top 10.
* Giao diện trong game (HUD) hiển thị điểm số và mạng sống (`Hearts`, `HorizontalPositiveInteger`).

* **Hệ thống Điểm cao (Leaderboard):**
* Sử dụng `LeaderboardManager` để tự động **lưu và tải 10 điểm số cao nhất** vào file `leaderboard.dat`.

* **Hiệu ứng & "Game Feel" nâng cao:**
* **Nền động:** Màu nền của game thay đổi mượt mà (`BackgroundColorManager`) dựa trên tiến độ phá gạch của người chơi.
* **Giao diện Synthwave:** Toàn bộ giao diện game được thiết kế với phong cách neon-synthwave độc đáo (`UISystem.java`).
* **Âm thanh:** Quản lý âm thanh đầy đủ cho các hành động trong game.

---

## 🎮 Hướng dẫn chơi

* **Mục tiêu:** Phá vỡ tất cả gạch để đạt điểm cao nhất.
* **Điều khiển:**
* `Mũi tên Trái/Phải`: Di chuyển thanh đỡ (Paddle).
* `SPACE`: Phóng bóng khi bóng đang dính vào thanh đỡ (đầu màn/sau khi mất mạng).
* `ESC`: Tạm dừng game.
* `S`: Kích hoạt kỹ năng chủ động của Paddle.
---

## 🏗 Cấu trúc dự án (Thiết kế ECS & OOP)

Dự án được xây dựng trên nền tảng game engine **FXGL**, tuân thủ chặt chẽ kiến trúc **Entity-Component-System (ECS)**, kết hợp với các nguyên tắc OOP (Đóng gói, Kế thừa, Đa hình) và các Mẫu thiết kế phần mềm (Design Patterns).

### 1. Gói `systems` (Hệ thống & Vòng đời game)
* **Bộ não của game:** Thay vì một lớp `GameManager` (God Class) khổng lồ, logic cốt lõi được chia nhỏ thành các hệ thống độc lập, kế thừa từ `InitialSystem`.
* `Bounceverse.java`: Lớp chính điều phối các vòng đời của FXGL (`initGame`, `initPhysics`, `initUI`...).
* `GameSystem`: Khởi tạo các thực thể ban đầu (gạch, paddle, bóng).
* `PhysicSystem`: Định nghĩa toàn bộ logic va chạm trong game.
* `InputSystem`: Quản lý toàn bộ input từ người chơi.
* **Mẫu thiết kế Singleton:** Các lớp System và Manager (`LeaderboardManager`, `UserSettingsManager`) được triển khai theo mẫu Singleton (sử dụng inner class `Holder`) để đảm bảo chỉ có một thực thể duy nhất và có thể truy cập toàn cục.

### 2. Gói `factory.entities` (Sản xuất Thực thể)
* **Mẫu thiết kế Factory:** Logic tạo ra các đối tượng trong game (`Entity`) được tách biệt hoàn toàn khỏi logic chính.
* Mỗi lớp (`BallFactory`, `BrickFactory`, `PaddleFactory`...) chịu trách nhiệm xây dựng một loại `Entity` cụ thể, đóng gói các components và thuộc tính cần thiết cho thực thể đó.

### 3. Gói `components` (Hành vi & Thuộc tính)
* **Trái tim của kiến trúc ECS:** Logic và dữ liệu của một `Entity` được định nghĩa bởi các `Component` mà nó chứa.
* **`Behavior` (Hành vi):** Các lớp kế thừa từ `Behavior` định nghĩa những gì một `Entity` có thể **làm**.
* `Attack.java`: Hành vi gây sát thương.
* `HealthDeath.java`: Hành vi "chết" khi hết máu.
* `PaddleShooting.java`: Hành vi bắn đạn của Paddle.
* `Explosion.java`: Hành vi nổ của gạch.
* **`Property` (Thuộc tính):** Các lớp kế thừa từ `Property` định nghĩa những **dữ liệu** mà một `Entity` có.
* `Attributes.java`: Chứa các chỉ số như phòng thủ.
* `Shield.java`: Chứa thông tin về các mặt được bảo vệ của gạch khiên.

### 4. Gói `scenes` & `ui` (Giao diện & Trải nghiệm)
* Chịu trách nhiệm về mọi thứ người chơi nhìn thấy.
* `Menu.java`: Một lớp tùy chỉnh hoàn toàn, kế thừa `FXGLMenu`, để tạo ra menu chính và menu tạm dừng với phong cách riêng.
* `ViewElement`: Lớp cơ sở cho các thành phần UI độc lập như `Hearts` (hiển thị mạng) và `HorizontalPositiveInteger` (hiển thị điểm số).

---

### Yêu cầu:
* Java JDK 24 (hoặc cao hơn).
* IDE.
* Gradle được tích hợp sẵn trong dự án.

## 🛠 Công nghệ sử dụng

* **Ngôn ngữ:** Java (Eclipse Temurin 24)
* **Framework:** **FXGL (FX Game Library)** - một game engine xây dựng trên nền tảng JavaFX.
* **Công cụ Build:** Gradle.
* **IDE:** IntelliJ IDEA / Visual Studio Code.

---

## 👨‍💻 Thành viên nhóm
| Leader Mai Hải Thành | 24021627 | [@thnhmai06](https://github.com/thnhmai06) |
| --------------------- | -------- | ------------------------------------------------ |
| Trần Mạnh Tân | 24021619 | [@ManhTanTran](https://github.com/ManhTanTran) |
| Nguyễn Huỳnh Anh Tuấn | 24021659 | [@huynhtuan372](https://github.com/huynhtuan372) |

Phân chia công việc:

| @thnhmai06 | @ManhTanTran | @huynhtuan372 |
| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| Đồng đảm nhiệm Power-up, thiết lập và quản lý các lớp cơ sở, quản lý chung project và hệ thống level. | Đảm nhiệm hệ thống vật lý, va chạm, Brick, Paddle, đồng đảm nhiệm và dẫn xuất Power-up. | Thiết kế UI và assets, các menu, leaderboard, xử lý input, hoàn thiện Ball. |

Ball được thiết lập và phát triển ban đầu bởi minngoc123.
38 changes: 25 additions & 13 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,24 @@ dependencies {
implementation 'com.github.almasb:fxgl:21.1'
implementation 'com.google.guava:guava:33.5.0-jre'
implementation 'com.moandjiezana.toml:toml4j:0.7.2'
implementation 'com.google.guava:guava:33.5.0-jre'
implementation 'com.google.auto.service:auto-service-annotations:1.1.1'
annotationProcessor 'com.google.auto.service:auto-service:1.1.1'
}

application {
mainClass = 'com.github.codestorm.bounceverse.Bounceverse'
applicationDefaultJvmArgs = [
"--enable-native-access=javafx.graphics"
"--enable-native-access=javafx.graphics",
"--enable-native-access=javafx.media",
'-Dprism.forceGPU=true',
'-Dmedia.gpu.decoder=true'
]
}

defaultTasks('run')

tasks.register('buildRelease', Jar) {
tasks.register('release', Jar) {
group = 'build'
description = "Test this project and assemble a release JAR file."

Expand All @@ -63,16 +67,24 @@ javafx {
}

spotless {
enforceCheck = false
format 'misc', {
target '*.gradle', '.gitattributes', '.gitignore'
enforceCheck = false

trimTrailingWhitespace()
leadingSpacesToTabs()
endWithNewline()
}
java {
googleJavaFormat().aosp().reflowLongStrings()
formatAnnotations()
}
format 'misc', {
target '*.gradle', '.gitattributes', '.gitignore'
trimTrailingWhitespace()
endWithNewline()
}

java {
target 'src/**/*.java'
targetExclude 'src/**/libs/**/*';

googleJavaFormat('1.17.0')
.aosp()
.reorderImports(true)
.reflowLongStrings(true)
.formatJavadoc(true)
formatAnnotations()
removeUnusedImports()
}
}
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
#
name=Bounceverse
group=com.github.codestorm
version=1.0.0-dev
version=1.1.0-dev
Loading
Loading