Outils pour utilisateurs

Outils du site


nsi:tds:jeux:bataille_navale

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
nsi:tds:jeux:bataille_navale [2024/12/11 19:58] goupillwikinsi:tds:jeux:bataille_navale [2024/12/29 17:56] (Version actuelle) – [Mémoire des coups tirés] goupillwiki
Ligne 14: Ligne 14:
  
 ===== Les ingrédients nécessaires ===== ===== Les ingrédients nécessaires =====
 +
 +Tout d'abord, il est toujours préférable de placer dans des constantes les grands paramètres de jeu. Par exemple, ici, la grille a une largeur de 10 cases. Plutôt que d'écrire ''10'' un peut partout dans le programme, il est préférable d'écrire quelque chose comme ''TAILLE = 10'' et d'écrire ''TAILLE'' un peut partout dans le programme.
  
 ==== La grille de jeu ==== ==== La grille de jeu ====
Ligne 26: Ligne 28:
  
 <code python> <code python>
-def adresse_to_index(adresse:str) -> int:+def adresse_to_coords(adresse:str) -> int,int:
     """     """
     adresse: chaine comme "F5"     adresse: chaine comme "F5"
-    renvoie le numéro de la case. Pour "F5" le numéro est 54+    renvoie la ligne et la colonne. 
 +    Pour "F5", renvoie 5, 4
     """     """
 </code> </code>
Ligne 77: Ligne 80:
 ==== Lire, écrire ==== ==== Lire, écrire ====
  
-On veut une fonction ''lire(grille:list, adresse:str) -> int'' qui pour une grille de jeu et une adresse -- par exemple ''%%"B4"%%'' -- renvoie le contenu de la case.+On veut une fonction ''%%lire(grille:list, line:int, col:int) -> int%%'' qui pour une grille de jeu et une position donnée par sa ligne et sa colonne, renvoie le contenu de la case.
  
-Avec la grille précédente, il faut que ''%%lire(grille, "B4")%%'' renvoie ''2''.+Avec la grille précédente, il faut que ''%%lire(grille, 1, 3)%%'' renvoie ''2''.
  
-On veut une fonction ''ecrire(grille:list, adresse:str, valeur:int)'' permettant d'écrire la valeur indiquée à la position demandée dans la grille.+On veut une fonction ''ecrire(grille:list, line:int, col:int, valeur:int)'' permettant d'écrire la valeur indiquée à la position demandée dans la grille.
  
-Par exemple, si avec la grille précédente, on exécute ''%%ecrire(grille, "B5", 0)%%'', la grille devient :+Par exemple, si avec la grille précédente, on exécute ''%%ecrire(grille, 1, 3, 0)%%'', la grille devient :
  
 <code python> <code python>
Ligne 100: Ligne 103:
 ==== Coulé ==== ==== Coulé ====
  
-On a besoin d'une fonction ''coulé(grille:list, navire:int) -> bool''+On a besoin d'une fonction ''%%coulé(grille:list, navire:int) -> bool%%''
   * ''grille'' est la grille de jeu   * ''grille'' est la grille de jeu
   * ''navire'' est le numéro de navire, par exemple ''1'' pour le porte-avions   * ''navire'' est le numéro de navire, par exemple ''1'' pour le porte-avions
Ligne 109: Ligne 112:
 Quand on tire sur une flotte, on veut savoir si on a touché et éventuellement si on a coulé. Quand on tire sur une flotte, on veut savoir si on a touché et éventuellement si on a coulé.
  
-Il faut donc une fonction ''tir(flotte:list, adresse:str) -> (bool,bool)'',+Il faut donc une fonction ''%%tir(flotte:list, line:int, col:int) -> (bool,bool)%%'',
   * on précise en entrée la flotte de l'adversaire et la case ciblée,   * on précise en entrée la flotte de l'adversaire et la case ciblée,
   * la fonction doit renvoyer deux booléens. Le premier indique si un navire est touché et le second indique si un navire est coulé. Par exemple, le retour ''True, False'' indique que c'est « touché » mais pas « coulé ».   * la fonction doit renvoyer deux booléens. Le premier indique si un navire est touché et le second indique si un navire est coulé. Par exemple, le retour ''True, False'' indique que c'est « touché » mais pas « coulé ».
Ligne 117: Ligne 120:
  
 <code python> <code python>
-touché, coulé = tir(grille, "B6")+touché, coulé = tir(grille, 1, 7)
 # touché est True # touché est True
 # coulé est False # coulé est False
Ligne 135: Ligne 138:
 ==== vide ==== ==== vide ====
  
-On veut une fonction ''vide(grille:list) -> bool'' qui renvoie ''True'' quand la grille est vide.+On veut une fonction ''%%vide(grille:list) -> bool%%'' qui renvoie ''True'' quand la grille est vide.
  
 ==== grille aléatoire ==== ==== grille aléatoire ====
Ligne 148: Ligne 151:
  
 Il est plus confortable pour le joueur de garder la trace des tentatives qu'il a effectuées. On pourrait alors entretenir une grille de même format que la précédente mais qui contiendrait : Il est plus confortable pour le joueur de garder la trace des tentatives qu'il a effectuées. On pourrait alors entretenir une grille de même format que la précédente mais qui contiendrait :
-  * '0' pour une case dans laquelle on n'a pas encore tiré, +  * ''0'' pour une case dans laquelle on n'a pas encore tiré, 
-  * '1' pour un tir qui a touché, +  * ''1'' pour un tir qui a touché, 
-  * '-1' pour un coup à l'eau+  * ''2'' pour un coup à l'eau
  
-Il faudrait donc maintenir cette grille à jour au cours de la partie. De plus, pour qu'elle ait un intérêt, il faudrait prévoir une fonction d'affichage. Un affichage texte en console est tout à fait possible.+Il faudrait donc maintenir cette grille à jour au cours de la partie. De plus, pour qu'elle ait un intérêt, il faudrait prévoir une fonction d'affichage. Un affichage texte en console est tout à fait possible. Voici un exemple :
  
 +<code>
 +def affichage_cible(cible):
 +    SYMBOLES = " XO"
 +    result =" "
 +    for i in range(TAILLE):
 +        result += f"{i+1:02d}"
 +    for i, item in enumerate(cible):
 +        if i%TAILLE == 0:
 +            line = i//TAILLE
 +            result += "\n\n"
 +            result += chr(line + 65)
 +        result += " " + SYMBOLES[item]
 +    return result
 +</code>
  
 ===== Tout mettre ensemble ===== ===== Tout mettre ensemble =====
nsi/tds/jeux/bataille_navale.1733943495.txt.gz · Dernière modification : de goupillwiki