🏠 Accueil

Une histoire de pizzas : la grille

(lecture : 6 minutes) — sĂ©rie : Ergogames, une histoire de pizzas

En dĂ©but d’annĂ©e, j’ai passĂ© du temps Ă  dĂ©velopper un mini-jeu pour les Ergogames. Le principe des Ergogames est simple : faire dĂ©couvrir des principes d’ergonomie Ă  travers des jeux qui illustrent diffĂ©rents concepts. Ceux-ci sont conçus par deux anciennes collĂšgues ergonomes, Marion et Margaux, via l’agence de design uxShadow de Sogilis (mon ancienne boite).

Elles m’ont demandĂ© si je pouvais leur donner un coup de main et j’ai acceptĂ© Ă  condition que le code soit ouvert (ça se passe ici 😊).

J’ai donc dĂ©veloppĂ© le mini-jeu « À vous les pizzas ! » en prĂ©cisant bien que je n’avais jamais conçu de jeux mais que c’est pas grave, « je vais apprendre ». Du coup j’ai effectivement appris, et c’est ce cheminement que j’aimerais partager maintenant Ă  travers une sĂ©rie d’articles. Je prĂ©viens tout de suite : je n’ai aucune idĂ©e de si je finirai cette sĂ©rie, mais enfin, je l’aurai au moins commencĂ©e. Si vous cherchez le code du jeu en lui-mĂȘme, il se trouve ici.

Le but de la sĂ©rie va ĂȘtre de redĂ©velopper le jeu pas Ă  pas. Je n’irai pas aussi loin que celui des Ergogames pour me simplifier la vie, mais nous verrons quand mĂȘme les principaux mĂ©canismes. Le principe du jeu est de dĂ©placer un personnage (Meiko) dans une cuisine en cliquant de case en case pour lui faire fabriquer une pizza. Je vous laisse jouer au jeu sur le site des Ergogames pour dĂ©couvrir le principe d’ergonomie qui est illustrĂ© ici. Le rĂ©sultat ressemble Ă  cela :

Capture d’écran du jeu montrant Meiko au milieu d’une cuisine

Le jeu sera dĂ©veloppĂ© en HTML, CSS et JavaScript avec la librairie VueJS afin de rester le plus proche possible de ce qui a Ă©tĂ© fait initialement. J’éviterai tout de mĂȘme toute Ă©tape de build qui consisterait Ă  transformer le code JS en un seul fichier optimisé : c’est ce qui est fait pour les Ergogames mais ça complexifierait la comprĂ©hension sans rien apporter de plus. Je vais Ă©galement m’éviter quelques bonnes pratiques en mixant allĂšgrement tout le code (HTML, JS et CSS) au sein d’un mĂȘme fichier (ne faites pas ça chez vous).

Dans ce premier article qui servait essentiellement Ă  introduire la sĂ©rie, on va se contenter d’afficher un cadre de 6 par 6 cases. Comme je l’ai dit plus haut, je n’avais encore jamais dĂ©veloppĂ© de jeu, donc j’ai avancĂ© de maniĂšre trĂšs naĂŻve. Il me semblait Ă©vident que la premiĂšre phase consisterait Ă  dessiner le tableau de jeu.

Cela permet en plus d’introduire Ă  la fois un peu de HTML, de CSS et de JS et donc de poser les bases. Pour reprĂ©senter le cadre, on va se contenter de 6 balises <div> pour les lignes, dĂ©coupĂ©es elles-mĂȘmes en 6 autres balises <div> pour les cellules. On va s’éviter tout de suite de copier-coller plein de code HTML et on va donc ajouter VueJS immĂ©diatement et rĂ©pĂ©ter ces blocs avec des boucles v-for. Ça donne quelque chose que j’espĂšre simple :

<div id="app">
    <div class="board">
        <!--
            la variable size est passée par VueJS et a pour valeur 6. On répÚte
            donc 6 fois la div "board-line", au sein desquelles on répÚte 6
            fois la div "board-cell".
        -->
        <div v-for="y in size" :key="y" class="board-line">
            <div v-for="x in size" :key="x" class="board-cell">
            </div>
        </div>
    </div>
</div>

<!--
    J’ajoute la librairie VueJS via un CDN, mais dans la vraie vie prĂ©fĂ©rez
    hĂ©berger le code vous-mĂȘme, c’est meilleur pour la vie privĂ©e de vos
    visiteurs et visiteuses.
-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

<script>
    const BOARD_SIZE = 6;

    // Un tout petit peu de JS pour dire Ă  VueJS de "monter" l'application sur
    // la balise possédant l'id #app et passer la variable size. Je ne rentre
    // pas dans le dĂ©tail ici, ce n’est pas trĂšs important.
    const app = new Vue({
        el: '#app',
        data: {
            size: BOARD_SIZE,
        },
    });
</script>

Avec ça, on a la base de notre code HTML, par contre ça ne ressemble à rien. On va donc ajouter un zeste de CSS pour rendre le tout visuel :

/*
    Ici on définit quelques variables CSS, c'est pas forcé mais ça aidera à
    la maintenance du code.
*/
#app {
    --cell-size: 128px;

    --color-floor: #fff;
    --color-floor-border: #ccc;
}

/*
    Une ligne est un conteneur flex, ça permet de se simplifier la vie pour
    aligner les cellules. La conséquence ici est que les .board-cell seront
    affichées en lignes et non pas en colonnes.
*/
.board-line {
    display: flex;
}

/*
    Puis on dĂ©finit la taille des cellules ainsi qu’une couleur de fond et
    de bordure pour les mettre en évidence.
*/
.board-cell {
    width: var(--cell-size);
    height: var(--cell-size);

    background-color: var(--color-floor);
    border: 1px solid var(--color-floor-border);
}

Avec ça on a un cadre que l’on va pouvoir amĂ©liorer par petites touches pour arriver au jeu final. Le rĂ©sultat final est visible ici (n’hĂ©sitez pas Ă  ouvrir la console de votre navigateur pour regarder le code).

J’ai essayĂ© ici de dĂ©tailler au mieux ce que je faisais pour faciliter la comprĂ©hension du code afin de rendre ma sĂ©rie d’articles accessible au plus de monde possible, en particulier aux dĂ©butant·es. N’hĂ©sitez pas Ă  me contacter si des choses ne sont pas claires !

Le prochain article explique comment afficher les éléments dans le jeu.

Revenir à la série