Chapitre 12. Pour qui sont ces serpents, correction

Table des matières

Première version simpliste
Attention aux bords
Un vrai serpent
Grandir
Enfin…
En prime

Correction des exercices du Chapitre 6, Pour qui sont ces serpents ?.

Première version simpliste

# -*- coding: utf-8 -*-
import curses  # pour le dessin
import time    # pour la mesure du temps d'attente

# renvoie la nouvelle direction après appui sur la touche "DROITE"
def droite() :
    if direction == DROITE : return BAS
    elif direction == BAS : return GAUCHE
    elif direction == GAUCHE : return HAUT
    else : return DROITE

# renvoie la nouvelle direction après appui sur la touche "GAUCHE"
def gauche() :
    if direction == DROITE : return HAUT
    elif direction == HAUT : return GAUCHE
    elif direction == GAUCHE : return BAS
    else : return DROITE

# calcule la nouvelle position et place le serpent
def deplace() :
    l = ligne + direction[LGN]
    c = colonne + direction[COL]
    ecran.addch(l,c,'O')
    return l,c
   
ecran = curses.initscr() # intialisation de l'écran
ecran.nodelay(True)      # pas d'attente sur getch()
ecran.keypad(True)       # UN code sur les touches de fonctions
curses.curs_set(False)   # cacher le curseur

# définitions des directions de déplacement
DROITE = (0,1)
GAUCHE = (0,-1)
HAUT = (-1,0)
BAS = (1,0)

# indices pour les accès aux éléments d'un couple de  coordonénes
LGN = 0
COL = 1

# initialisations du positionnement du serpent
hauteur, largeur = ecran.getmaxyx()  # taille de l'écran
ligne,colonne = hauteur/3,largeur/3  # position (de départ : arbitraire!)
direction = DROITE                   # directon (de départ : arbitraire!)

c=''                    # pour que c existe à la ligne suivante
while c <> ord('q'):    # tant qu'on n'a pas appuyé sur la touche 'q'
    ecran.clear()       # effacer l'écran
    ligne,colonne = deplace()
                        # calcule la nouvelle position et place le serpent
    time.sleep(0.1)     # attente pour ralentir (arbitraire!)
    c=ecran.getch()     # saisie de l'appui sur une touche du clavier
    if c == curses.KEY_LEFT: direction = gauche()
                        # on tourne à gauche
    elif c == curses.KEY_RIGHT: direction = droite()
                        # on tourne à droite

# remettre l'écran en "bon" état
curses.endwin()               # sortie du mode "curses"
print "\n\n\tF I N I !\n\n"   # message de fin!