Skip to content

Cod-e-Codes/battleship-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

battleship-rs

Terminal-based networked Battleship game written in Rust.

Demo

Features

  • 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

Requirements

  • Rust 1.70+
  • Terminal with Unicode support

Installation

git clone https://github.com/Cod-e-Codes/battleship-rs
cd battleship-rs
cargo build --release

Usage

Two-Player Game (Local Network)

Start server:

cargo run --release -- server 8080

Connect players (in separate terminals):

cargo run --release -- client 127.0.0.1:8080

AI Opponent

Start AI server:

cargo run --release -- server-ai 8080

Connect:

cargo run --release -- client 127.0.0.1:8080

Remote Play via Relay Server

The relay server forwards messages between two players.

On server machine (or cloud instance):

cargo run --release -- server-relay 8080

Players connect from anywhere:

# Player 1
cargo run --release -- client your-server-ip:8080

# Player 2
cargo run --release -- client your-server-ip:8080

Controls

  • 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

Side Panel

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.

Game Rules

  • 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

Architecture

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 Modes

  • server: Two-player game, both players connect to same server
  • server-ai: Single-player against AI
  • server-relay: Message relay between two players

Network Protocol

JSON messages over TCP, newline-delimited. Message types:

  • PlaceShips: Send board configuration
  • Attack: Fire at coordinates
  • AttackResult: Hit/miss/sunk feedback
  • YourTurn / OpponentTurn: Turn management
  • GameOver: End game state
  • PlayAgainRequest / PlayAgainResponse: Play again functionality
  • NewGameStart: Reset for new game

The relay server forwards all messages between players.

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Terminal-based networked Battleship game in Rust with AI opponent and multiplayer support

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Languages