Kiến trúc: Client-Server
C# Code
// Đây là một snippet giải thích khái niệm, không phải là code để chạy.
/*
* KIẾN TRÚC CLIENT-SERVER TRONG GAME MULTIPLAYER
*
* Đây là mô hình kiến trúc bắt buộc cho các game online nhiều người chơi.
* Nó chia ứng dụng thành hai phần riêng biệt: Client và Server.
*
* 1. CLIENT (Phía Người Chơi):
* - Vai trò: Là ứng dụng game mà người chơi cài đặt trên máy tính hoặc điện thoại của họ.
* Client chịu trách nhiệm hiển thị đồ họa, phát âm thanh, và nhận input từ người chơi.
* - Logic: Client KHÔNG nên tự quyết định các logic quan trọng của game (ví dụ: "Tôi đã bắn
* trúng và gây 100 sát thương"). Thay vào đó, nó gửi hành động của người chơi lên Server
* (ví dụ: "Tôi đã nhấn nút bắn tại vị trí X, hướng Y").
* - Ví dụ trong Unity: Đây là project Unity mà bạn build ra file .exe hoặc .apk cho người chơi.
*
* 2. SERVER (Phía Máy Chủ):
* - Vai trò: Là một ứng dụng chạy trên một máy chủ từ xa. Server là "nguồn chân lý" (source of truth),
* chịu trách nhiệm quản lý trạng thái của toàn bộ thế giới game và tất cả người chơi.
* - Logic (Authoritative Server): Server nhận input từ tất cả các Client, xử lý logic game
* (ai di chuyển, ai bắn trúng, ai mất máu), và gửi kết quả cuối cùng trở lại cho tất cả
* các Client để họ cập nhật hiển thị.
* - Ví dụ trong Unity: Bạn có thể tạo một bản build Unity đặc biệt chạy ở chế độ "headless"
* (không có đồ họa) để làm dedicated server. Hoặc sử dụng các framework mạng như
* Netcode for GameObjects, Mirror, Photon.
*
* 3. LUỒNG GIAO TIẾP (Ví dụ hành động bắn):
* a. Client A nhấn nút bắn.
* b. Client A gửi một gói tin lên Server: "Player A requests to shoot at direction Z".
* c. Server nhận gói tin. Server kiểm tra logic: Player A có đủ đạn không? Có đang trong thời
* gian hồi chiêu không?
* d. Nếu hợp lệ, Server tính toán đường đạn, kiểm tra xem có va chạm với Client B không.
* e. Server xác định Client B bị trúng đạn và mất 20 máu.
* f. Server gửi gói tin cập nhật trạng thái đến TẤT CẢ các client trong phòng:
* "Player A has shot. Player B's health is now 80."
* g. Các Client (A, B, và những người khác) nhận gói tin và cập nhật lại giao diện:
* - Hiển thị hiệu ứng đạn bắn từ A.
* - Cập nhật thanh máu của B còn 80.
* - Phát âm thanh trúng đạn.
*
* 4. TẠI SAO PHẢI DÙNG KIẾN TRÚC NÀY?
* - Chống Hack/Cheat: Vì Server là nơi duy nhất quyết định logic game, người chơi không thể
* tự thay đổi code ở client của mình để có lợi thế (ví dụ: tự cho mình bất tử, one-hit kill).
* - Đồng bộ Trạng thái: Đảm bảo mọi người chơi đều nhìn thấy cùng một trạng thái game nhất quán.
* - Quản lý tập trung: Dễ dàng quản lý các phiên chơi, dữ liệu người chơi và logic game.
*/Nền tảng của game multiplayer. Hiểu rõ vai trò của Client (người chơi) và Server (máy chủ), cách chúng giao tiếp và tại sao Server phải là nơi quyết định logic game để chống hack/cheat.