Odyc.js

⚡ 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.

nomtypedescription
symbolstring ou string[]le template, ou une liste de template
xnumberLe numéro de la colonne
ynumberLe numéro de la rangée
isOnScreenbooleantrue si l’objet est à l’écran
visibleboolean
spritenumber ou string
dialogstring ou string[]
endstring 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 :

  1. Une nouvelle map sous forme de chaîne multilignes,
  2. 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 })