Dự án Mini Game giữa kỳ môn Lập trình mạng. Ứng dụng mô hình Multi-Client Server sử dụng ngôn ngữ Python để xây dựng trò chơi Tháp Hà Nội dưới dạng thi đấu trực tiếp (Race Mode).
- Nguyễn Phi Long - Leader: Phát triển Server và Quản lý kết nối.
- Lê Minh Đức - Developer: Xử lý Logic trò chơi & Thuật toán.
- Chung Tiểu Phi - Developer: Xây dựng giao diện Client & Xử lý sự kiện.
Mini-game/
├── server/
│ └── server.py # Xử lý kết nối, luồng và trọng tải
├── client/
│ ├── client.py # Giao diện dòng lệnh (Terminal/Console)
│ └── client_gui.py # Giao diện đồ họa trực quan (Pygame)
├── core/
│ └── hanoi_logic.py
└── README.md
- Ngôn ngữ: Python 3.x
- Thư viện chính: -
socket: Truyền tải dữ liệu TCP.threading: Xử lý đa luồng (nhiều người chơi cùng lúc).json: Đóng gói dữ liệu trao đổi giữa Client và Server.
Trước khi chạy, hãy đảm bảo máy tính đã cài Python và thư viện đồ họa:
pip install pygameLuôn phải chạy Server trước để mở cổng kết nối.
python server/server.py Server sẽ lắng nghe tại cổng 5555.
Bạn có thể mở nhiều terminal để giả lập nhiều người chơi.
- Giao diện Đồ họa (GUI): Trải nghiệm kéo thả, chọn tầng.
python client/client_gui.py
- Giao diện Dòng lệnh (Terminal): Dành cho máy cấu hình thấp hoặc debug.
python client/client.py
Sử dụng Radmin VPN để tạo mạng LAN ảo thi đấu giữa các máy tính khác mạng Wifi.
- Cài đặt: Tải Radmin VPN cho cả 2 máy (Máy Server và Máy Client).
- Kết nối:
- Máy A (Server): Bấm Create Network -> Đặt tên & Mật khẩu.
- Máy B (Client): Bấm Join Network -> Nhập tên & Mật khẩu của Máy A.
- Lấy IP: Tại Radmin VPN của Máy A, click chuột phải vào tên máy mình -> Copy IP Address (Ví dụ: 26.155.20.10).
- Cấu hình Code:
- Mở file client/client_gui.py trên Máy B.
- Tìm dòng SERVER_IP = '127.0.0.1' và đổi thành IP vừa copy:
SERVER_IP = '26.155.20.10' # Thay bằng IP Radmin của máy Server
- Chế độ chơi
- Solo Mode: Chơi một mình để luyện tập thuật toán.
- Race Mode: Thi đấu nhiều người. Ai hoàn thành tháp nhanh nhất sẽ thắng. Server tự động thông báo kết quả cho tất cả người chơi.
- Tùy chọn độ khó
- Người chơi được chọn số tầng tháp từ 3 đến 7 tầng.
- Thao tác điều khiển
- Trên GUI: Click chuột vào Cột Nguồn (để nhấc đĩa) -> Click vào Cột Đích (để thả đĩa).
- Trên Terminal: Nhập tọa độ [Nguồn] [Đích]. Ví dụ: 0 2 (Chuyển từ cột 0 sang cột 2).
Lỗi: "Address already in use" hoặc không bật được Server
- Nguyên nhân: Cổng 5555 chưa được giải phóng do lần chạy trước tắt không đúng cách.
- Cách sửa (Windows): Mở Terminal và chạy lệnh:
(Thay <PID_TIM_DUOC> bằng số PID hiện ra ở lệnh trên).
netstat -ano | findstr :5555 taskkill /F /PID <PID_TIM_DUOC>