lightsout
Deutsch   English   Français   

LIGHTS OUT GAME

 

 

DESCRIPTION DU JEU

 

Le jeu se compose de 25 lampes disposées dans une grille de 5 × 5 cases. Au début du jeu, toutes les lampes sont allumées. Lorsque tu cliques sur une lampe, son état ainsi que celui des quatre lampes voisines est inversé : les lampes allumées s'éteignent et les lampes éteintes s'allument.

 

Le but du jeu est d'éteindre toutes les lampes.

Programme:

# LightsOut.py
from gamegrid import *
            
def pressCallback(e):
     loc = toLocationInGrid(e.getX(), e.getY())
     locs  = [0] * 5
     locs[0] = Location(loc.x, loc.y)
     locs[1] = Location(loc.x, loc.y - 1)
     locs[2] = Location(loc.x, loc.y + 1)
     locs[3] = Location(loc.x - 1, loc.y)
     locs[4] = Location(loc.x + 1, loc.y)
 
     for i in range(5):
         a = getOneActorAt(locs[i])
         if a != None:
              a.showNextSprite()
     refresh()
     return True    

makeGameGrid(5, 5, 50, Color.black, False, 
     mousePressed = pressCallback)
setTitle("LightsOut")
for i in range(5):
     for k in range(5):
          lamp = Actor("sprites/lightout.gif", 2)
          addActor(lamp, Location(i, k))
          lamp.show(1)     
show()
doRun()
► Copy to clipboard

 

 

Explication du code

 
1.

Création de la fenêtre de jeu
La fenêtre de jeu se compose de 5 lignes et de 5 colonnes. Nous créons d'abord une lampe allumée dans chacune des 25 cases à l'aide de l'instruction (lamp.show(1).

2.

Détermination de la position du clic
Dans la fonction de rappel (callback) pressCallback(), on détermine d'abord la position loc du click de souris dans la grille. Cette position possède les coordonnées x et y.

3.

Création de la liste des positions
On crée ensuite une liste contenant les positions (Locations) des 5 lampes concernées.
L'instruction locs = [0] * 5 crée une liste de 5 éléments qui seront remplacés par des objets Location. Les positions des cases voisines sont définies conformément au schéma ci-dessous.

 

4.

Inversion de l'état des lampes
Finalement, l'état des lampes concernées est inversé à l'aide de la méthode showNextSprite().
Lorsque tu cliques sur une case située au bord de la grille, certaines cases voisines se trouvent en dehors de la fenêtre de jeu.

Il faut donc vérifier, à l'aide de l'instruction if a != None: qu'une lampe existe bien dans la case concernée.

5.

Actualisation de la fenêtre de jeu
Comme nous ne lançons aucune animation, nous devons actualiser l'affichage du jeu après chaque clic à l'aide de la fonction refresch().