L’état du jeu
Pour modifier la grille ou obtenir des informations sur le jeu, vous pouvez utiliser l’objet game
, qui fournit un ensemble de méthodes dédiées
Lire/modifier une case à une position donnée
getCellAt
getCellAt
permet d’obtenir une case à une position donnée, puis de modifier ses propriétés:
const game = createGame()
const cell = game.getCellAt(9, 4)
cell.visible = false
Note
Les propriétés sont les mêmes que pour la cible des évènements.
setCellAt
setCellAt
permet d’appliquer un template à une case, si la case a déjà des paramètres ceux-ci seront écrasés.
game.setCellAt(3, 2, '#')
updateCellAt
Cette méthode permet de modifier plusieurs propriétés d’un élément à une position donnée.
Elle prend trois paramètres : x
, y
, et un objet contenant les propriétés à modifier.
game.updateCellAt(3, 4, {
visible: false,
dialog: 'Je suis invisible'
})
clearCellAt
Pour supprimer une case.
game.clearCellAt(3, 4)
Lire/modifier plusieurs cases
Il est également possible, de lire ou appliquer des modifications à plusieurs cases à la fois.
Query
Pour ce faire vous devrez utiliser une query qui décrira à quelles cases vous vous adresser.
nom | type | description |
---|---|---|
symbol | string ou string[] | le template, ou une liste de template |
x | number | Le numéro de la colonne |
y | number | Le numéro de la rangée |
isOnScreen | boolean | true si l’objet est à l’écran |
visible | boolean | |
sprite | number ou string | |
dialog | string ou string[] | |
end | string ou string[] |
getCells
Pour obtenir plusieurs cases
, il faut utiliser la méthode getCells(query)
const walls = game.getCells({ solid: true })
setCells
setCells
vous permet d’appliquer un template
à plusieurs cases.
game.setCells({ isOnScreen: true }, '#')
updateCells
La méthode updateCells
permet de modifier plusieurs cases en une seule fois. Elle prend en paramètre une query
suivi des paramètres à modifier.
game.updateCells({ symbol: ['x', '#'], visible: true }, { sprite: 3, solid: true })
clearCells
Vous pouvez supprimer plusieurs cases d’un coup avec clearCells
.
game.clearCells({ visible: false, x: 4 })
sendMessageToCells
Cette méthode vous permet de déclencher la méthode onMessage
sur toutes les cases ciblées. Elle prend en paramètre une query
suivi du message qui est optionnel est peut-être de n’importe quel type.
game.sendMessageToCells({ symbols: 'x' }, 'éteindre')
player
L’objet game.player
permet d’accéder au joueur, et de modifier sa position
, sa sprite
et sa propriété visible
:
game.player.position = [5, 6]
game.player.sprite = `
..1..
.111.
11111
.1.1.
.1.1.
`
game.player.visible = false
L’objet player
expose également la valeur direction
. Elle est en lecture seule et reflète la dernière direction tentée par le joueur. Elle est mise à jour à chaque fois que le joueur appuie sur une touche de déplacement, même si le mouvement échoue (par exemple à cause d’un mur).
const dir = game.player.direction
// Exemple : [0, -1] pour un déplacement vers le haut
turn
game.turn
vous permet de connaître le nombre de tours écoulés depuis le début de la partie. Un tour correspond à une tentative de déplacement.
width
et height
Pour obtenir les dimensions du monde, utilisez les propriétés game.width
et game.height
.
Ces propriétés sont en lecture seule.
alert(`largeur : ${game.width}, hauteur : ${game.height}`)
loadMap
Pour charger une nouvelle carte, utilisez game.loadMap()
.
La méthode prend deux paramètres :
- Une nouvelle
map
sous forme de chaîne multilignes, - Une position optionnelle pour replacer le joueur.
game.loadMap(
`
########
#......#
#......#
#......#
#......#
#......#
#......#
########
`,
[3, 5]
)
🎛️ updateFilter
Vous pouvez mettre à jour les paramètres du filtre en cours avec la méthode updateFilter
.
Elle prend en argument un objet contenant les réglages à modifier (les autres resteront inchangés).
const game = createGame({
filter: {
name: 'fractal',
settings: {
sideCount: 12,
scale: 0.9,
rotation: 0
}
}
})
game.updateFilter({
scale: 0.3
})
Attention
updateFilter
ne permet pas de changer le nom du filtre, uniquement ses réglages.
🚫 clear
La méthode clear()
permet de stopper le jeu et remplacer l’affichage par une couleur unie :
game.clear() // Efface avec la couleur de fond
// ou
game.clear('0') // Efface avec une couleur spécifique
Paramètre :
color
(string|number, optionnel) : Couleur d’effacement. Si non spécifiée, utilise la couleur de fond du jeu.
Note
Généralement pas nécessaire, mais peut être utile dans certains cas comme entre une scène avec un message ouvert et une autre scène.
🧠 Comportement de rendu
Odyc redessine automatiquement l’écran à chaque fois que l’état du jeu change.
Si vous modifiez une propriété comme sprite
, position
, dialog
, visible
…, le jeu est mis à jour immédiatement :
game.player.sprite = newSprite
game.setCellAt(3, 4, { visible: false })