Ứng dụng client JavaFX cho game sắp xếp đa người chơi. Người chơi tham gia các trận đấu sắp xếp số hoặc chữ theo thứ tự tăng dần hoặc giảm dần trong thời gian giới hạn.
- Tổng quan
- Tính năng
- Công nghệ sử dụng
- Cấu trúc dự án
- Yêu cầu hệ thống
- Cài đặt và chạy
- Hướng dẫn sử dụng
- Kiến trúc
- Cấu hình
Multiplayer Sorting Game là một ứng dụng client JavaFX cho phép người chơi:
- Đăng ký và đăng nhập tài khoản
- Xem danh sách người chơi online
- Tạo hoặc tham gia phòng chơi
- Chơi game sắp xếp đối kháng với người chơi khác
- Xem lịch sử trận đấu và bảng xếp hạng
- Quản lý âm thanh trong game
- Đăng ký tài khoản mới
- Đăng nhập với username/password
- Quản lý thông tin người dùng (nickname, thống kê)
- Tạo phòng chơi với mã phòng
- Tham gia phòng bằng mã phòng
- Xem danh sách người chơi trong phòng
- Rời khỏi phòng
- Game sắp xếp: Sắp xếp số hoặc chữ theo thứ tự tăng dần/giảm dần
- Nhiều vòng chơi: Mỗi trận đấu có nhiều vòng
- Giới hạn thời gian: Mỗi câu hỏi có thời gian giới hạn
- Điểm số: Tính điểm dựa trên độ chính xác và thời gian hoàn thành
- Mời chơi tiếp: Mời đối thủ chơi vòng tiếp theo
- Xem bảng xếp hạng người chơi
- Xem lịch sử trận đấu
- Thống kê cá nhân (tổng số trận, số lần thắng, tổng điểm)
- Giao diện JavaFX hiện đại
- Responsive design
- Hiệu ứng animation
- Quản lý âm thanh nền
- Java 17: Ngôn ngữ lập trình
- JavaFX 17.0.6: Framework GUI
javafx-controls: Controls và componentsjavafx-fxml: FXML cho UIjavafx-media: Phát âm thanh
- Maven: Quản lý dependencies
- JSON: Giao tiếp với server (thư viện
org.json) - Socket: Kết nối TCP với game server
game_client_v3/
├── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── ltm/
│ │ └── game_client_v3/
│ │ ├── MainApp.java # Entry point
│ │ ├── controller/ # Controllers
│ │ │ ├── ClientManager.java # Quản lý client chính
│ │ │ ├── SocketManager.java # Quản lý kết nối socket
│ │ │ ├── MessageHandler.java # Xử lý message từ server
│ │ │ ├── ViewManager.java # Quản lý các view
│ │ │ ├── UserManager.java # Quản lý người dùng
│ │ │ └── SoundManager.java # Quản lý âm thanh
│ │ ├── models/ # Data models
│ │ │ ├── User.java # Model người dùng
│ │ │ ├── Room.java # Model phòng chơi
│ │ │ ├── Question.java # Model câu hỏi
│ │ │ ├── GameData.java # Dữ liệu game
│ │ │ ├── MatchSummary.java # Tóm tắt trận đấu
│ │ │ └── MatchHistory.java # Lịch sử trận đấu
│ │ └── views/ # View controllers
│ │ ├── AuthController.java # Màn hình đăng nhập/đăng ký
│ │ ├── WelcomeController.java # Màn hình chào mừng
│ │ ├── HomeController.java # Màn hình chính
│ │ ├── GameSortingController.java # Màn hình game
│ │ ├── MatchResultController.java # Kết quả trận đấu
│ │ └── ScoreboardController.java # Bảng xếp hạng
│ └── resources/
│ ├── views/ # FXML files
│ │ ├── AuthView.fxml
│ │ ├── WelcomeView.fxml
│ │ ├── HomeView.fxml
│ │ ├── GameSortingView.fxml
│ │ ├── MatchResultView.fxml
│ │ └── ScoreboardView.fxml
│ ├── images/ # Hình ảnh
│ ├── sounds/ # Âm thanh
│ └── fonts/ # Font chữ
├── pom.xml # Maven configuration
└── README.md
- Java: JDK 17 hoặc cao hơn
- Maven: 3.6+ (hoặc sử dụng Maven Wrapper có sẵn)
- Hệ điều hành: Windows, macOS, hoặc Linux
- Kết nối mạng: Kết nối với game server
git clone <repository-url>
cd game_client_v3Mở file ClientManager.java và cập nhật địa chỉ server:
// Trong ClientManager.java, dòng 23
socketManager = new SocketManager("localhost", 8989, this::onMessageReceived);
// Hoặc
socketManager = new SocketManager("172.30.34.82", 8989, this::onMessageReceived);Sử dụng Maven Wrapper:
Windows:
mvnw.cmd clean compileLinux/macOS:
./mvnw clean compileHoặc nếu đã cài Maven:
mvn clean compileSử dụng Maven Wrapper:
Windows:
mvnw.cmd javafx:runLinux/macOS:
./mvnw javafx:runHoặc sử dụng Maven:
mvn javafx:runHoặc chạy trực tiếp:
java --module-path <path-to-javafx> --add-modules javafx.controls,javafx.fxml -cp target/classes com.ltm.game_client_v3.MainApp- Khởi động ứng dụng
- Nhập thông tin đăng ký (username, password, nickname) hoặc đăng nhập
- Sau khi đăng nhập thành công, bạn sẽ được chuyển đến màn hình Welcome
-
Từ màn hình Home:
- Xem danh sách người chơi online
- Mời người chơi khác chơi game
- Tạo phòng hoặc tham gia phòng bằng mã phòng
- Xem bảng xếp hạng
- Xem lịch sử trận đấu
-
Trong game:
- Đọc hướng dẫn và đợi đếm ngược
- Kéo/thả các số/chữ từ hàng trên xuống hàng dưới để sắp xếp
- Click vào box để di chuyển giữa hai hàng
- Nhấn "Reset" để làm lại
- Nhấn "Send" khi hoàn thành
- Xem kết quả sau mỗi vòng
- Mời đối thủ chơi vòng tiếp theo hoặc thoát game
- Âm thanh nền được phát tự động
- Có thể tắt/bật âm thanh từ màn hình Home
- Singleton:
ClientManagersử dụng pattern Singleton - MVC: Tách biệt Model, View, Controller
- Observer: SocketManager sử dụng callback để xử lý message
-
Khởi động:
MainAppkhởi tạo JavaFX ApplicationClientManagerđược khởi tạo (Singleton)SocketManagerkết nối với serverViewManagerhiển thị màn hình đăng nhập
-
Xử lý message:
SocketManagernhận message từ serverMessageHandlerxử lý và phân loại message- Cập nhật UI thông qua các Controller
-
Gameplay:
- Người chơi thực hiện hành động (mời, trả lời, v.v.)
- Gửi message JSON đến server
- Nhận response và cập nhật UI
- Quản lý toàn bộ client
- Điều phối giữa các manager khác
- Entry point cho các thao tác
- Quản lý kết nối TCP với server
- Gửi/nhận message dạng JSON
- Chạy trong thread riêng
- Xử lý tất cả message từ server
- Phân loại theo action type
- Cập nhật UI và data models
- Quản lý các màn hình (Scene)
- Chuyển đổi giữa các view
- Khởi tạo và quản lý controllers
Sửa trong ClientManager.java:
socketManager = new SocketManager("your-server-ip", 8989, this::onMessageReceived);Sửa port trong ClientManager.java:
socketManager = new SocketManager("localhost", YOUR_PORT, this::onMessageReceived);File pom.xml chứa:
- JavaFX dependencies (version 17.0.6)
- JSON library (version 20231013)
- JavaFX Maven plugin để chạy ứng dụng
Ứng dụng giao tiếp với server qua JSON messages:
LOGIN: Đăng nhậpREGISTER: Đăng kýGET_ONLINE_USERS: Lấy danh sách người chơi onlineINVITE_USER_TO_GAME: Mời người chơiINVITE_USER_TO_GAME_RESPONSE: Phản hồi lời mờiCREATE_ROOM: Tạo phòngJOIN_ROOM: Tham gia phòngLEAVE_ROOM: Rời phòngSUBMIT_USER_ANSWER: Gửi câu trả lờiQUIT_GAME: Thoát gameINVITE_USER_TO_NEXT_GAME: Mời chơi vòng tiếp theoGET_RANKING: Lấy bảng xếp hạngGET_MATCH_HISTORY: Lấy lịch sử trận đấu
LOGIN_RESPONSE: Kết quả đăng nhậpREGISTER_RESPONSE: Kết quả đăng kýGET_ONLINE_USERS_RESPONSE: Danh sách người chơi onlineINVITE_USER_TO_GAME_REQUEST: Nhận lời mờiINVITE_USER_TO_GAME_RESULT: Kết quả lời mờiSTART_GAME: Bắt đầu gameGAME_RESULT: Kết quả vòng chơiGAME_FINAL_RESULT: Kết quả trận đấu cuối cùngCONTINUE_NEXT_GAME: Tiếp tục vòng tiếp theoROOM_UPDATED: Cập nhật thông tin phòngGET_RANKING_RESPONSE: Bảng xếp hạngGET_MATCH_HISTORY_RESPONSE: Lịch sử trận đấu
- Kiểm tra địa chỉ IP và port trong
ClientManager.java - Đảm bảo server đang chạy
- Kiểm tra firewall và network
- Đảm bảo đã cài đặt JavaFX SDK
- Kiểm tra module path trong
module-info.java - Kiểm tra dependencies trong
pom.xml
- Xóa thư mục
targetvà build lại:mvn clean compile - Kiểm tra Java version:
java -version(phải là 17+) - Kiểm tra Maven version:
mvn -version