nsi:jeu:puissance4
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| nsi:jeu:puissance4 [2021/10/22 23:35] – ↷ Page déplacée de nsi:tds:serveur_web20:nsi:jeu:puissance4 à nsi:jeu:puissance4 goupillwiki | nsi:jeu:puissance4 [2022/12/09 12:14] (Version actuelle) – goupillwiki | ||
|---|---|---|---|
| Ligne 73: | Ligne 73: | ||
| //Bien que j'ai noté ce tableau sur plusieurs lignes, il s'agit bien d'un tableau à une dimension puisqu' | //Bien que j'ai noté ce tableau sur plusieurs lignes, il s'agit bien d'un tableau à une dimension puisqu' | ||
| + | |||
| + | <code python> | ||
| + | # c'est exactement le même tableau du point de vue de Python : | ||
| + | [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 1, 2, 2, 1, 0, 0, 2, 1, 1, 1, 2, 2, 0] | ||
| + | </ | ||
| === Créer une grille vide === | === Créer une grille vide === | ||
| <code python linenums: | <code python linenums: | ||
| - | def make_empty_grid(): | + | def make_empty_grid() |
| """ | """ | ||
| Renvoie un tableau de LIGNES * COLS cases et ne contenant que des 0 | Renvoie un tableau de LIGNES * COLS cases et ne contenant que des 0 | ||
| Ligne 87: | Ligne 92: | ||
| <code python linenums: | <code python linenums: | ||
| - | def read(grid, lig, col): | + | def read(grid:list, lig:int, col:int) -> int: |
| """ | """ | ||
| grid: tableau de LIGNES * COLS éléments | grid: tableau de LIGNES * COLS éléments | ||
| Ligne 109: | Ligne 114: | ||
| # SYMBOLS[0] correspond à une case vide. | # SYMBOLS[0] correspond à une case vide. | ||
| - | def display(grid): | + | def grid_to_str(grid:list) -> str: |
| """ | """ | ||
| grid: tableau de LIGNES * COLS éléments | grid: tableau de LIGNES * COLS éléments | ||
| - | | + | |
| """ | """ | ||
| # création d'une grille avec les symboles au lieu des numéros | # création d'une grille avec les symboles au lieu des numéros | ||
| Ligne 134: | Ligne 139: | ||
| <code python linenums: | <code python linenums: | ||
| - | def col_is_full(grid, | + | def col_is_full(grid:list, col:int) -> bool: |
| """ | """ | ||
| grid: tableau de LIGNES * COLS éléments | grid: tableau de LIGNES * COLS éléments | ||
| Ligne 148: | Ligne 153: | ||
| <code python linenums: | <code python linenums: | ||
| - | def grid_is_full(grid): | + | def grid_is_full(grid:list) -> bool: |
| """ | """ | ||
| grid: tableau de LIGNES * COLS éléments | grid: tableau de LIGNES * COLS éléments | ||
| Ligne 161: | Ligne 166: | ||
| <code python linenums: | <code python linenums: | ||
| - | def insert(grid, | + | def insert(grid:list, col:int, player:int): |
| """ | """ | ||
| grid: tableau de LIGNES * COLS éléments | grid: tableau de LIGNES * COLS éléments | ||
| Ligne 171: | Ligne 176: | ||
| </ | </ | ||
| - | === Vérifier | + | === Vérifier |
| - | Cette partie est plus difficile. L' | + | Cette partie est plus difficile. L' |
| * On choisit une orientation -- diagonale ↘, diagonale ↗, verticale, horizontale | * On choisit une orientation -- diagonale ↘, diagonale ↗, verticale, horizontale | ||
| * On choisit un point de départ, par exemple le coin supérieur gauche | * On choisit un point de départ, par exemple le coin supérieur gauche | ||
| - | * On parcours la grille depuis ce point de départ | + | * On parcourt cet alignement du point de départ |
| - | * Quand on en rencontre une quantité suffisante pour faire un alignement on répond que la fonction a trouvé un alignement. | + | |
| - | * Si on atteint un bord sans trouver d' | + | |
| - | + | ||
| - | Voici un algorithme possible | + | |
| <code lang-none> | <code lang-none> | ||
| + | FONCTION get_line | ||
| ENTRÉES | ENTRÉES | ||
| - | | + | |
| - | pas: déplacement à faire d'un case à l' | + | pas: déplacement à faire d'un case à l' |
| - | | + | |
| + | SORTIE: une chaîne de caractères line valeurs de l' | ||
| DÉBUT | DÉBUT | ||
| - | | + | |
| - | soit 0 le contenu en cours | + | soit line une chaine vide |
| - | soit 0 la valeur du compteur | + | TANT QUE position en cours à l' |
| - | | + | |
| - | soit j le contenu de la grille | + | |
| - | SI j == 0 ALORS | + | |
| - | | + | |
| - | SINON SI j == contenu en cours ALORS | + | |
| - | augmenter | + | |
| - | SINON | + | |
| - | contenu en cours devient égal à j | + | |
| - | Le compteur passe à 1 | + | |
| FIN | FIN | ||
| - | | + | RENVOYER |
| - | | + | |
| - | FIN | + | |
| - | changer la position courante selon le pas | + | |
| - | FIN | + | |
| - | RENVOYER FAUX | + | |
| FIN | FIN | ||
| </ | </ | ||
| - | | ||
| - | Traduisez cet algorithme en fonction. | ||
| - | < | + | //Exemple :// |
| - | def line_has_victory(grid, | + | < |
| - | """ | + | 0000000 |
| - | grid: grille de jeu | + | 0000000 |
| - | step: paire (step_lig, | + | 0010000 |
| - | start: paire (start_lig, start_col) indiquant la position de départ | + | 0022200 |
| - | | + | 0012120 |
| - | """ | + | 1121211 |
| - | # À vous ! | + | |
| </ | </ | ||
| - | | + | Si on se donne '' |
| Exemple d' | Exemple d' | ||
| - | * '' | + | * '' |
| - | * '' | + | * '' |
| - | * '' | + | * '' |
| - | * '' | + | * '' |
| - | * '' | + | * '' |
| + | |||
| + | On ajoute une deuxième fonction pour compter le nombre max de répétitions d'un symbole : | ||
| + | |||
| + | <code python> | ||
| + | def line_has_victory(line: | ||
| + | ''' | ||
| + | line: chaîne représentant un alignement. ex : " | ||
| + | valeur: valeur recherchée. ex : 1 | ||
| + | renvoie True si line contient un alignement assez long | ||
| + | ex: ici non, il n'y a que 3 fois le 1 à la suite | ||
| + | ''' | ||
| + | </ | ||
| Et maintenant vous pouvez envisager une fonction qui parcours toutes les lignes possibles à la recherche d'une victoire. | Et maintenant vous pouvez envisager une fonction qui parcours toutes les lignes possibles à la recherche d'une victoire. | ||
| <code python linenums: | <code python linenums: | ||
| - | def grid_has_victory(grid): | + | def grid_has_victory(grid:list) -> bool: |
| """ | """ | ||
| grid: grille de jeu | grid: grille de jeu | ||
| Ligne 255: | Ligne 257: | ||
| TO_WIN = 4 # Nombre de jetons à aligner pour gagner | TO_WIN = 4 # Nombre de jetons à aligner pour gagner | ||
| - | def make_empty_grid(): | + | def make_empty_grid() |
| """ | """ | ||
| Renvoie un tableau de LIGNES * COLS cases et ne contenant que des 0 | Renvoie un tableau de LIGNES * COLS cases et ne contenant que des 0 | ||
| Ligne 261: | Ligne 263: | ||
| # à vous de compléter | # à vous de compléter | ||
| | | ||
| - | def read(grid, lig, col): | + | def read(grid:list, lig:int, col:int) -> int: |
| """ | """ | ||
| grid: tableau de LIGNES * COLS éléments | grid: tableau de LIGNES * COLS éléments | ||
| Ligne 276: | Ligne 278: | ||
| # SYMBOLS[0] correspond à une case vide. | # SYMBOLS[0] correspond à une case vide. | ||
| - | def display(grid): | + | def grid_to_str(grid:list) -> str: |
| """ | """ | ||
| grid: tableau de LIGNES * COLS éléments | grid: tableau de LIGNES * COLS éléments | ||
| - | | + | |
| """ | """ | ||
| # création d'une grille avec les symboles au lieu des numéros | # création d'une grille avec les symboles au lieu des numéros | ||
| Ligne 287: | Ligne 289: | ||
| return " | return " | ||
| - | def col_is_full(grid, | + | def col_is_full(grid:list, col:int) -> bool: |
| """ | """ | ||
| grid: tableau de LIGNES * COLS éléments | grid: tableau de LIGNES * COLS éléments | ||
| Ligne 295: | Ligne 297: | ||
| # à vous... | # à vous... | ||
| - | def grid_is_full(grid): | + | def grid_is_full(grid:list) -> bool: |
| """ | """ | ||
| grid: tableau de LIGNES * COLS éléments | grid: tableau de LIGNES * COLS éléments | ||
| Ligne 302: | Ligne 304: | ||
| # à vous... | # à vous... | ||
| - | def insert(grid, | + | def insert(grid:list, col:int, player:int): |
| """ | """ | ||
| grid: tableau de LIGNES * COLS éléments | grid: tableau de LIGNES * COLS éléments | ||
| Ligne 311: | Ligne 313: | ||
| # À vous ! | # À vous ! | ||
| - | def line_has_victory(grid, step, start): | + | def get_line(grid:list, step:tuple, start:tuple) -> str: |
| """ | """ | ||
| grid: grille de jeu | grid: grille de jeu | ||
| step: paire (step_lig, | step: paire (step_lig, | ||
| start: paire (start_lig, start_col) indiquant la position de départ | start: paire (start_lig, start_col) indiquant la position de départ | ||
| - | renvoie | + | renvoie |
| """ | """ | ||
| # À vous ! | # À vous ! | ||
| - | def grid_has_victory(grid): | + | def line_has_victory(line: |
| + | ''' | ||
| + | line: chaîne représentant un alignement. ex : " | ||
| + | valeur: valeur recherchée. ex : 1 | ||
| + | renvoie True si line contient un alignement assez long | ||
| + | ex: ici non, il n'y a que 3 fois le 1 à la suite | ||
| + | ''' | ||
| + | |||
| + | def grid_has_victory(grid:list) -> bool: | ||
| """ | """ | ||
| grid: grille de jeu | grid: grille de jeu | ||
| Ligne 333: | Ligne 343: | ||
| <code python linenums> | <code python linenums> | ||
| - | """ | + | # main.py |
| - | module: | + | |
| - | """ | + | |
| from fonctionspuissance4 import * | from fonctionspuissance4 import * | ||
| Ligne 342: | Ligne 350: | ||
| Ensuite le jeu suit l' | Ensuite le jeu suit l' | ||
| - | <code lang:none linenums> | + | <code lang-none> |
| DÉBUT | DÉBUT | ||
| - | | + | |
| - | afficher la grille | + | |
| - | joueur en cours est 1 | + | |
| - | partie_finie est faux | + | |
| - | TANT QUE partie finie est faux RÉPÉTER | + | |
| - | demander au joueur en quelle colonne il souhaite jouer | + | |
| - | jouer le coup pour le joueur en cours | + | |
| afficher la grille | afficher la grille | ||
| - | SI la grille contient une victoire ALORS | + | |
| - | partie_finie passe à vrai | + | partie_finie est faux |
| - | afficher un message indiquant la victoire du joueur | + | TANT QUE partie finie est faux RÉPÉTER |
| - | SINON SI la grille est pleine ALORS | + | demander au joueur en quelle colonne il souhaite jouer |
| - | partie_finie passe à vrai | + | jouer le coup pour le joueur en cours |
| - | afficher un message indiquant le match nul | + | afficher la grille |
| + | | ||
| + | partie_finie passe à vrai | ||
| + | afficher un message indiquant la victoire du joueur | ||
| + | SINON SI la grille est pleine ALORS | ||
| + | partie_finie passe à vrai | ||
| + | afficher un message indiquant le match nul | ||
| + | SINON | ||
| + | changer de joueur | ||
| + | FIN | ||
| FIN | FIN | ||
| - | FIN | ||
| FIN | FIN | ||
| </ | </ | ||
| À vous de compléter le fichier '' | À vous de compléter le fichier '' | ||
nsi/jeu/puissance4.1634938522.txt.gz · Dernière modification : de goupillwiki
