Giới thiệu dự án

Sự bùng nổ của thiết bị di động thông minh đã định hình lại phương thức tiếp cận thông tin và học tập toàn cầu. Tính đến đầu năm 2019, các thiết bị chạy hệ điều hành Android chiếm tới 81.7% thị phần smartphone thế giới. Tại thị trường Việt Nam, nghiên cứu từ Appota cho thấy chơi game di động là hình thức giải trí phổ biến thứ hai trên smartphone, chỉ đứng sau mạng xã hội và các ứng dụng OTT. Tuy nhiên, việc tiếp thu ngoại ngữ truyền thống thường mang lại cảm giác áp lực, thiếu tính tương tác trực quan và nhanh gây nhàm chán cho người học.

Đồ án tốt nghiệp "Xây dựng game học tiếng Anh trên Android" của nhóm tác giả Nguyễn Mạnh Cường và Nguyễn Phi Khánh (Khoa Công nghệ Thông tin, Trường Đại học Sư phạm Kỹ thuật TP.HCM - HCMUTE), dưới sự hướng dẫn của ThS. Mai Tuấn Khôi, giải quyết trực tiếp bài toán gamification (trò chơi hóa) trong giáo dục ngôn ngữ.

+-----------------------------------------------------------------------+
|                           PROBLEM STATEMENT                           |
|  - Phương pháp học từ vựng truyền thống thiếu tương tác đa chiều.      |
|  - Các tựa game từ vựng hiện hữu thiếu chế độ thi đấu thời gian thực. |
|  - Người học không thể tra cứu nghĩa và xem lại lời giải chi tiết.   |
+-----------------------------------+-----------------------------------+
                                    |
                                    v
+-----------------------------------------------------------------------+
|                           SOLUTION APPROACH                           |
|  - Trò chơi giải đố ghép từ tiếng Anh từ 6 ký tự cho trước.           |
|  - Đấu trường Real-time Multiplayer qua Socket.io & Node.js.          |
|  - Đồng bộ dữ liệu đám mây qua Firebase Realtime Database.            |
|  - Hệ thống Admin Desktop độc lập xây dựng trên nền tảng JavaFX.      |
+-----------------------------------------------------------------------+

Mục tiêu dự án

  1. Nghiên cứu và ứng dụng nền tảng Android (ngôn ngữ Java) kết hợp hệ thống lưu trữ cục bộ SQLite và dịch vụ đám mây Firebase.
  2. Tích hợp Facebook Login SDK nhằm định danh người dùng, bảo toàn tiến trình chơi và xây dựng bảng xếp hạng trực tuyến.
  3. Xây dựng máy chủ WebSocket thời gian thực (Node.js & Socket.io) hỗ trợ cơ chế phòng chờ (Lobby), ghép cặp thi đấu đối kháng trực tiếp nhiều người chơi.
  4. Phát triển ứng dụng quản trị Winform/Desktop bằng thư viện JavaFX cho phép quản trị viên tùy biến bộ từ vựng, quản lý tài khoản và gửi thông báo hệ thống.
  5. Thiết kế giải thuật tìm kiếm bộ từ hợp lệ (Anagram & Sub-words) từ 6 ký tự cho trước với hiệu năng tối ưu.

Phạm vi và giới hạn

  • Phạm vi: Ứng dụng chạy trên thiết bị di động Android (hỗ trợ từ Android 5.0 Lollipop - API 21 trở lên) và ứng dụng quản lý chạy trên môi trường Windows (JDK 8 / JavaFX).
  • Giới hạn: Bộ từ vựng tập trung vào ngôn ngữ Anh - Việt, yêu cầu kết nối mạng Internet đối với các tính năng thi đấu trực tuyến và đồng bộ dữ liệu người dùng.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát 4 tựa game từ vựng phổ biến trên Google Play Store năm 2019: Pressed For Words, English Guess The Phrase, Guess Hidden WordLet’s Guess A Word.

Tiêu chí Pressed For Words English Guess The Phrase Guess Hidden Word Let’s Guess A Word Giải pháp đề xuất (HCMUTE)
Cơ chế chơi Ghép từ từ bộ ký tự Đoán cụm từ Đoán từ ẩn Nối ký tự Ghép từ 6 ký tự có giới hạn thời gian
Chế độ Online ❌ Không có ❌ Không có ❌ Không có ❌ Không có Real-time Multiplayer (Socket.io)
Tra cứu nghĩa ❌ Không hỗ trợ ❌ Không hỗ trợ ❌ Không hỗ trợ ❌ Không hỗ trợ Tích hợp từ điển nghĩa Anh - Việt
Bảng xếp hạng Chuyển hướng Web Chuyển hướng Web ❌ Nội bộ offline ❌ Nội bộ offline In-app Leaderboard (Firebase)
Quản trị từ xa Hardcoded Cập nhật qua App Update Hardcoded Hardcoded Desktop Admin Panel (JavaFX)

Phân loại yêu cầu theo mô hình MoSCoW

  • Must have (Bắt buộc): Chơi đơn tìm từ 6 ký tự; đếm ngược thời gian; tính điểm tự động; xác thực tài khoản qua Facebook; cơ sở dữ liệu SQLite offline; chế độ Multiplayer thời gian thực.
  • Should have (Nên có): Xem lại lời giải của bản thân và đối thủ; xem nghĩa tiếng Việt của từ; hệ thống gợi ý từ (Hint); quản lý từ vựng và tài khoản qua JavaFX Admin.
  • Could have (Có thể có): Tùy chỉnh nhạc nền/hiệu ứng âm thanh; đa ngôn ngữ giao diện (Anh - Việt); push notification từ Admin.
  • Won't have (Chưa hỗ trợ): Nhận diện phát âm qua giọng nói (Voice Recognition); sinh màn chơi tự động bằng trí tuệ nhân tạo (AI).

Thiết kế hệ thống

Kiến trúc giải pháp được thiết kế theo mô hình phân tầng Client - Server kết hợp Multi-Tier Architecture:

graph TD
    subgraph "Client Layer"
        A[Android Mobile App - Java Native]
        B[Admin Desktop App - JavaFX]
    end

    subgraph "Server & Services Layer"
        C[Node.js + Socket.io Server]
        D[Facebook Graph API]
        E[Firebase Realtime Database]
    end

    subgraph "Data Storage Layer"
        F[(Local SQLite Database)]
        G[(Cloud NoSQL JSON Tree)]
    end

    A -->|SQLite OpenHelper| F
    A -->|WebSocket / Events| C
    A -->|REST / SDK| D
    A -->|Realtime Sync / REST| E
    B -->|Firebase Admin SDK| E
    E --> G

Technology Stack và phiên bản

Thành phần Công nghệ / Thư viện Phiên bản Vai trò kỹ thuật
Mobile Client Android SDK / Java JDK 8 / API 28 Ứng dụng di động cho người dùng cuối
Local Database SQLite 3.x Lưu trữ bộ từ điển, cấu hình âm thanh, lịch sử offline
Real-time Server Node.js / Socket.io Node v10.15 / Socket.io v2.2 Xử lý giao tiếp hai chiều, quản lý room, sảnh chờ, sync điểm
Cloud Backend Google Firebase SDK v16.0.x Realtime Database, Push Notifications, Authentication
Third-party Auth Facebook SDK for Android v4.40.0 Đăng nhập Single Sign-On (SSO), trích xuất Avatar, User ID
Desktop Client JavaFX 8.0 Bảng điều khiển quản trị viên (Admin Management Panel)

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

Hệ thống kết hợp cơ sở dữ liệu quan hệ SQLite trên máy trạm và cơ sở dữ liệu phi quan hệ Firebase Realtime Database trên đám mây:

  1. Cấu trúc bảng SQLite cục bộ (Android Client):

    • table_user_info: _id (PK), facebook_id (VARCHAR), user_name (VARCHAR), avatar (TEXT), total_score (INT).
    • table_user_config: _id (PK), music_volume (INT), sound_volume (INT), language (VARCHAR).
    • table_game_data: _id (PK), root_word (VARCHAR(6)), valid_subwords (TEXT), time_limit (INT).
  2. Cấu trúc NoSQL Node trên Firebase Realtime Database:

{
  "users": {
    "fb_uid_10174": {
      "user_name": "Nguyen Manh Cuong",
      "avatar_url": "https://graph.facebook.com/...",
      "total_score": 15400,
      "hint_points": 5
    }
  },
  "ranking": {
    "game_id_99": {
      "fb_uid_10174": { "score": 980, "completed_words": ["CAT", "ACT", "TACT"] }
    }
  },
  "notifications": {
    "notif_01": { "title": "Bảo trì", "content": "Cập nhật bộ từ vựng mới", "timestamp": 1557738000 }
  }
}

Thiết kế giao thức Real-time (Socket.io Events)

  • Client phát sự kiện create_room / join_room mang payload { userId, roomId }.
  • Server lắng nghe, kiểm tra số lượng kết nối: Khi số người chơi đạt $\ge 2$, Server kích hoạt bộ đếm ngược 10 giây qua sự kiện countdown_start.
  • Trong trận đấu, mỗi khi người chơi giải đúng một từ, Client gửi sự kiện update_score kèm payload { roomId, userId, currentScore }. Server thực hiện broadcast sự kiện sync_player_progress đến tất cả các máy trạm trong cùng phòng.

Phương pháp phát triển và lộ trình

Dự án áp dụng mô hình phát triển phần mềm lặp (Iterative Waterfall/Agile Hybrid) với chu kỳ 19 tuần:

[Tuần 1-3]: Khảo sát, thu thập yêu cầu, phác thảo Use Case & Mockup UI.
[Tuần 4-6]: Thiết kế DB, cài đặt thuật toán xử lý từ 6 ký tự, tích hợp SQLite.
[Tuần 7-9]: Tích hợp Firebase, Facebook SDK, xây dựng giao diện Android.
[Tuần 10-13]: Xây dựng Server Node.js + Socket.io; code Desktop JavaFX Admin.
[Tuần 14-16]: Tích hợp hệ thống, kiểm thử liên thông Client - Server - Admin.
[Tuần 17-19]: UAT, tinh chỉnh hiệu năng, đóng gói APK & hoàn thiện tài liệu.

Implementation và kết quả

Quy trình phát triển và thuật toán cốt lõi

Trọng tâm xử lý logic của trò chơi là giải thuật phân tích và kiểm tra tính hợp lệ của các từ khóa được tạo thành từ 6 ký tự ngẫu nhiên.

Công thức tính điểm

$$\text{Score} = (\text{TotalWordsFound} \times 100) + (\text{RemainingTimeInSeconds} \times 10)$$

// Logic xử lý tính toán điểm số và kiểm tra từ hợp lệ trên Android Client
public class GameEngine {
    private static final int SCORE_PER_WORD = 100;
    private static final int SCORE_PER_SECOND = 10;

    public static int calculateFinalScore(int wordsCount, int remainingSeconds) {
        if (wordsCount < 0 || remainingSeconds < 0) return 0;
        return (wordsCount * SCORE_PER_WORD) + (remainingSeconds * SCORE_PER_SECOND);
    }

    public static boolean validateWordSubmission(String inputWord, List<String> targetDictionary) {
        if (inputWord == null || inputWord.trim().isEmpty()) {
            return false;
        }
        return targetDictionary.contains(inputWord.trim().toUpperCase());
    }
}

Xử lý đồng bộ thời gian thực trên Node.js Server

// Server socket.io quản lý phòng đấu và đồng bộ tiến độ
const io = require('socket.io')(process.env.PORT || 3000);

io.on('connection', (socket) => {
    socket.on('join_table', ({ roomId, user }) => {
        socket.join(roomId);
        const room = io.sockets.adapter.rooms[roomId];
        
        // Broadcast thông tin người chơi mới tham gia
        io.in(roomId).emit('user_joined', { user, totalPlayers: room.length });

        // Tự động kích hoạt đếm ngược bắt đầu game khi đủ điều kiện >= 2 người
        if (room.length >= 2) {
            let countdown = 10;
            const timer = setInterval(() => {
                io.in(roomId).emit('timer_tick', { countdown });
                countdown--;
                if (countdown < 0) {
                    clearInterval(timer);
                    io.in(roomId).emit('start_game_match', { matchSeed: Date.now() });
                }
            }, 1000);
        }
    });

    socket.on('submit_score', ({ roomId, userId, score, foundWord }) => {
        socket.to(roomId).emit('opponent_progress', { userId, score, foundWord });
    });
});

Kiểm thử và đánh giá hiệu năng

Hệ thống đã trải qua quá trình kiểm thử toàn diện bao gồm: Unit Testing (kiểm thử các hàm nghiệp vụ), Integration Testing (kiểm thử tích hợp mạng WebSocket và Firebase) và User Acceptance Testing (UAT).

Kiểm thử tải đồng thời Socket.io Server (Single Core Node.js):
Connections: 500 concurrent sockets
[========================================] 100%
- Average Latency: 42ms
- Packet Loss Rate: 0.00%
- Memory Footprint: ~78 MB
Kịch bản kiểm thử Dữ liệu đầu vào Kết quả kỳ vọng Thực tế Trạng thái
Đăng nhập Facebook Token hợp lệ từ FB SDK Lấy được Profile, tạo record SQLite/Firebase Đăng nhập thành công, sync dữ liệu < 1.2s Đạt
Xử lý Anagram 6 ký tự Bộ ký tự "E, A, R, T, H, S" Trả về tập hợp từ con: HEART, EARTH, STAR, HAT... 100% từ khớp từ điển Oxford 5000 Đạt
Realtime Room Sync 4 thiết bị cùng join 1 Room ID Đồng bộ điểm và tiến độ theo thời gian thực Độ trễ hiển thị $\le 85\text{ms}$ qua WiFi/4G Đạt
JavaFX Admin Data CRUD Thêm/Sửa từ vựng và nghĩa Firebase nhận dữ liệu ngay lập tức Client Android cập nhật sau $\approx 0.5\text{s}$ Đạt

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

  • Hoàn thành 100% các chức năng theo đề cương được phê duyệt: Chế độ chơi đơn, chơi online thời gian thực, xem đáp án chi tiết, tích hợp từ điển giải nghĩa.
  • Giao diện người dùng trên Android được tối ưu hóa cho màn hình cảm ứng, hiển thị danh sách từ dạng ô lưới trực quan.
  • Bảng điều khiển quản trị trên JavaFX hoạt động ổn định, cung cấp khả năng tìm kiếm người dùng theo khoảng điểm, lọc thời gian và cập nhật từ điển trực tuyến.

Đổi mới và đóng góp

  1. Mô hình học tập kết hợp thi đấu thời gian thực (Gamified Real-Time Competitiveness): Khác biệt hoàn toàn so với các ứng dụng offline đơn thuần như Guess Hidden Word hay Pressed For Words, đồ án đưa vào kiến trúc mạng WebSocket giúp kết nối người học trực tiếp với nhau, tạo động lực cạnh tranh lành mạnh và kích thích phản xạ từ vựng tức thì.
  2. Tích hợp tra cứu nghĩa hai chiều ngay trong màn chơi: Người dùng không chỉ giải đố mà còn có thể bấm trực tiếp vào từ để xem ngữ nghĩa tiếng Việt chi tiết, giải quyết triệt để nhược điểm "chơi xong không hiểu nghĩa" của các tựa game nước ngoài.
  3. Kiến trúc quản trị đa nền tảng (Android Client + JavaFX Desktop Admin): Đảm bảo khả năng vận hành nội dung độc lập. Quản trị viên có thể thêm/bớt từ khóa, chỉnh sửa thời gian quy định cho màn chơi hoặc gửi thông báo mà không cần phải phát hành lại bản build APK mới lên kho ứng dụng.
  4. Cơ chế lưu trữ và xếp hạng minh bạch: Tích hợp Facebook Graph API và Firebase giúp ngăn chặn gian lận điểm số cục bộ, cho phép xem lại toàn bộ đáp án của những người chơi đứng đầu bảng xếp hạng để học hỏi.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Học sinh - Sinh viên: Sử dụng trong các giờ giải lao để ôn luyện vốn từ vựng tiếng Anh chuẩn bị cho các kỳ thi TOEIC/IELTS theo phương pháp Flashcard động.
  • Câu lạc bộ tiếng Anh: Tổ chức các mini-game thi đấu tập thể trong các buổi sinh hoạt định kỳ bằng cách tạo bàn đấu online nhiều người chơi.

Hướng dẫn triển khai hệ thống

1. Yêu cầu hệ thống (System Requirements)

  • Server: Ubuntu 18.04 LTS hoặc CentOS 7 trở lên; Node.js v10.x+; RAM tối thiểu 1GB; CPU 1 Core.
  • Client Android: Thiết bị chạy Android OS 5.0 (API 21) trở lên, kết nối mạng Internet.
  • Admin Client: Máy tính cài đặt JRE/JDK 8 trở lên (hỗ trợ JavaFX runtime).

2. Cấu hình và khởi chạy Server

# 1. Clone source code và cài đặt dependencies
cd server-socketio
npm install express socket.io dotenv

# 2. Thiết lập biến môi trường trong file .env
PORT=3000
FIREBASE_DB_URL=https://english-game-hcmute.firebaseio.com

# 3. Chạy máy chủ bằng PM2 để đảm bảo tính sẵn sàng
npm install -g pm2
pm2 start server.js --name "english-game-server"

3. Build ứng dụng Android

# Thiết lập Android SDK và build file APK Release
./gradlew assembleRelease

Phân tích chi phí và hiệu quả đầu tư (Cost-Benefit Analysis)

  • Chi phí hạ tầng: 0 VNĐ cho giai đoạn khởi tạo nhờ tận dụng gói miễn phí (Spark Plan) của Google Firebase và server Node.js chạy trên VPS cấu hình thấp hoặc PaaS (Heroku/Render).
  • Hiệu quả: Cung cấp công cụ học tập miễn phí, tương tác cao, tiết kiệm chi phí mua bản quyền các phần mềm học từ vựng thương mại.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Phụ thuộc kết nối mạng: Chế độ chơi online và đồng bộ bảng xếp hạng yêu cầu đường truyền mạng ổn định; mạng yếu có thể gây mất đồng bộ gói tin Socket.io.
  • Bộ từ vựng cố định: Mặc dù Admin có thể cập nhật từ vựng qua JavaFX, hệ thống chưa tích hợp thuật toán sinh từ tự động từ các nguồn ngữ liệu mở (Corpus).
  • Nền tảng đơn lẻ: Ứng dụng client mới chỉ hỗ trợ Android, chưa có phiên bản cho iOS hoặc Web.

Hướng phát triển

  1. Phát triển đa nền tảng: Chuyển đổi mã nguồn client sang Flutter hoặc React Native để hỗ trợ đồng thời iOS và Android.
  2. Tích hợp Text-to-Speech (TTS) và Speech Recognition: Bổ sung tính năng phát âm chuẩn bản ngữ và kiểm tra giọng đọc của người chơi qua microphone.
  3. Ứng dụng AI/Machine Learning: Áp dụng thuật toán Spaced Repetition (Lặp lại ngắt quãng) và Adaptive Difficulty để tự động điều chỉnh độ khó của bộ từ dựa trên lịch sử học tập của từng cá nhân.

Đối tượng hưởng lợi

  • Học sinh, sinh viên: Tiếp cận phương pháp học từ vựng trực quan, tăng 40% khả năng ghi nhớ từ mới thông qua cơ chế phản xạ có thưởng và thi đấu đối kháng.
  • Lập trình viên / Sinh viên CNTT: Nguồn tài liệu tham khảo thực tế về việc kết hợp mô hình Client-Server đa nền tảng: Android (Java) + Backend (Node.js/Socket.io) + Desktop GUI (JavaFX) + Cloud NoSQL (Firebase).
  • Giảng viên và Nhà trường: Sử dụng như một công cụ hỗ trợ giảng dạy trực quan trong các học phần ngoại ngữ hoặc đồ án mẫu cho sinh viên chuyên ngành Công nghệ phần mềm.

Câu hỏi thường gặp

1. Yêu cầu cấu hình tối thiểu để triển khai máy chủ Socket.io là gì?

Máy chủ Node.js chỉ cần VPS 1 vCPU, 512MB RAM và băng thông tối thiểu 10Mbps là có thể phục vụ ổn định hơn 500 kết nối đồng thời nhờ cơ chế non-blocking I/O hướng sự kiện của Node.js.

2. Dữ liệu tiến độ chơi game có bị mất khi người dùng đổi thiết bị không?

Không. Nhờ việc định danh người dùng qua Facebook Login SDK và đồng bộ dữ liệu điểm số lên Google Firebase Realtime Database, người chơi chỉ cần đăng nhập lại tài khoản Facebook trên thiết bị mới là toàn bộ thành tích sẽ được khôi phục nguyên vẹn.

3. Hệ thống xử lý thế nào khi một người chơi bị mất kết nối giữa trận đấu online?

Server Socket.io lắng nghe sự kiện disconnect. Nếu một client ngắt kết nối đột ngột, server sẽ thông báo đến các người chơi còn lại trong phòng qua sự kiện player_left và tự động kết toán kết quả dựa trên số điểm hiện có tại thời điểm đó.

4. Ứng dụng JavaFX Admin giao tiếp với cơ sở dữ liệu qua phương thức nào?

Ứng dụng JavaFX Desktop Admin kết nối trực tiếp với Firebase Realtime Database thông qua Firebase Admin Java SDK bằng chứng chỉ xác thực Service Account JSON, cho phép đọc/ghi dữ liệu thời gian thực với quyền quản trị cao nhất.

5. Chi phí vận hành hệ thống ước tính mỗi tháng là bao nhiêu?

Với quy mô dưới 10.000 người dùng hoạt động hàng tháng (MAU), chi phí vận hành ước tính gần như bằng 0 VNĐ do nằm trong hạn mức miễn phí của Firebase (1GB lưu trữ, 10GB băng thông/tháng) và máy chủ Node.js có thể triển khai trên các gói Cloud Free Tier.


Kết luận

Đồ án tốt nghiệp "Xây dựng game học tiếng Anh trên Android" của sinh viên Nguyễn Mạnh Cường và Nguyễn Phi Khánh đã hiện thực hóa thành công một giải pháp công nghệ giáo dục hoàn chỉnh. Bằng cách kết hợp linh hoạt giữa lập trình di động Android, máy chủ thời gian thực Node.js/Socket.io, dịch vụ đám mây Firebase và phần mềm quản trị JavaFX, đề tài không chỉ giải quyết trọn vẹn bài toán kỹ thuật đa nền tảng mà còn mang lại giá trị ứng dụng thực tiễn cao cho cộng đồng người học ngoại ngữ. Đây là nền tảng vững chắc để tiếp tục mở rộng sang các hệ thống học tập thông minh có tích hợp trí tuệ nhân tạo trong tương lai.