Le projet est écrit en Python avec le package PyGame.
La bataille navale, appelée aussi touché-coulé, est un jeu de société dans lequel deux joueurs doivent placer des ''navires'' sur une grille tenue secrète et tenter de ''toucher'' les navires adverses. Le gagnant est celui qui parvient à couler (c'est-à-dire toucher toutes les cases) tous les navires de l'adversaire avant que tous les siens ne le soient.
La bataille navale oppose deux joueurs. Chaque joueur dispose de deux grilles carrées de côté 10, dont les lignes sont numérotées de 1 à 10 et les colonnes de A à J, ainsi que d'une flotte composée de quelques bateaux d'une à cinq cases de long.
L'une des grilles représente la zone contenant sa propre flotte. Au début du jeu, chaque joueur place ses bateaux sur sa grille, en s'assurant que deux bateaux ne sont pas adjacents. L'autre grille représente la zone adverse, où il cherchera à couler les bateaux de son adversaire.
Chaque joueur, à son tour, annonce une case (par exemple ''B6''), et son adversaire lui répond si le tir tombe à l'eau ou au contraire s'il touche un bateau. Dans ce dernier cas, il annonce ''touché'' s'il reste des cases intactes au bateau ciblé, et ''touché-coulé'' sinon.
Chaque joueur possède les mêmes navires, dont le nombre et le type dépendent des règles du jeu choisies.
- Premier exemple de flotte
- 1 Porte-avions (5 cases)
- 1 Cuirassé (4 cases)
- 2 Croiseurs (3 cases)
- 1 Torpilleur (2 cases)
- Autre disposition (Belgique)
- 1 Cuirassé (4 cases)
- 2 Croiseurs (3 cases)
- 3 Torpilleurs (2 cases)
- 4 Sous-marin (1 case)