Terminal-based networked Battleship game written in Rust.
- Two-player networked gameplay over TCP
- Single-player mode against AI opponent
- Relay server mode for remote play
- Play again functionality with timeout handling
- Terminal UI using ratatui
- Rust 1.70+
- Terminal with Unicode support
git clone https://github.com/Cod-e-Codes/battleship-rs
cd battleship-rs
cargo build --releaseStart server:
cargo run --release -- server 8080Connect players (in separate terminals):
cargo run --release -- client 127.0.0.1:8080Start AI server:
cargo run --release -- server-ai 8080Connect:
cargo run --release -- client 127.0.0.1:8080The relay server forwards messages between two players.
On server machine (or cloud instance):
cargo run --release -- server-relay 8080Players connect from anywhere:
# Player 1
cargo run --release -- client your-server-ip:8080
# Player 2
cargo run --release -- client your-server-ip:8080- Arrow keys: Move cursor
- R: Rotate ship during placement
- Enter: Place ship / Fire at position
- S: Toggle side panel (ship status & statistics)
- Y/N: Play again (when prompted)
- Q: Quit
Press S during gameplay to toggle the side panel, which displays:
- Ship status with visual length indicators and hit tracking
- Game statistics including turn count, accuracy, and ships sunk
- Real-time updates as the game progresses
The side panel can be toggled on/off to avoid cluttering the main game view.
- Standard Battleship rules
- 10x10 grid
- 5 ships: Carrier (5), Battleship (4), Cruiser (3), Submarine (3), Destroyer (2)
- Ships cannot overlap
- Players alternate turns after placement phase
- First to sink all opponent ships wins
src/
├── main.rs - Entry point and CLI
├── types.rs - Core types and messages
├── game_state.rs - Game logic
├── ui.rs - Terminal rendering
├── input.rs - Keyboard handling
├── client.rs - Client implementation
├── server.rs - Two-player server
├── server_ai.rs - AI opponent server
└── server_relay.rs - Relay server for remote play
server: Two-player game, both players connect to same serverserver-ai: Single-player against AIserver-relay: Message relay between two players
JSON messages over TCP, newline-delimited. Message types:
PlaceShips: Send board configurationAttack: Fire at coordinatesAttackResult: Hit/miss/sunk feedbackYourTurn/OpponentTurn: Turn managementGameOver: End game statePlayAgainRequest/PlayAgainResponse: Play again functionalityNewGameStart: Reset for new game
The relay server forwards all messages between players.
This project is licensed under the MIT License - see the LICENSE file for details.
