BattleShip là game chiến thuật 2 người chơi, mỗi phòng tối đa 2 người, chạy online qua TCP. Server quản lý nhiều phòng độc lập và lưu trạng thái bàn cùng lượt chơi. Dữ liệu trao đổi dùng JSON line (kết thúc \n) để dễ parse và mở rộng. Trò chơi gồm chế độ cổ điển (đặt tàu, bắn theo lượt, hit/miss/sunk, xử lý disconnect).
- Nhiều phòng (room), mỗi phòng tối đa 2 players.
- Đặt tàu, bắn theo lượt, thông báo hit / miss / sunk.
- Luật: bắn tiếp nếu trúng; hết tàu → thua.
- Xử lý rớt kết nối (thông báo đối phương thắng hoặc cho phép reconnect).
- Server: TCP listener, map room_id -> GameRoom, mỗi client 1 thread, Lock khi chỉnh dữ liệu chung.
- Client: 2 luồng (recv + input), hiển thị 2 bảng (own/enemy).
- waiting — chưa đủ 2 người
- placing — cả 2 đang place ships
- playing — luân phiên bắn
- finished — game over, gửi winner
- Player A connect → join/create room.
- Player B join same room → server gửi game_start + chỉ định lượt ngẫu nhiên.
- Cả 2 gửi place_ships.
- Khi cả 2 đã place → playing.
- Player có lượt gửi shoot → server trả shot_result và broadcast.
- Nếu tất cả tàu 1 bên chìm → finished.
Server
cd .\server\
python server.pyClient-1
cd .\client-ui\
python main.pyClient-2
cd .\client-ui\
python main.py