OOP ĐẠI CHIẾN — AI OOP ARENA
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 OOP | Nhân vật |
|---|---|
| Encapsulation | Shield Knight |
| Inheritance | Mutant Warrior |
| Polymorphism | Shapeshifter |
| Abstraction | Abstract Mage |
| Interface | Connector |
| Generic | Template Wizard |
| Exception | Error Handler |
Ngược lại, các lỗi lập trình trở thành kẻ địch:
| Bug | Boss |
|---|---|
| NullPointerException | Null Beast |
| StackOverflowError | Stack Demon |
| Infinite Loop | Loop Hydra |
| ClassCastException | Cast Monster |
| RuntimeException | Runtime 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:
- Xây dựng game chiến đấu theo lượt.
- Mỗi nhân vật đại diện cho một khái niệm OOP.
- Xây dựng hệ thống kỹ năng dựa trên nguyên lý OOP.
- Xây dựng hệ thống Bug/Boss.
- Xây dựng AI điều khiển Boss.
- AI phân tích hành vi người chơi.
- AI thay đổi chiến thuật dựa trên dữ liệu thu thập.
- Xây dựng giao diện JavaFX.
- Lưu trữ người chơi, trận đấu và thống kê.
- 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:
- Quản lý người chơi.
- Tutorial OOP.
- Chọn nhân vật.
- Xem thông tin nhân vật.
- Xem kỹ năng.
- Battle.
- AI Enemy.
- Boss Battle.
- OOP Quiz Battle.
- Xem class relationship.
- Xem lịch sử trận đấu.
- Xem thống kê.
- Lưu tiến trình.
- 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
- Người chơi chọn
Battle. - Hệ thống hiển thị danh sách character.
- Người chơi chọn character.
- Hệ thống hiển thị enemy.
- Người chơi chọn enemy.
- Hệ thống khởi tạo Battle.
- Hệ thống tạo các object tương ứng.
- Battle Engine bắt đầu.
- Người chơi thực hiện action.
- AI xử lý lượt của enemy.
- Hệ thống tính toán kết quả.
- 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ương | Trong OOP Arena |
|---|---|
| Chương 1 | Tổng quan hệ thống |
| Chương 2 | Java + UML |
| Chương 3 | Encapsulation |
| Chương 4 | Constructor + Object |
| Chương 5 | Overloading + static |
| Chương 6 | Aggregation + Inheritance |
| Chương 7 | Abstract + Interface + Override |
| Chương 8 | Polymorphism |
| Chương 9 | Generic + Collection |
| Chương 10 | Exception |
| Chương 11 | JavaFX |
| Chương 12 | Class Diagram + OO Design |
| Chương 13 | SOLID + 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:
- Tài liệu Java chính thức.
- Tài liệu JavaFX.
- Tài liệu SQLite.
- Tài liệu UML.
- Tài liệu về Object-Oriented Design.
- Tài liệu về Design Patterns.
- Tài liệu về Adaptive AI / game AI.
- 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
| Character | Concept | Vai trò |
|---|---|---|
| Shield Knight | Encapsulation | Tank |
| Mutant Warrior | Inheritance | Damage |
| Shapeshifter | Polymorphism | Adaptive |
| Abstract Mage | Abstraction | Special |
| Connector | Interface | Support |
| Template Wizard | Generic | Utility |
| Exception Handler | Exception | Counter |
| Boss | Concept |
|---|---|
| Null Beast | NullPointerException |
| Loop Hydra | Infinite Loop |
| Stack Demon | StackOverflow |
| Cast Monster | ClassCastException |
| Runtime Lord | RuntimeException |
#ĐẶ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