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 :

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.