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
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
17 changes: 16 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
### Java
.gradle
build/
target/
Expand Down Expand Up @@ -38,4 +39,18 @@ bin/
.vscode/

### Mac OS ###
.DS_Store
.DS_Store

### FXGL
.fxgl/
system/
save/
log.txt
*.sav
*.dat
*.bin
**/cache/
**/prefs/

### Workspace
/logs/
9 changes: 9 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
@@ -1 +1 @@
rootProject.name = 'bounceverse'
rootProject.name = 'Bounceverse'
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,17 @@
import com.github.codestorm.bounceverse.factory.BrickFactory;
import javafx.scene.paint.Color;

/**
*
*
* <h1>{@link Bounceverse}</h1>
*
* Phần Hệ thống Chương trình chính của game, nơi mà mọi thứ bắt đầu...
*
* <p><i>Game {@link Bounceverse} được lấy cảm hứng từ game Arkanoid nổi tiếng, nơi người chơi điều
* khiển một thanh để đỡ bóng và phá vỡ các viên gạch. Mục tiêu của game là phá vỡ tất cả các viên
* gạch và dành được điểm số cao nhất. Nhưng liệu mọi thứ chỉ đơn giản như vậy?</i>
*/
public final class Bounceverse extends GameApplication {
public static final String name = "Bounceverse";

Expand All @@ -21,7 +32,7 @@ protected void initGame() {
FXGL.getGameWorld().addEntityFactory(new BrickFactory());

var brick1 = FXGL.spawn("normalBrick", 100, 100);
var brick2 = FXGL.spawn("normalBrick", 100, 100);
var brick2 = FXGL.spawn("normalBrick", 200, 200);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package com.github.codestorm.bounceverse.components.ball;
package com.github.codestorm.bounceverse.components._old.ball;

/**
*
*
* <h1><b>Ball</b></h1>
* <h1>{@link Ball}</h1>
*
* Ball is a player-controlled object used to hit other objects via the {@link
* com.github.codestorm.bounceverse.paddle.Paddle}. A ball has position (x, y), velocity (vx, vy),
* and a radius.
* Ball is a player-controlled object used to hit other objects via the Paddle. A ball has position
* (x, y), velocity (vx, vy), and a radius.
*
* <p>This class provides utility methods for resetting position, setting velocity, checking bounds,
* and accessing attributes. Subclasses must implement movement and bounce behaviors.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.github.codestorm.bounceverse.components.base;
package com.github.codestorm.bounceverse.components._old.base;

import com.almasb.fxgl.entity.Entity;
import com.almasb.fxgl.entity.component.Component;
import com.github.codestorm.bounceverse.data.tags.requirements.OptionalTag;

/**
*
*
* <h1><b>EntityComponent</b></h1>
* <h1>{@link EntityComponent}</h1>
*
* <p>Lớp này đại diện cho các {@link Component} chung của {@link Entity} như là một Component. Sau
* khi kế thừa, bên trong nên có các Component buộc cần phải có của Entity, đồng thời thêm Component
Expand All @@ -21,6 +22,6 @@
* inheritance</a>. Ngoài ra ta lại cần nhu cầu xác định kiểu của Entity một cách chặt chẽ nữa. Vậy
* nên, một thuộc tính kiểu trong Entity như này là cần thiết.
*
* @see com.github.codestorm.bounceverse.tags.Optional
* @see OptionalTag
*/
public abstract class EntityComponent extends Component {}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.github.codestorm.bounceverse.components.paddle;
package com.github.codestorm.bounceverse.components._old.paddle;

/** A special type of {@link Paddle} that is wider than the normal paddle. */
public class ExpendPaddle extends Paddle {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.github.codestorm.bounceverse.components.paddle;
package com.github.codestorm.bounceverse.components._old.paddle;

import java.util.ArrayList;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.github.codestorm.bounceverse.components.paddle;
package com.github.codestorm.bounceverse.components._old.paddle;

/**
* Represents the paddle controlled by the player in the game.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.github.codestorm.bounceverse.components.paddle;
package com.github.codestorm.bounceverse.components._old.paddle;

/** A special type of {@link Paddle} that is narrower than the normal paddle. */
public class ShrinkPaddle extends Paddle {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.github.codestorm.bounceverse.components.powerup;
package com.github.codestorm.bounceverse.components._old.powerup;

import com.almasb.fxgl.dsl.FXGL;
import com.almasb.fxgl.time.TimerAction;
Expand All @@ -8,7 +8,7 @@
/**
*
*
* <h1><b>PowerUp</b></h1>
* <h1>{@link PowerUp}</h1>
*
* PowerUps provide special effects and abilities to playable objects. <i>They are designed to
* update based on events (lazy-update).</i>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
package com.github.codestorm.bounceverse.components.brick.behaviors;
package com.github.codestorm.bounceverse.components.behaviors.brick;

import com.github.codestorm.bounceverse.components.base.BehaviorComponent;
import com.github.codestorm.bounceverse.components.base.EntityComponent;
import com.github.codestorm.bounceverse.tags.ForBrick;
import com.github.codestorm.bounceverse.tags.Optional;
import com.almasb.fxgl.entity.component.Component;
import com.github.codestorm.bounceverse.components._old.base.EntityComponent;
import com.github.codestorm.bounceverse.data.tags.components.BehaviorComponent;
import com.github.codestorm.bounceverse.data.tags.entities.ForBrick;
import com.github.codestorm.bounceverse.data.tags.requirements.OptionalTag;
import java.util.List;

/**
*
*
* <h1><b>BrickDrop</b></h1>
* <h1>{@link BrickDrop}</h1>
*
* Lớp này biểu diễn hành vi rơi ra vật phẩm của Viên gạch sau khi bị phá hủy.
*/
public final class BrickDrop extends BehaviorComponent implements ForBrick, Optional {
public final class BrickDrop extends Component implements BehaviorComponent, ForBrick, OptionalTag {
private List<EntityComponent> items;

/** Hành động rơi ra vật phẩm. */
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
package com.github.codestorm.bounceverse.components.brick.behaviors;
package com.github.codestorm.bounceverse.components.behaviors.brick;

import com.almasb.fxgl.dsl.FXGL;
import com.almasb.fxgl.entity.Entity;
import com.github.codestorm.bounceverse.components.base.BehaviorComponent;
import com.github.codestorm.bounceverse.components.brick.Brick;
import com.github.codestorm.bounceverse.tags.ForBrick;
import com.github.codestorm.bounceverse.tags.Optional;
import com.almasb.fxgl.entity.component.Component;
import com.github.codestorm.bounceverse.data.tags.components.BehaviorComponent;
import com.github.codestorm.bounceverse.data.tags.entities.ForBrick;
import com.github.codestorm.bounceverse.data.tags.requirements.OptionalTag;
import com.github.codestorm.bounceverse.data.types.EntityType;
import java.util.List;

/**
*
*
* <h1><b>BrickExplode</b></h1>
* <h1>{@link BrickExplode}</h1>
*
* <p>Lớp này biểu diễn hành vi nổ của viên gạch. Khi viên gạch bị phá hủy, nó sẽ kích hoạt hiệu ứng
* nổ, có thể gây sát thương đến các viên gạch xung quanh trong bán kính xác định.
*/
public final class BrickExplode extends BehaviorComponent implements ForBrick, Optional {
public final class BrickExplode extends Component
implements BehaviorComponent, ForBrick, OptionalTag {
public static final int DEFAULT_EXPLODE_RADIUS = 1;
private int explodeRadius;

Expand All @@ -32,9 +34,8 @@ private void explode() {
List<Entity> entities = FXGL.getGameWorld().getEntities();
for (var entity : entities) {
if (entity == getEntity()) continue;
if (!entity.hasComponent(Brick.class)) continue;
if (!entity.isType(EntityType.BRICK)) continue;

var brick = entity.getComponent(Brick.class);
double ex = entity.getCenter().getX();
double ey = entity.getCenter().getY();

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
package com.github.codestorm.bounceverse.components.base.properties;
package com.github.codestorm.bounceverse.components.properties;

import com.almasb.fxgl.dsl.components.HealthIntComponent;
import com.github.codestorm.bounceverse.components.base.PropertyComponent;
import com.almasb.fxgl.entity.component.Component;
import com.github.codestorm.bounceverse.data.tags.components.PropertyComponent;

/**
*
*
* <h1><b>Health</b></h1>
* <h1>{@link Health}</h1>
*
* <p>Lớp này đại diện cho thuộc tính HP của Entity. Khi HP về 0, Entity sẽ bị xóa khỏi thế giới.
*/
public abstract class Health extends PropertyComponent {
public abstract class Health extends Component implements PropertyComponent {
private final HealthIntComponent health;

public Health(int maxHealth) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package com.github.codestorm.bounceverse.components.base.properties;
package com.github.codestorm.bounceverse.components.properties;

import com.github.codestorm.bounceverse.components.base.PropertyComponent;
import com.almasb.fxgl.entity.component.Component;
import com.github.codestorm.bounceverse.data.tags.components.PropertyComponent;
import com.github.codestorm.bounceverse.data.types.Side;
import com.github.codestorm.bounceverse.tags.Optional;
import java.util.Arrays;
import java.util.HashSet;

/**
*
*
* <h1><b>Shield</b></h1>
* <h1>{@link Shield}</h1>
*
* <p>Lớp này đại diện cho Khiên bảo vệ Entity. Khiên có thể bảo vệ Entity từ một hoặc nhiều phía
* khỏi bị tấn công.
*/
public abstract class Shield extends PropertyComponent implements Optional {
public abstract class Shield extends Component implements PropertyComponent {
private HashSet<Side> sides = new HashSet<>();

public HashSet<Side> getSides() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package com.github.codestorm.bounceverse.components.brick.properties;
package com.github.codestorm.bounceverse.components.properties.brick;

import com.github.codestorm.bounceverse.components.base.properties.Health;
import com.github.codestorm.bounceverse.tags.ForBrick;
import com.almasb.fxgl.entity.component.CoreComponent;
import com.github.codestorm.bounceverse.components.properties.Health;
import com.github.codestorm.bounceverse.data.tags.entities.ForBrick;
import com.github.codestorm.bounceverse.data.tags.requirements.RequiredTag;

/**
*
*
* <h1><b>BrickHealth</b></h1>
* <h1>{@link BrickHealth}</h1>
*
* <p>Lớp này đại diện cho thuộc tính HP của Viên gạch.
*/
public final class BrickHealth extends Health implements ForBrick {
@CoreComponent
public final class BrickHealth extends Health implements ForBrick, RequiredTag {
public BrickHealth(int maxHealth) {
super(maxHealth);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package com.github.codestorm.bounceverse.components.brick.properties;
package com.github.codestorm.bounceverse.components.properties.brick;

import com.github.codestorm.bounceverse.components.base.properties.Shield;
import com.github.codestorm.bounceverse.components.properties.Shield;
import com.github.codestorm.bounceverse.data.tags.entities.ForBrick;
import com.github.codestorm.bounceverse.data.tags.requirements.OptionalTag;
import com.github.codestorm.bounceverse.data.types.Side;
import com.github.codestorm.bounceverse.tags.ForBrick;

/**
*
*
* <h1><b>BrickShield</b></h1>
* <h1>{@link BrickShield}</h1>
*
* <p>Lớp này đại diện cho Khiên bảo vệ Viên gạch.
*/
public final class BrickShield extends Shield implements ForBrick {
public final class BrickShield extends Shield implements ForBrick, OptionalTag {
private static final int BONUS_SCORE = 20;

public BrickShield() {}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.github.codestorm.bounceverse.data.tags;

/**
*
*
* <h1>{@link ComponentTag}</h1>
*
* <p>Các nhãn về loại của {@link com.almasb.fxgl.entity.component.Component} trong game.
*
* <p>Đọc thêm tài liệu về Component ở <a
* href="https://github.com/AlmasB/FXGL/wiki/Entity-Component-%28FXGL-11%29">đây</a>.
*/
public non-sealed interface ComponentTag extends Tag {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.github.codestorm.bounceverse.data.tags;

/**
*
*
* <h1>{@link EntityTag}</h1>
*
* <p>Các nhãn về loại của {@link com.almasb.fxgl.entity.Entity} trong game.
*
* <p>Đọc thêm tài liệu về Entity ở <a
* href="https://github.com/AlmasB/FXGL/wiki/Entity-Component-%28FXGL-11%29">đây</a>.
*/
public non-sealed interface EntityTag extends Tag {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.github.codestorm.bounceverse.data.tags;

/**
*
*
* <h1>{@link RequirementTag}</h1>
*
* <p>Các nhãn về tính yêu cầu phải có hay không của {@link
* com.almasb.fxgl.entity.component.Component} trong Entity.
*/
public non-sealed interface RequirementTag extends Tag {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.github.codestorm.bounceverse.data.tags;

/**
*
*
* <h1>{@link Tag}</h1>
*
* <p>Tag cho class, được dùng để đánh dấu class theo tính chất. Thường được sử dụng thông qua
* generic.
*/
public sealed interface Tag permits ComponentTag, EntityTag, RequirementTag {}
Loading
Loading