OOP ĐẠI CHIẾN — AI OOP ARENA

publicv1
28d ago
4 views0 comments0 reviews23 min read
raw .md ↗

Tên đề tài: OOP Đại Chiến – Ai Là Người Giỏi Nhất? Tên tiếng Anh: OOP Arena – The Battle of Object-Oriented Programming Nền tảng: Desktop Application Ngôn ngữ: Java GUI: JavaFX CSDL: SQLite Mô hình: Object-Oriented Design + MVC/MVVM-inspired architecture AI: Adaptive Gameplay AI dựa trên phân tích hành vi và dự đoán pattern Đối tượng: Sinh viên học Lập trình hướng đối tượng


CHƯƠNG 1. GIỚI THIỆU ĐỀ TÀI

Lập trình hướng đối tượng (Object-Oriented Programming – OOP) là một trong những nền tảng quan trọng trong quá trình đào tạo sinh viên ngành Công nghệ thông tin và Khoa học máy tính.

Các khái niệm như:

  • Class
  • Object
  • Encapsulation
  • Abstraction
  • Inheritance
  • Polymorphism
  • Interface
  • Generic
  • Exception

có tính trừu tượng tương đối cao đối với sinh viên mới bắt đầu học.

Phương pháp học truyền thống chủ yếu dựa trên:

  • đọc lý thuyết;
  • xem ví dụ code;
  • vẽ UML;
  • làm bài tập;
  • sửa lỗi chương trình.

Cách tiếp cận này giúp sinh viên hiểu cú pháp và nguyên lý, nhưng chưa thực sự tạo ra môi trường để sinh viên trực tiếp trải nghiệm mối quan hệ giữa các khái niệm OOP.

Ví dụ, khi học về polymorphism, sinh viên có thể hiểu:

Animal animal = new Dog();
animal.makeSound();

nhưng việc hiểu tại sao polymorphism hữu ích và nó tạo ra lợi ích gì trong một hệ thống thực tế thường khó hơn.

Từ vấn đề đó, đề tài OOP Đại Chiến – OOP Arena được xây dựng với ý tưởng biến các khái niệm OOP thành những nhân vật có khả năng chiến đấu.

Ví dụ:

Khái niệm OOPNhân vật
EncapsulationShield Knight
InheritanceMutant Warrior
PolymorphismShapeshifter
AbstractionAbstract Mage
InterfaceConnector
GenericTemplate Wizard
ExceptionError Handler

Ngược lại, các lỗi lập trình trở thành kẻ địch:

BugBoss
NullPointerExceptionNull Beast
StackOverflowErrorStack Demon
Infinite LoopLoop Hydra
ClassCastExceptionCast Monster
RuntimeExceptionRuntime Boss

Qua đó, kiến thức OOP được chuyển từ dạng khái niệm trừu tượng thành một hệ thống tương tác trực quan.


#1.2.1 Mục tiêu tổng quát

Xây dựng một ứng dụng game giáo dục bằng Java giúp sinh viên:

  • làm quen với tư duy hướng đối tượng;
  • nhận biết vai trò của các nguyên lý OOP;
  • thực hành inheritance, abstraction, encapsulation và polymorphism;
  • hiểu exception và generic;
  • quan sát trực quan quan hệ giữa các class;
  • học thông qua gameplay thay vì chỉ đọc lý thuyết.

Đồng thời, hệ thống áp dụng AI thích nghi để tạo ra trải nghiệm chơi khác nhau dựa trên hành vi của người chơi.


#1.2.2 Mục tiêu cụ thể

Hệ thống hướng tới các mục tiêu:

  1. Xây dựng game chiến đấu theo lượt.
  2. Mỗi nhân vật đại diện cho một khái niệm OOP.
  3. Xây dựng hệ thống kỹ năng dựa trên nguyên lý OOP.
  4. Xây dựng hệ thống Bug/Boss.
  5. Xây dựng AI điều khiển Boss.
  6. AI phân tích hành vi người chơi.
  7. AI thay đổi chiến thuật dựa trên dữ liệu thu thập.
  8. Xây dựng giao diện JavaFX.
  9. Lưu trữ người chơi, trận đấu và thống kê.
  10. Thể hiện rõ các nguyên lý OOP trong chính kiến trúc phần mềm.

#Trong phạm vi

  • Game desktop.
  • Single player.
  • Battle theo lượt.
  • Nhiều loại nhân vật.
  • Nhiều loại Bug.
  • Boss AI.
  • Hệ thống skill.
  • Level/progression.
  • Statistics.
  • Tutorial.
  • Class relationship visualization.
  • Database local.
  • UML/Class Diagram.
  • AI thích nghi.

#Ngoài phạm vi MVP

  • Multiplayer online.
  • Payment.
  • Cloud account.
  • PvP realtime.
  • Open-world.
  • Generative AI.
  • Voice assistant.
  • LLM chatbot.

1.3 Định hướng giải pháp

Hệ thống được xây dựng theo hướng:

                 OOP KNOWLEDGE
                       │
                       ↓
              ┌─────────────────┐
              │   OOP CHARACTERS│
              └────────┬────────┘
                       │
                       ↓
              ┌─────────────────┐
              │  BATTLE ENGINE  │
              └────────┬────────┘
                       │
             ┌─────────┴─────────┐
             ↓                   ↓
       PLAYER ACTION          BUG AI
             │                   │
             └─────────┬─────────┘
                       ↓
               ADAPTIVE AI
                       │
                       ↓
               BATTLE RESULT
                       │
                       ↓
                  DATABASE

AI không sinh câu trả lời bằng ngôn ngữ tự nhiên.

Thay vào đó:

Player Actions
      ↓
Behavior Tracking
      ↓
Pattern Analysis
      ↓
Prediction
      ↓
AI Decision
      ↓
Enemy Action

Ví dụ người chơi liên tục sử dụng:

Attack → Attack → Defense → Attack → Attack

AI phát hiện người chơi có xu hướng ưu tiên Attack.

Ở lượt tiếp theo, Boss có thể chuyển sang chiến thuật:

Counter / Defense / Punish

Nếu người chơi thay đổi:

Defense → Skill → Defense → Skill

AI tiếp tục cập nhật mô hình.

#AI không phải "độ khó cố định"

Đây là điểm quan trọng.

Thay vì:

Easy
Normal
Hard

hệ thống hướng tới:

Easy ────────→ Adaptive ────────→ Hard
                  ↑
                  │
          Player behavior

Boss tự điều chỉnh.


1.4 Bố cục đồ án

Đồ án gồm 6 chương chính:

  • Chương 1: Giới thiệu đề tài.
  • Chương 2: Khảo sát và phân tích yêu cầu.
  • Chương 3: Nền tảng lý thuyết và công nghệ.
  • Chương 4: Phân tích thiết kế, triển khai và đánh giá hệ thống.
  • Chương 5: Các giải pháp và đóng góp nổi bật.
  • Chương 6: Kết luận và hướng phát triển.

Ngoài ra gồm:

  • Tài liệu tham khảo.
  • Phụ lục.
  • Đặc tả Use Case.

CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU

2.1 Khảo sát hiện trạng

Sinh viên học OOP thường gặp ba vấn đề chính.

#Vấn đề 1 — Kiến thức trừu tượng

Các khái niệm:

Class
Object
Abstraction
Inheritance
Polymorphism
Interface

khó hình dung khi chỉ học qua slide/code.

#Vấn đề 2 — Học lý thuyết thiếu phản hồi trực tiếp

Sinh viên có thể viết:

class Animal {}
class Dog extends Animal {}

nhưng chưa chắc hiểu rõ tại sao inheritance và polymorphism được sử dụng.

#Vấn đề 3 — Thiếu động lực

Các bài tập OOP thường có cấu trúc:

Đề bài
↓
Code
↓
Compile
↓
Output

Trong khi game có:

Action
↓
Consequence
↓
Feedback
↓
Strategy
↓
Reward

OOP Arena tận dụng cơ chế thứ hai để biến kiến thức thành trải nghiệm.


2.2 Tổng quan chức năng

Các chức năng chính:

  1. Quản lý người chơi.
  2. Tutorial OOP.
  3. Chọn nhân vật.
  4. Xem thông tin nhân vật.
  5. Xem kỹ năng.
  6. Battle.
  7. AI Enemy.
  8. Boss Battle.
  9. OOP Quiz Battle.
  10. Xem class relationship.
  11. Xem lịch sử trận đấu.
  12. Xem thống kê.
  13. Lưu tiến trình.
  14. Settings.

2.2.1 Biểu đồ Use Case tổng quát

Có thể biểu diễn đầy đủ hơn bằng Use Case UML:

                 ┌──────────────────────┐
                 │      OOP ARENA       │
                 │                      │
Player ──────────┤ Manage Profile       │
                 │                      │
Player ──────────┤ Learn OOP            │
                 │                      │
Player ──────────┤ Select Character     │
                 │                      │
Player ──────────┤ Start Battle         │
                 │        │             │
                 │        ↓             │
                 │   Adaptive AI        │
                 │                      │
Player ──────────┤ Use Skill            │
                 │                      │
Player ──────────┤ Answer Quiz          │
                 │                      │
Player ──────────┤ View Statistics      │
                 └──────────────────────┘

2.2.2 Biểu đồ Use Case phân rã — Battle

Use Case lớn:

UC-B01: Battle

được phân rã thành:

Start Battle
     │
     ├── Select Character
     │
     ├── Initialize Battle
     │
     ├── Player Turn
     │      ├── Normal Attack
     │      ├── Use Skill
     │      ├── Defense
     │      └── Special Action
     │
     ├── AI Turn
     │      ├── Analyze Behavior
     │      ├── Predict Action
     │      └── Select Counter
     │
     ├── Calculate Damage
     │
     ├── Check Status
     │
     └── End Battle

2.2.3 Quy trình nghiệp vụ

Mở ứng dụng
      ↓
Main Menu
      ↓
Chọn Battle
      ↓
Chọn Character
      ↓
Chọn Enemy
      ↓
Khởi tạo Battle
      ↓
Player Turn
      ↓
Player Action
      ↓
Record Behavior
      ↓
AI Analysis
      ↓
AI Action
      ↓
Calculate Result
      ↓
Check HP
   ↙       ↘
HP > 0    HP = 0
  ↓          ↓
Next Turn   End Battle
             ↓
        Save Statistics

2.3 Đặc tả chức năng

#Tên

UC-B01 – Start Battle

#Actor

Player.

#Mục tiêu

Cho phép người chơi bắt đầu một trận đấu với Bug/Boss.

#Preconditions

  • Ứng dụng đang hoạt động.
  • Người chơi đã chọn nhân vật.
  • Có enemy hợp lệ.

#Main Flow

  1. Người chơi chọn Battle.
  2. Hệ thống hiển thị danh sách character.
  3. Người chơi chọn character.
  4. Hệ thống hiển thị enemy.
  5. Người chơi chọn enemy.
  6. Hệ thống khởi tạo Battle.
  7. Hệ thống tạo các object tương ứng.
  8. Battle Engine bắt đầu.
  9. Người chơi thực hiện action.
  10. AI xử lý lượt của enemy.
  11. Hệ thống tính toán kết quả.
  12. Trận đấu tiếp tục cho đến khi một bên bị đánh bại.

#Alternative Flow

Nếu người chơi không đủ điều kiện mở khóa character:

Character Locked
      ↓
Display Requirement
      ↓
Return Character Selection

#Postconditions

  • Battle kết thúc.
  • Kết quả được lưu.
  • Statistics được cập nhật.

2.3.2 Đặc tả Use Case B — AI thích nghi

#Tên

UC-AI01 – Adaptive Enemy Behavior

#Actor

Adaptive AI.

#Mục tiêu

Phân tích hành vi người chơi và lựa chọn chiến thuật phù hợp.

#Input

Player Action
Current HP
Enemy HP
Available Skills
Previous Actions
Turn Number
Battle State

#Process

Collect Data
      ↓
Build Behavior Profile
      ↓
Calculate Action Probability
      ↓
Predict Next Action
      ↓
Evaluate Counter Actions
      ↓
Select Best Action
      ↓
Execute

#Output

Một action:

ATTACK
DEFEND
SPECIAL
COUNTER
HEAL

2.4 Yêu cầu phi chức năng

  • Thời gian phản hồi UI < 200 ms đối với các thao tác thông thường.
  • AI decision không gây treo giao diện.
  • Battle engine xử lý realtime theo lượt.
  • Giao diện trực quan.
  • Các skill có icon và mô tả.
  • Người chơi có thể hiểu chức năng mà không cần đọc tài liệu kỹ thuật.
  • Không crash khi nhập dữ liệu không hợp lệ.
  • Exception phải được xử lý.
  • Battle state phải nhất quán.

Code phải:

  • chia package;
  • tuân thủ OOP;
  • hạn chế coupling;
  • sử dụng interface/abstraction;
  • có unit test.

Ứng dụng chạy được trên các hệ điều hành hỗ trợ Java.

Có thể thêm:

New Character
New Skill
New Boss
New Game Mode
New AI Strategy

mà không cần sửa toàn bộ hệ thống.


CHƯƠNG 3. NỀN TẢNG LÝ THUYẾT VÀ CÔNG NGHỆ SỬ DỤNG

3.1 Lập trình hướng đối tượng

Hệ thống áp dụng bốn nguyên lý chính:

#Encapsulation

Thông tin HP không được thay đổi trực tiếp:

public class Character {
    private int hp;

    public int getHp() {
        return hp;
    }

    public void takeDamage(int damage) {
        if (damage < 0) {
            throw new IllegalArgumentException();
        }

        hp = Math.max(0, hp - damage);
    }
}

#Abstraction

public abstract class Character {
    public abstract void performAction();
}

#Inheritance

Character
   │
   ├── EncapsulationHero
   ├── InheritanceHero
   ├── PolymorphismHero
   └── InterfaceHero

#Polymorphism

Character character;

character = new EncapsulationHero();
character.attack();

character = new PolymorphismHero();
character.attack();

Cùng một interface nhưng hành vi khác nhau.


3.2 UML

Sử dụng:

  • Use Case Diagram
  • Class Diagram
  • Sequence Diagram
  • Activity Diagram
  • Package Diagram

Đặc biệt Class Diagram là thành phần quan trọng để chứng minh hệ thống được thiết kế theo OOP.


3.3 Java

Java được lựa chọn vì:

  • hỗ trợ OOP mạnh;
  • static typing;
  • inheritance;
  • interface;
  • abstract class;
  • generic;
  • exception;
  • collection framework;
  • ecosystem lớn;
  • phù hợp trực tiếp với nội dung môn học.

3.4 JavaFX

JavaFX được sử dụng để xây dựng:

  • Main Menu;
  • Character Selection;
  • Battle Arena;
  • Health Bar;
  • Skill Panel;
  • Quiz;
  • Statistics;
  • Class Diagram Viewer.

3.5 SQLite

SQLite được sử dụng vì:

  • miễn phí;
  • mã nguồn mở;
  • không cần database server;
  • phù hợp ứng dụng desktop;
  • dễ triển khai.

3.6 AI thích nghi

Hệ thống không sử dụng ChatGPT/LLM để sinh text.

AI nằm trực tiếp trong gameplay.


Mỗi action của người chơi được ghi nhận:

public enum ActionType {
    ATTACK,
    DEFEND,
    SKILL,
    HEAL
}

Ví dụ:

Turn 1 → ATTACK
Turn 2 → ATTACK
Turn 3 → SKILL
Turn 4 → ATTACK
Turn 5 → DEFEND

Hệ thống thống kê:

Attack: 60%
Skill: 20%
Defense: 15%
Heal: 5%

AI có thể phát hiện:

Player có xu hướng tấn công trực tiếp.

Sau đó ưu tiên counter.


Có thể sử dụng transition matrix:

             Next Action

          A       D       S       H

A       0.60    0.10    0.20    0.10
D       0.20    0.50    0.20    0.10
S       0.40    0.10    0.40    0.10
H       0.30    0.20    0.10    0.40

Nếu hành động hiện tại là ATTACK, AI dự đoán:

ATTACK = 60%
SKILL  = 20%
DEFEND = 10%
HEAL   = 10%

AI sẽ lựa chọn counter tương ứng.


AI cũng theo dõi:

Player Win Rate
Damage Dealt
Damage Received
Average Turn
Skill Usage
Defense Rate

Nếu người chơi thắng quá dễ:

Difficulty ↑

Nếu người chơi thua liên tục:

Difficulty ↓

Điều này tạo ra trải nghiệm:

AI không chỉ đánh người chơi — AI học cách người chơi đánh.


CHƯƠNG 4. PHÂN TÍCH THIẾT KẾ, TRIỂN KHAI VÀ ĐÁNH GIÁ HỆ THỐNG

4.1 Thiết kế kiến trúc

4.1.1 Lựa chọn kiến trúc phần mềm

Đề xuất sử dụng kiến trúc Layered + MVC/MVVM-inspired.

┌─────────────────────────────┐
│        Presentation         │
│          JavaFX             │
├─────────────────────────────┤
│        Application          │
│      Controllers            │
├─────────────────────────────┤
│          Domain             │
│ Characters / Battle / AI    │
├─────────────────────────────┤
│       Infrastructure        │
│ SQLite / Repository         │
└─────────────────────────────┘

Mục tiêu là tách:

UI ≠ Game Logic ≠ AI ≠ Database

4.1.2 Thiết kế tổng quan

                    JavaFX UI
                        │
                        ↓
                  Controllers
                        │
            ┌───────────┼───────────┐
            ↓           ↓           ↓
       BattleService  QuizService  PlayerService
            │
            ↓
        BattleEngine
            │
      ┌─────┴─────┐
      ↓           ↓
 Player         Enemy
      │           │
      │        AdaptiveAI
      │           │
      └─────┬─────┘
            ↓
       ResultService
            ↓
       Repository
            ↓
         SQLite

4.1.3 Thiết kế chi tiết gói

Đề xuất cấu trúc:

src/main/java/com/ooparena/
│
├── app/
│   └── OOPArenaApplication.java
│
├── controller/
│   ├── MainController.java
│   ├── BattleController.java
│   ├── CharacterController.java
│   ├── QuizController.java
│   └── StatisticsController.java
│
├── model/
│   ├── character/
│   ├── enemy/
│   ├── battle/
│   ├── skill/
│   ├── quiz/
│   └── player/
│
├── ai/
│   ├── AdaptiveAI.java
│   ├── BehaviorTracker.java
│   ├── PatternAnalyzer.java
│   ├── ActionPredictor.java
│   └── DifficultyManager.java
│
├── service/
│   ├── BattleService.java
│   ├── PlayerService.java
│   ├── QuizService.java
│   └── StatisticsService.java
│
├── repository/
│   ├── PlayerRepository.java
│   ├── BattleRepository.java
│   └── StatisticsRepository.java
│
├── database/
│   ├── DatabaseManager.java
│   └── SchemaInitializer.java
│
├── exception/
│   ├── InvalidActionException.java
│   ├── CharacterLockedException.java
│   └── BattleStateException.java
│
├── util/
│   ├── RandomUtils.java
│   └── ValidationUtils.java
│
└── view/
    └── ...

4.2 Thiết kế chi tiết

4.2.1 Thiết kế giao diện

╔════════════════════════════════════╗
║          OOP ĐẠI CHIẾN             ║
║                                    ║
║          ⚔ PLAY BATTLE             ║
║                                    ║
║          📚 OOP ACADEMY            ║
║                                    ║
║          🧬 CLASS LAB              ║
║                                    ║
║          📊 STATISTICS             ║
║                                    ║
║          ⚙ SETTINGS                ║
╚════════════════════════════════════╝

┌─────────────────────────────────────────┐
│ SELECT YOUR OOP HERO                    │
├────────────┬────────────┬───────────────┤
│ 🛡️         │ 🧬         │ 🎭             │
│ Encapsulate │ Inheritance│ Polymorphism  │
│             │            │               │
│ DEFENSE 95  │ ATK 90     │ SPEED 95      │
│             │            │               │
│ [SELECT]    │ [SELECT]   │ [SELECT]      │
└────────────┴────────────┴───────────────┘

Màn hình 3 — Battle Arena

┌───────────────────────────────────────────┐
│               BOSS BATTLE                 │
│                                           │
│     PLAYER                  BOSS           │
│                                           │
│   🛡️ HERO               💀 NULL BEAST     │
│   ██████████             ████████         │
│   HP 100/100              HP 150/150      │
│                                           │
│              TURN 05                      │
│                                           │
│ ┌────────┐ ┌────────┐ ┌────────┐          │
│ │ ATTACK │ │ SKILL  │ │ DEFEND │          │
│ └────────┘ └────────┘ └────────┘          │
│                                           │
│ AI ANALYSIS: ████████                     │
└───────────────────────────────────────────┘

Màn hình 4 — AI Analysis

Có thể có một panel phụ:

┌───────────────────────────┐
│ AI BEHAVIOR ANALYSIS      │
├───────────────────────────┤
│ Attack       ███████ 65%  │
│ Skill        ███      20% │
│ Defense      ██       10% │
│ Heal         █         5% │
│                           │
│ Predicted: ATTACK         │
│ Confidence: 65%           │
└───────────────────────────┘

Lưu ý: Khi thi thật, panel này có thể được ẩn hoặc chỉ xuất hiện sau trận để tránh làm lộ chiến thuật AI.


4.2.2 Thiết kế lớp

Class diagram lõi:


4.2.3 Thiết kế cơ sở dữ liệu

SQLite database:

oop_arena.db
Player
------------------
id
username
level
experience
created_at
Character
------------------
id
name
type
hp
attack
defense
unlocked
Battle
------------------
id
player_id
character_id
enemy_id
result
turn_count
damage_dealt
damage_taken
started_at
ended_at
ActionHistory
------------------
id
battle_id
turn_number
actor
action_type
timestamp
Skill
------------------
id
name
type
damage
cooldown
description

Quan hệ:

Player
  │
  └────< Battle
             │
             ├──── Character
             │
             ├──── Enemy
             │
             └────< ActionHistory

4.3 Xây dựng ứng dụng

4.3.1 Thư viện và công cụ sử dụng

#Ngôn ngữ

Java

#GUI

JavaFX

#Build

Maven

#Database

SQLite

#Version Control

Git + GitHub

#IDE

IntelliJ IDEA / VS Code / Eclipse

#Testing

JUnit

#UML

Có thể sử dụng:

  • PlantUML
  • draw.io
  • StarUML

#AI

Không yêu cầu API trả phí.

AI có thể được xây dựng hoàn toàn bằng Java:

BehaviorTracker
+
PatternAnalyzer
+
ActionPredictor
+
DifficultyManager

Điều này rất phù hợp với tiêu chí:

Không sử dụng công nghệ mất phí.


4.3.2 Kết quả đạt được

MVP dự kiến có:

#Character

  • Encapsulation
  • Inheritance
  • Polymorphism
  • Abstraction
  • Interface

#Enemy

  • NullPointerException Boss
  • InfiniteLoop Boss
  • ClassCastException Boss
  • StackOverflow Boss

#Game modes

Training Mode

Học từng concept.

Battle Mode

Đánh Bug.

Boss Mode

Đánh Boss có AI.

Quiz Battle

Trả lời câu hỏi OOP để gây damage.

Class Lab

Xem class/object/UML trực quan.


4.3.3 Minh họa các chức năng chính

Character
     ↓
Choose Skill
     ↓
Battle Engine
     ↓
Damage Calculation
     ↓
Enemy Reaction

Ví dụ:

╔══════════════════════════════════╗
║          QUIZ ATTACK             ║
╠══════════════════════════════════╣
║ Which concept hides internal     ║
║ implementation details?          ║
║                                  ║
║ A. Inheritance                   ║
║ B. Encapsulation                 ║
║ C. Polymorphism                  ║
║ D. Generic                       ║
╚══════════════════════════════════╝

Đúng:

+30 DAMAGE

Sai:

-10 HP

Như vậy kiến thức trực tiếp ảnh hưởng tới gameplay.


Feature 3 — Class Lab

Người chơi chọn:

Polymorphism

Hệ thống hiển thị:

        Character
            ▲
     ┌──────┼──────┐
     │      │      │
    Dog    Cat    Bird
     │      │      │
   bark() meow() sing()

Có thể click từng class để xem:

Attributes
Methods
Inheritance
Override
Interface

Feature 4 — Adaptive Boss

Ví dụ người chơi:

Turn 1 ATTACK
Turn 2 ATTACK
Turn 3 ATTACK
Turn 4 ATTACK

AI:

Attack probability = 82%

→ Boss switches to Counter Mode

Người chơi nhận ra:

"Boss đang bắt bài mình."

Đây chính là hook để tạo wow moment trong demo.


4.4 Kiểm thử

Test:

  • Character damage.
  • Skill.
  • HP.
  • Cooldown.
  • AI prediction.
  • Difficulty.
  • Quiz validation.

Ví dụ:

@Test
void characterCannotHaveNegativeHp() {
    Character hero = new EncapsulationHero();

    hero.takeDamage(9999);

    assertEquals(0, hero.getHp());
}

Input:

ATTACK
ATTACK
ATTACK
ATTACK
ATTACK

Expected:

Predicted action = ATTACK

Input:

DEFEND
DEFEND
DEFEND
DEFEND

Expected:

Predicted action = DEFEND

Kiểm tra:

UI
 ↓
Controller
 ↓
BattleService
 ↓
BattleEngine
 ↓
AI
 ↓
Repository
 ↓
Database

4.5 Triển khai

MVP có thể đóng gói thành:

OOP-Arena/
├── oop-arena.jar
├── config/
├── database/
│   └── oop_arena.db
└── README.md

Người dùng cài Java Runtime phù hợp và chạy:

java -jar oop-arena.jar

Trong phiên bản hoàn thiện có thể đóng gói native application cho Windows.


CHƯƠNG 5. CÁC GIẢI PHÁP VÀ ĐÓNG GÓP NỔI BẬT

Đây là chương rất quan trọng đối với hackathon.

Không nên chỉ nói:

"Ứng dụng có CRUD và JavaFX."

Phải nhấn mạnh các điểm khác biệt.


5.1 Biến OOP thành gameplay

Thay vì:

OOP → textbook → code

hệ thống sử dụng:

OOP
 ↓
Character
 ↓
Skill
 ↓
Battle
 ↓
Consequence

Ví dụ:

Polymorphism không còn là một đoạn code trong slide mà trở thành một nhân vật có khả năng thay đổi hành vi trong trận đấu.


5.2 AI không phải chatbot

Một điểm nổi bật:

AI được dùng để điều khiển gameplay thay vì sinh nội dung văn bản.

AI quan sát:

Player behavior

và tạo:

Adaptive enemy behavior

Điều này khiến AI trở thành một phần thực sự của sản phẩm, thay vì một chatbot được gắn thêm để "có AI".


5.3 AI tạo trải nghiệm cá nhân hóa

Hai người chơi khác nhau sẽ có thể gặp Boss khác nhau.

#Player A

Aggressive
Attack-heavy

→ Boss thiên về Counter.

#Player B

Defensive
Skill-heavy

→ Boss thay đổi chiến thuật.

Do đó:

Cùng một Boss nhưng gameplay không hoàn toàn giống nhau.


5.4 Gamification

Kiến thức OOP được đưa vào:

  • HP
  • Damage
  • Skill
  • Level
  • XP
  • Boss
  • Achievement
  • Combo
  • Quiz

Ví dụ:

+50 XP
Unlocked: POLYMORPHISM

5.5 "OOP trong OOP"

Đây là điểm mình đặc biệt khuyến nghị nhấn mạnh khi thuyết trình.

Ứng dụng dạy OOP bằng một hệ thống được xây dựng bằng OOP.

Ví dụ:

Game Character
      ↓
Abstract Class
      ↓
Inheritance
      ↓
Override
      ↓
Polymorphism

Trong khi chính source code của game cũng sử dụng:

Abstract Class
Inheritance
Encapsulation
Polymorphism
Interface
Generic
Exception
Collection

Nói cách khác:

Sản phẩm vừa là công cụ học OOP, vừa là một case study về cách xây dựng phần mềm hướng đối tượng.


5.6 Mapping toàn bộ kiến thức môn học

Đây là bảng rất đáng đưa vào slide/demo:

ChươngTrong OOP Arena
Chương 1Tổng quan hệ thống
Chương 2Java + UML
Chương 3Encapsulation
Chương 4Constructor + Object
Chương 5Overloading + static
Chương 6Aggregation + Inheritance
Chương 7Abstract + Interface + Override
Chương 8Polymorphism
Chương 9Generic + Collection
Chương 10Exception
Chương 11JavaFX
Chương 12Class Diagram + OO Design
Chương 13SOLID + Design Pattern

Như vậy sản phẩm không phải game Java đơn thuần.

Nó là một hệ thống tích hợp gần như toàn bộ nội dung môn học.


5.7 Áp dụng SOLID

Ví dụ:

BattleEngine

không nên trực tiếp biết cách AI dự đoán.

Thay vào đó:

public interface EnemyStrategy {
    Action chooseAction(BattleState state);
}

Có:

RandomStrategy
AggressiveStrategy
DefensiveStrategy
AdaptiveStrategy

Battle Engine chỉ biết:

EnemyStrategy strategy;

→ dễ mở rộng.

Đây là cách đưa Design Pattern + SOLID vào chương nâng cao.


5.8 Design Pattern

Có thể áp dụng:

#Strategy Pattern

Cho AI:

EnemyStrategy
├── RandomStrategy
├── AggressiveStrategy
├── DefensiveStrategy
└── AdaptiveStrategy

#Factory Pattern

Tạo character:

CharacterFactory.create("POLYMORPHISM");

#Observer Pattern

Theo dõi:

HP changed
Battle state changed
Turn changed

#Repository Pattern

Tách database khỏi business logic.

Đây sẽ là điểm cộng kỹ thuật lớn.


CHƯƠNG 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

6.1 Kết luận

Đề tài OOP Đại Chiến – OOP Arena hướng tới giải quyết vấn đề học các khái niệm lập trình hướng đối tượng theo phương pháp trực quan và tương tác.

Hệ thống chuyển đổi các khái niệm:

Class
Object
Inheritance
Abstraction
Encapsulation
Polymorphism
Interface
Exception
Generic

thành các thành phần gameplay.

Bên cạnh đó, hệ thống sử dụng Adaptive AI để phân tích hành vi của người chơi và điều chỉnh chiến thuật của đối thủ.

Điểm khác biệt của đề tài nằm ở việc AI không được sử dụng như một chatbot thông thường mà được tích hợp trực tiếp vào cơ chế ra quyết định của game.

Đồng thời, chính phần mềm cũng được thiết kế theo các nguyên lý OOP mà nó giảng dạy.


6.2 Hướng phát triển

Player vs Player
Global OOP Ranking

Có thể thay Markov-based prediction bằng:

  • Decision Tree;
  • Reinforcement Learning;
  • Q-Learning;
  • contextual bandit;
  • machine learning model.

Tạo Boss với:

Random abilities
Random weaknesses
Random patterns
Chapter 1
   ↓
Chapter 2
   ↓
...
Chapter 13

Mỗi chapter mở khóa một cơ chế.

Giáo viên có thể:

  • tạo quiz;
  • xem kết quả;
  • xem concept nào sinh viên yếu;
  • tạo custom Boss.

TÀI LIỆU THAM KHẢO

Có thể xây dựng danh mục tham khảo theo các nhóm:

  1. Tài liệu Java chính thức.
  2. Tài liệu JavaFX.
  3. Tài liệu SQLite.
  4. Tài liệu UML.
  5. Tài liệu về Object-Oriented Design.
  6. Tài liệu về Design Patterns.
  7. Tài liệu về Adaptive AI / game AI.
  8. Giáo trình Lập trình hướng đối tượng của môn học.

Khi hoàn thiện báo cáo, các tài liệu cụ thể cần được ghi theo một chuẩn thống nhất như IEEE hoặc APA.


PHỤ LỤC

CharacterConceptVai trò
Shield KnightEncapsulationTank
Mutant WarriorInheritanceDamage
ShapeshifterPolymorphismAdaptive
Abstract MageAbstractionSpecial
ConnectorInterfaceSupport
Template WizardGenericUtility
Exception HandlerExceptionCounter

BossConcept
Null BeastNullPointerException
Loop HydraInfinite Loop
Stack DemonStackOverflow
Cast MonsterClassCastException
Runtime LordRuntimeException

ĐẶC TẢ USE CASE

Actor: Player

Create Profile
     ↓
Enter Username
     ↓
Validate
     ↓
Save

Open Character Menu
        ↓
View Characters
        ↓
View Stats
        ↓
Select Character
        ↓
Confirm

Select Concept
      ↓
View Character
      ↓
View OOP Principle
      ↓
View Example

Select Character
      ↓
Select Enemy
      ↓
Initialize Battle
      ↓
Start Turn

Player
  ↓
Attack
  ↓
BattleEngine
  ↓
Calculate Damage
  ↓
Enemy.takeDamage()
  ↓
Update UI

Player
  ↓
Select Skill
  ↓
Validate Cooldown
  ↓
Execute Skill
  ↓
Apply Effect
  ↓
Update Battle State

Show Question
      ↓
Player Answer
      ↓
Validate Answer
      ↓
Correct?
 ↙          ↘
Yes          No
 ↓            ↓
Damage       Penalty

Enemy Turn
    ↓
Read Battle State
    ↓
Read Action History
    ↓
Analyze Pattern
    ↓
Predict Player Action
    ↓
Evaluate Available Actions
    ↓
Select Strategy
    ↓
Execute Action

Battle End
    ↓
Calculate Result
    ↓
Calculate XP
    ↓
Update Player
    ↓
Save Battle
    ↓
Save Action History
    ↓
Update Statistics

comments (0)

reviews (0)