top of page

Le Projet

Vous allez retrouver ici  mon carnet de bord de mon projet ainsi que le programme final.

En quoi consiste mon projet ?

Mon projet est de créer le célèbre jeu, La Bataille Navale.

Mais de façon plus simplifié, c'est-à-dire nous avons devant nous une grille et des "bateaux" mis de façon aléatoire que nous ne voyons pas. On a un total de 15 tentatives pour trouver les bateaux dissimulés en cliquant sur les bonnes cases

Tout d'abord, pour créer Une Bataille Navale, je vais me poser une série de question pour y parvenir.

Comment créer un plateau de jeu sur Processing ?

Comment créer les pions ?

Comment attribuer les pions avec le plateau de jeu ?

Comment faire en sorte de jouer à deux ?

Comment attaquer l'autre joueur ?

Comment gagner ?

​

Séance du 19 Janvier :

Tout d'abord je me suis intéressé à l'affichage du fond et du plateau de jeu. J'ai cherché une image d'un océan et

d'un plateau de jeu de 64 cases.

Pour pouvoir afficher, je me suis inspiré d'un programme d'une autre personne. J'ai appris qu'il fallait utiliser une fonction que je vais appeler setup, pour pouvoir afficher d'abord le fond. Ensuite pour faire apparaitre le plateau, j'ai utilisé une boucle, c'est à dire une fonction draw, où j'ai fait ajouter une fonction appelé premiere_scene lue en boucle, et j'ai ensuite rajouté une fonction premiere_scene. Et dans cette fonction, j'y est mis le plateau vide, le but du jeu, des indications et le bouton jouer. Cette premiere scene est comme un menu du jeu.

Je verrai plus tard pour pouvoir mettre de la musique.

plateau.jpg.jpg

scene= 1


def setup():
  size(1080, 566)
  global img
  img = loadImage("ocean.jpg")
  image(img, 500,0,600,600)   
  frameRate(7)
   
def draw():
  # Displays the image at its actual size at point (0,0)
  global scene
  if scene==1:
       premiere_scene()

print(scene)

def premiere_scene():
   
  global img2
  global img3

  img2 = loadImage("plateau.png")
  img3= loadImage ("bateau.png")
  image(img3, 730,400,100,100)
  image(img2, 0,0, 580,600)
  fill(255)

  fill(25,56,89)
  textSize(40)
  text("Bataille Navale",720,50)
  textSize(20)
  text("Objectif = Eliminer Les Bateaux",630,100)

   textSize(20)
  text("Appuyer Sur Le Bateau Pour Commencer", 630, 150)

Capture Bataille Naval.PNG

Voici le rendu de la Première Scène

Séance du 26 Janvier

Avant de finir la Première scène, il me faut une sorte de bouton pour commencer le jeu. Le bouton sera sur la bateau, je vais donc créer un rectangle et quand on cliquera dessus, cela rajoutera +1 à la variable scène, pour passer à la scène 2 en appuyant à un certain endroit.

J' ai donc ajouté à la boucle draw une autre condition:

def draw():
  # Displays the image at its actual size at point (0,0)
  global scene
   
  if scene==1:
       premiere_scene()
  if scene==2:
       deuxieme_scene()
  if (mousePressed == True):
       if (mouseButton == LEFT):
           if mouseX<800:
               if mouseX>700:
                   if mouseY<500:
                       if mouseY>400:
                           scene += 1
                           print(scene)

Et ensuite j'ai ajouté une fonction : deuxieme_scene()

​

def deuxieme_scene():
   
   image(img, 500,0,600,600)
   image(img2,0, 0,580,600)
   fill(255)
   fill(25,56,89)

   text("A vous de jouer", 640, 150)
   textSize(30)

​

​

Maintenant je fais face à un problème, car il faut attribuer chaque case à des coordonnées. Comme c'est trop long, j'ai pensé à définir un tableau mais c'est assez compliqué. A l'aide de Monsieur Laclaverie, je vais faire une boucle et une suite de conditions pour savoir si la case sélectionnée et entre cette coordonnée x et y. Je vais d'abord procéder à la recherche des coordonnées x de chaque colonne grâce à print(MouseX) qui va m'afficher à quelle x le curseur est. Et je ferai la même chose pour les y avec print(MouseY).

​

Je sais désormais que la colonne A se trouve entre x=60 et x=116

Séance du 2 février

J'ai donc reporté toutes les coordonnées correspondantes aux colonnes et aux lignes.

D'abord les colonnes:

A : 60 à 116

B : 116 à 174

C : 174 à 231               Cela correspond aux abscisses

D : 231 à 290

E : 290 à 348

F : 348 à 406

G : 406 à 464

H : 464 à 520

1 : 60 à 121

2 : 121 à 180

3 : 180 à 241

4 : 241 à 301                   Cela correspond à des ordonnées

5 : 301 à 360

6 : 360 à 420

7 : 420 à 478

8 : 478 à 540

J'ai ensuite crée une liste de toute les cases possibles, une liste de 64 éléments.

cases=["A1","A2","A3","A4","A5","A6","A7","A8","B1","B2","B3","B4","B5","B6","B7","B8","C1","C2","C3","C4","C5","C6","C7","C8","D1","D2","D3","D4","D5","D6","D7","D8","E1","E2","E3","E4","E5","E6","E7","E8","F1","F2","F3","F4","F5","F6","F7","F8","G1","G2","G3","G4","G5","G6","G7","G8","H1","H2","H3","H4","H5","H6","H7","H8"]
 

Et j'ai ensuite créer une variable pour chaque case par exemple A1 =0.

Car je vais importer random pour choisir aléatoirement les cases qui vont contenir un bateau ennemi, ce bateau sera représenté par 1

Mais je ne sais pas réellement comment procéder à la répartition des bateaux aux cases de façon aléatoire. J'ai essayé de créer une liste de chaine de caractère des cases, de faire une variable de chaque case de valeur 0, de définir une fonction choix_bateaux_ennemi() mais cela ne fonctionne pas car ce n'est pas comme python, il va falloir que je regarde comment ça marche sur processing

 

 

cases_et_bateau=[]
def choix_bateaux_ennemi():
  for element in cases:
       cases_et_bateau.append(element,0)
       
print(cases_et_bateau)

Une fois que j'aurai réussi, il va falloir que je fasse s'associer chaque case à sa "case graphique". Je créerai ensuite une série de condition qui vérifiera si cette zone où l'on a cliqué à une valeur de 0, si non c'est qu'il y a un bateau et il est touché.

Séance du 09 février

J'ai réalisé à l'aide de Monsieur Laclaverie la liste case qui contient 3 éléments pour chaque sous liste. La lettre, le chiffre et un chiffre qui va déterminer si il y a un bateau ou non. J'ai donc fait une liste par compréhension. Maintenant il me reste à déterminer si il y a un bateau ou non de manière aléatoire à l'aide de l'import random. Cependant, cela ne fonctionne toujours pas, et c'est à cause de l'import random, car je suppose que processing peut accéder à la bibliothèque random sans avoir à l'importer.

lettres=["A","B","C","D","E","F","G","H"]
cases=[]
for element in lettres:
  for i in range(1,9):
       presence_bateau=int(random(0,2))
   
       cases.append([element, i, presence_bateau])
       
       
       
       
print(cases)

Pour déterminer si il y a un bateau dans la case ou non, je vais me servir des valeurs 1 et 0, si dans la liste il y a un "0" il n'y a pas de bateau, si il y a un "1" il y a un bateau.

On va désormais passer au jeu, cela va consister à sélectionner une case au choix, et l'algorithme va vérifier si cette case sélectionnée contient la valeur 1 ou 0, si il y a un 1 cela affiche le bateau ennemi.

Je vais faire cela avec une série de condition if, et faire cela pour chaque case.

if (mousePressed == True):
       if (mouseButton == LEFT):
           if mouseX<116:
               if mouseX>60:
                   if mouseY<121:
                       if mouseY>60:
                           if cases[0][-1]==1:
                               image(img3, 70,70,50,50)

Séance du 16 février

Aujourd'hui, je vais procéder aux séries de condition pour chaque case, cela va être très long.

Petit exemple pour la case H1:

​

if (mousePressed == True):
       if (mouseButton == LEFT):
           if mouseX<520:
               if mouseX>464:
                   if mouseY<121:
                       if mouseY>60:
                           if cases[56][-1]==1:
                               image(img3, 479,70,50,50)

​

​

​

Capture de l'affichage.PNG

Voici une capture du jeu avec seulement la première ligne codée du plateau.

Voici la console associée au jeu:

on voit bien que la liste ['D', 1, 1] , a bien un bateau car il y a un 1 au troisième élément, donc quand on cliquera sur la case D1, un bateau va s'afficher.

[['A', 1, 0], ['A', 2, 0], ['A', 3, 0], ['A', 4, 1], ['A', 5, 1], ['A', 6, 0], ['A', 7, 1], ['A', 8, 1], ['B', 1, 0], ['B', 2, 1], ['B', 3, 0], ['B', 4, 1], ['B', 5, 1], ['B', 6, 0], ['B', 7, 0], ['B', 8, 0], ['C', 1, 0], ['C', 2, 1], ['C', 3, 1], ['C', 4, 1], ['C', 5, 1], ['C', 6, 1], ['C', 7, 0], ['C', 8, 1], ['D', 1, 1], ['D', 2, 1], ['D', 3, 0], ['D', 4, 1], ['D', 5, 0], ['D', 6, 0], ['D', 7, 1], ['D', 8, 1], ['E', 1, 1], ['E', 2, 0], ['E', 3, 0], ['E', 4, 0], ['E', 5, 1], ['E', 6, 1], ['E', 7, 0], ['E', 8, 1], ['F', 1, 1], ['F', 2, 0], ['F', 3, 0], ['F', 4, 0], ['F', 5, 0], ['F', 6, 1], ['F', 7, 1], ['F', 8, 0], ['G', 1, 0], ['G', 2, 1], ['G', 3, 0], ['G', 4, 0], ['G', 5, 1], ['G', 6, 1], ['G', 7, 0], ['G', 8, 1], ['H', 1, 1], ['H', 2, 0], ['H', 3, 1], ['H', 4, 0], ['H', 5, 1], ['H', 6, 1], ['H', 7, 0], ['H', 8, 0]]

J'ai cependant un problème, il y a trop de bateaux qui apparaissent, comment réduire le taux d'apparition d'un bateau ?

Finalement, j'ai décidé de changer presence_bateau=int(random(0,2))

en presence_bateau=int(random(0,5))

Car il y avait trop de chance qu'un bateau apparaisse, donc en augmentant la possibilité d'un nombre en 0 et 5, cela réduit la chance d'avoir un 1 en troisième élément dans les listes. Cependant je garde mon idée de : si le troisième élément est un 1 il y a un bateau, si le troisième élément est un 0 ou un 2 ou un autre, il n'y a pas de bateau. 

J'ai ensuite continuer les séries de conditions pour chaque ligne, en changeant les coordonnées des y, et en changeant l'emplacement des listes à regarder.

Après avoir fini, voici ce que cela donne:

Capture jeu final.PNG

[['A', 1, 0], ['A', 2, 1], ['A', 3, 1], ['A', 4, 2], ['A', 5, 0], ['A', 6, 2], ['A', 7, 2], ['A', 8, 2], ['B', 1, 2], ['B', 2, 2], ['B', 3, 2], ['B', 4, 2], ['B', 5, 0], ['B', 6, 2], ['B', 7, 1], ['B', 8, 2], ['C', 1, 1], ['C', 2, 1], ['C', 3, 1], ['C', 4, 1], ['C', 5, 0], ['C', 6, 0], ['C', 7, 0], ['C', 8, 0], ['D', 1, 2], ['D', 2, 1], ['D', 3, 2], ['D', 4, 2], ['D', 5, 2], ['D', 6, 0], ['D', 7, 0], ['D', 8, 0], ['E', 1, 1], ['E', 2, 0], ['E', 3, 1], ['E', 4, 1], ['E', 5, 0], ['E', 6, 2], ['E', 7, 0], ['E', 8, 2], ['F', 1, 2], ['F', 2, 1], ['F', 3, 2], ['F', 4, 1], ['F', 5, 1], ['F', 6, 1], ['F', 7, 2], ['F', 8, 0], ['G', 1, 2], ['G', 2, 2], ['G', 3, 2], ['G', 4, 0], ['G', 5, 0], ['G', 6, 1], ['G', 7, 2], ['G', 8, 2], ['H', 1, 0], ['H', 2, 2], ['H', 3, 2], ['H', 4, 2], ['H', 5, 0], ['H', 6, 2], ['H', 7, 2], ['H', 8, 0]]

Je vais ensuite penser à mettre un nombre limite de coup

Séance du 8 Mars

C'est la dernière séance sur le projet, je n'ai pas essayé de rajouter des choses que je n'allais pas finir. J'ai cependant avancé mon oral et amélioré mon site.

Malgré ça, il manque beaucoup de choses pour que cela soit une vrai Bataille navale, par exemple:

-Avoir une nombre limité d'apparition de bateau

-Pouvoir être attaqué

-Pouvoir jouer à deux

​

​

bottom of page