JavaScript

Transcription

JavaScript
JavaScript - Sudoku
Vous mourrez d’envie de réaliser une interface pour le jeu Sudoku qui ressemble à ce qui est présenté
en figure 1. Hormis les ressources à intégrer pour bénéficier de Bootstrap, jQuery et jQuery UI, votre
solution devra contenir 3 fichiers :
— sudoku.html
— sudoku.css
— sudoku.js
Figure 1 – Interface Sudoku
La structure du fichier sudoku.html est la suivante :
Syntaxe
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
1
<title>Sudoku</title>
<link rel="stylesheet" href="ressources/jquery-ui.min.css">
<link rel="stylesheet" href="ressources/bootstrap.min.css">
<link rel="stylesheet" href="sudoku.css">
</head>
<body>
<!-- the body -->
<script src="ressources/jquery-2.1.4.min.js"></script>
<script src="ressources/jquery-ui.min.js"></script>
<script src="ressources/bootstrap.min.js"></script>
<script src="sudoku.js"></script>
</body>
</html>
Pour le plateau (board), on pourra construire un élément <table> contenant 9 lignes (<tr>)
de 9 cellules (<td>). Chaque élement <td> contiendra un élément <div> avec 2 attributs data-r
et data-l. Par exemple la dernière cellule de la première ligne aura respectivement 1 et 9 comme
valeurs de data-r et data-l. Saviez-vous que pour les attributs “personnels”, il fallait préfixer par
data- ? Finalement dans chacun des ces éléments <div>, on glissera un élément <span> qui aura
pour rôle de contenir un chiffre (c’est-à-dire, une valeur entre 0 et 9).
Pour assurer un bon affichage de la grille (et notamment que les cellules soient carrées), on pourra
utiliser l’astuce de cette page. Cela donne en supposant que l’attribut id de note élement <table>
a la valeur "board" :
Syntaxe
#board {
...
}
#board td {
...
position: relative;
}
#board td::after {
content: "";
display: block;
margin-top: 100%;
}
#board td div {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
text-align: center;
}
Pour le JavaScript, on pourra utiliser les facilités de jQuery. Une bonne idée pour éviter toute
redondance est de gérer directement les chiffres placées à l’intérieur des éléments HTML. Pourquoi ne
pas partir sur la définition de ces trois fonctions, déclarées dans un objet représentant le jeu (créer un
objet évite de polluer l’objet global avec de nouvelles variables et fonctions).
2
Syntaxe
// Retourne la cellule (div) dont les coordonnees sont donnees.
cellAt: function (row, col) {
/* 1 seule ligne en jQuery */
},
// Retourne le chiffre dans la cellule dont les coordonnes sont donnes
// Retourne 0 si pas de valeur
getDigitAt: function (row, col) {
/* 2 lignes devraient suffire */
},
// Positionne le chiffre donne (potentiellement la chaine vide) dans la
cellule dont les coordonnes sont donnes.
// Le parametre fixed indique si le chiffre est initialement donnee dans
la grille.
setDigitAt: function (row, col, digit, fixed) {
/* 4 lignes au plus, si on veut gerer les chiffres figes (en
utilisant une classe ?) */
},
3

Documents pareils