CoddyRun

Parcours Le démineur Étape 1

Étape 1 sur 6

La grille et ses mines

Créer deux grilles de 9 × 9 (les mines et l'état des cases), placer 10 mines au hasard sans doublon, et les afficher pour vérifier.

Notions :deux tableaux à deux dimensionstirage sans doublon

Le résultat final du parcours : Le démineur
Le résultat final du projet
Ce qu'il faut savoir

Le démineur a besoin de deux grilles de 9 × 9 :

  • mines[l][c] vaut 1 s'il y a une mine, 0 sinon ;
  • etat[l][c] dit ce que voit le joueur : 0 pour une case cachée, 1 pour une case découverte (et bientôt 2 pour un drapeau).

Séparer ce qui est de ce qu'on voit rend tout le programme plus clair.

Placer 10 mines, pas 9

On tire une case au hasard et on y pose une mine… mais le hasard peut retomber sur une case déjà minée ! Avec une simple boucle répète 10 fois, on aurait parfois 9 mines, ou moins. On compte donc les mines réellement posées :

tant que placees < 10
    ml vaut hasard(0, 8)
    mc vaut hasard(0, 8)
    si mines[ml][mc] = 0 alors
        mines[ml][mc] vaut 1
        placees ajoute 1
    fin si
fin tant que

Vérifier

Pour l'instant, on dessine la grille entièrement découverte, en « mode triche » : comptez les mines, il doit y en avoir exactement 10. Les cases font 30 pixels, sous une bande d'informations de 30 pixels.

Code de départ

Ouvrez CoddyRun et partez d'un programme vide : tout commence ici.

Pas encore CoddyRun ?

Il te faut le logiciel pour faire cette étape. Il est gratuit : crée ton compte pour le télécharger, puis reviens ici, ta place t'attend.

Créer mon compte et télécharger
Besoin d'aide ?
Indice 1

Déclarez plateau est une toile (270 × 300) et mines, etat est un tableau.

Indice 2

La procédure placerMines déclare ses variables locales ml, mc, placees.

Indice 3

appelle dessinerPlateau(vrai) dessine toutes les cases, comme si elles étaient découvertes.

Voir la solution complète

Essayez d'abord par vous-même : c'est en cherchant qu'on apprend. La solution sert à vérifier ou à se débloquer.

@ Les déclarations
plateau est une toile
mines, etat est un tableau

procédure placerMines()
    ml, mc, placees est un nombre
    placees vaut 0
    tant que placees < 10
        ml vaut hasard(0, 8)
        mc vaut hasard(0, 8)
        // on ne compte la mine que si la case était libre
        si mines[ml][mc] = 0 alors
            mines[ml][mc] vaut 1
            placees ajoute 1
        fin si
    fin tant que
fin procédure
@ Le dessin
procédure dessinerPlateau(toutMontrer)
    px, py, nb est un nombre
    effacer(plateau)
    remplir(plateau, #2D3436)
    label(plateau, 8, 20, "Démineur : 10 mines", #FFFFFF, 14)
    pour ly de 0 à 8
        pour cx de 0 à 8
            px vaut cx * 30
            py vaut 30 + ly * 30
            si etat[ly][cx] = 1 ou toutMontrer alors
                // une case découverte
                rectangle(plateau, px + 1, py + 1, 28, 28, #DFE6E9)
                si mines[ly][cx] = 1 alors
                    cercle(plateau, px + 15, py + 15, 8, #2D3436)
                    ligne(plateau, px + 6, py + 15, px + 24, py + 15, #2D3436, 2)
                    ligne(plateau, px + 15, py + 6, px + 15, py + 24, #2D3436, 2)
                fin si
            sinon
                // une case encore cachée
                rectangle_arrondi(plateau, px + 1, py + 1, 28, 28, 4, #74B9FF)
            fin si
        fin pour
    fin pour
    affiche plateau
fin procédure

@ Programme principal
dimension(plateau, 270, 300)
pour l de 0 à 8
    pour c de 0 à 8
        mines[l][c] vaut 0
        etat[l][c] vaut 0
    fin pour
fin pour
appelle placerMines()
appelle dessinerPlateau(vrai)

Ce parcours te plaît ?

Crée ton compte gratuit et construis le projet en entier, étape par étape.

Créer mon compte gratuit J'ai déjà un compte