Projet Snake

Auteur·rice

Laurent George

Date de publication

2024

Description

Les jeux du type Snake on vu le jour en 1976 avec le jeu d’arcade Blockade. Plus récemment (en 1998), Nokia a fourni un jeu de ce type sur ces téléphones (Figure 1). Depuis de nombreuses implémentations ont vu le jour. Vous pouvez par exemple essayer ce jeu dans un navigateur web: google-snake-doodle.

Au cours de ce projet vous implémenterez en Java un jeu de type Snake. Vous proposerez tout d’abord une version en mode texte, et implementerez différents mode de jeu (humain seul, ordinateur seul, humain contre ordinateur), ainsi que la possibilité de charger des niveaux. Dans un second temps vous implémenterez une version graphique.

L’ensemble des bonnes pratiques vu en cours seront mise à profit tout au long du cycle de développement. Vous fournirez un compte rendu au format pdf ainsi qu’une archive contenant votre code (pour ce faire vous utiliserez la commande git archive).

Figure 1: Snake sur un Nokia 3210.

Règles du jeu

Un serpent évolue dans un monde représenté par une grille rectangulaire, un mur d’enceinte entour ce monde. Le joueur peut donner une direction au serpent: nord, west, east, south. Le serpent avance alors dans cette direction.

Quand le serpent arrive sur une case contenant un fruit, il le mange, et le joueur gagne un point. Un nouveau fruit apparait alors dans une case vide.

Quand le serpent rencontre un obstacle (mur, ou une partie de son corps), le jeu se termine, et le score est affiché.

Implementer le jeu snake en mode texte

Dans cette première partie vous implémenterez le jeu en mode texte. Voici un exemple du résultat attendu en début de partie:

Snake                          Score:    0
******************************************
*                                        *
*                                        *
*                                        *
*                                        *
*                                        *
*                                        *
* ooooooo@                               *
*                                        *
*                                        *
*                                        *
*                                        *
*                   x                    *
*                                        *
*                                        *
*                                        *
******************************************

En fin de partie, juste avant que le serpent ne rentre dans un mur (le caractere @ représente la tête du serpent):

Snake                          Score:   98
******************************************
*                                  x     *
*                                        *
*                                        *
*                                        *
*                                        *
*                                        *
*                                        *
*                                        *
*                                        *
*                                        *
*                                        *
*                                ooooooo@*
*                                        *
*                                        *
*                                        *
******************************************

Affichage

Créer une classe Board qui representera l’état du “plateau de jeu”. Par default elle doit permettre de creer un plateau avec 42 colones et 17 lignes. Elle aurra pour attributs:

  • rows: nombre de ligne du plateau
  • columns: nombre de colones du plateau
  • grid: une matrice qui representera le contenu de chaque case du plateau (vide, snake, food, wall)

Vous implementerez aussi les méthodes suivantes:

  • draw() permettant d’afficher l’état du plateau
  • set(coordinates, value) permettant de mettre a jour le contenu du plateau a une position donnée
  • get(coordinates, value) permettant de mettre de recuperer le contenu du plateau a une position donnée
  • addFood() permettant d’ajouter de la nouriture a une position aléatoire

Classe Snake

Cette classe representera l’état actuel du serpent (ou il se situe, sa taille etc.).

Classe Game

Il s’agit de la classe qui gère la partie de jeu. Elle est responsable de la boucle principale du jeu, elle gère les mouvement et les collisions, et vérifie les conditions de fin de partie.

Votre implémentation doit permettre d’initialiser le plateau de jeu (avec de la nourriture a une endroit du plateau), la position du serpent est controlé par l’utilisateur à l’aide du clavier.

Implementer une “IA”

Vous devez maintenant permettre a l’ordinateur de jouer tout seul en créant une classe playerComputer qui renvoie en fonction de l’état du plateau un nouveau mouvement de la part de l’ordinateur.

Stratégie 1: - l’ordinateur avance toujours vers la l’ouest

Stratégie 2: - l’ordinateur se dirige vers la nouriture la plus proche

Implementer un mode 2 joueurs

L’utilisateur afronte l’ordinateur, dans ce mode de jeux, deux serpents sont présent, et l’ordinateur et l’humain joue chacun leur tour.

Ressources