Jeu de la vie, TP n°2

Se déplacer à l'écran avec curses

  1. Écrire un programme qui déplace une étoile à l'écran en la contrôlant au clavier : les touches « 4 », « 8 », « 6 » et « 2 » du pavé numérique pour déplacer, la touche « q » pour sortir du programme. Dans cette première version on ne vérifiera pas que l'étoile reste dans l'écran. Si le programme plante, tant pis.
    interaction01.py [Cacher les numéros de ligne]
    1. # -*- coding: utf-8 -*-
    2. import curses
    3.  
    4. # initialisations
    5. ecran=curses.initscr()  # création de l'écran "graphique"
    6. curses.curs_set(False)  # pas d'affichage du curseur
    7.  
    8. ligne=1      # position verticale du curseur
    9. colonne=1    # position horizontale du curseur
    10. unetouche=0  # pour entrer dans la boucle
    11.  
    12. while unetouche!=ord("q") :
    13.     if unetouche==ord("6") :    # à droite
    14.         colonne+=1
    15.     elif unetouche==ord("4") :  # à gauche
    16.         colonne-=1
    17.     elif unetouche==ord("8") :  # en haut
    18.         ligne-=1
    19.     elif unetouche==ord("2") :  # en bas
    20.         ligne+=1
    21.     ecran.clear()                   # effacer l'écran
    22.     ecran.addch(ligne,colonne,"*")  # positionner l'étoile
    23.     unetouche=ecran.getch()         # attente d'une frappe clavier
    24.  
    25. curses.endwin()      # revenir à la console
  2. Même chose en empêchant de sortir de l'écran.
    interaction02.py [Cacher les numéros de ligne]
    1. # -*- coding: utf-8 -*-
    2. import curses
    3. # initialisations
    4. ecran=curses.initscr()  # création de l'écran "graphique"
    5. curses.curs_set(False)  # pas d'affichage du curseur
    6.  
    7. (maxl,maxc)=ecran.getmaxyx() # dimensions de l'écran
    8. ligne=1                      # position verticale initiale du curseur
    9. colonne=1                    # position horizontale initiale du curseur
    10. unetouche=0                  # pour pouvoir entrer dans la boucle
    11.  
    12. while unetouche!=ord("q") :  # tant qu'on n'a pas appuyé sur la touche Q
    13.     if (unetouche==ord("6")) and (colonne<maxc-2) :  # à droite
    14.         colonne+=1
    15.     elif (unetouche==ord("4")) and (colonne>0)  :    # à gauche
    16.         colonne-=1
    17.     elif (unetouche==ord("8")) and (ligne>0) :       # en haut
    18.         ligne-=1
    19.     elif (unetouche==ord("2")) and (ligne<maxl-2) :  # en bas
    20.         ligne+=1
    21.     ecran.clear()                   # effacer l'écran
    22.     ecran.addch(ligne,colonne,"*")  # positionner l'étoile
    23.     unetouche=ecran.getch()         # attente d'une frappe clavier
    24.  
    25. curses.endwin()      # revenir à la console
  3. Même chose en utilisant les touches de déplacement de curseur.
    interaction03.py [Cacher les numéros de ligne]
    1. # -*- coding: utf-8 -*-
    2. import curses
    3. # initialisations
    4. ecran=curses.initscr()  # création de l'écran "graphique"
    5. ecran.keypad(True)      # codage des touches de fonctions en 1 octet
    6. curses.curs_set(False)  # pas d'affichage du curseur
    7.  
    8. (maxl,maxc)=ecran.getmaxyx() # dimensions de l'écran
    9. ligne=1                      # position verticale initiale du curseur
    10. colonne=1                    # position horizontale initiale du curseur
    11. unetouche=0                  # pour pouvoir entrer dans la boucle
    12.  
    13. while unetouche!=ord("q") :  # tant qu'on n'a pas appuyé sur la touche Q
    14.     if (unetouche==curses.KEY_RIGHT) and (colonne<maxc-2) : # à droite
    15.         colonne+=1
    16.     elif (unetouche==curses.KEY_LEFT) and (colonne>0) :     # à gauche
    17.         colonne-=1
    18.     elif (unetouche==curses.KEY_UP) and (ligne>0) :         # en haut
    19.         ligne-=1
    20.     elif (unetouche==curses.KEY_DOWN) and (ligne<maxl-2) :  # en bas
    21.         ligne+=1
    22.     ecran.clear()                   # effacer l'écran
    23.     ecran.addch(ligne,colonne,"*")  # positionner l'étoile
    24.     unetouche=ecran.getch()         # attente d'une frappe clavier
    25.  
    26. curses.endwin()      # revenir à la console
  4. Presque la même chose. Mais on ne déplace plus une étoile mais un curseur (c'est-à-dire que la case où on se trouve est affichée en vidéo inverse (texte noir sur fond blanc).
    interaction04.py [Cacher les numéros de ligne]
    1. # -*- coding: utf-8 -*-
    2. import curses
    3. # initialisations
    4. ecran=curses.initscr()            # création de l'écran "graphique"
    5. ecran.keypad(True)                # codage des touches de fonctions en 1 octet
    6. curses.curs_set(False)            # pas d'affichage du curseur
    7. curses.start_color()              # utilisation des couleurs
    8. # premier jeu de couleur pour l'affichage normal
    9. curses.init_pair(1,curses.COLOR_WHITE,curses.COLOR_BLACK)
    10. NORMAL=curses.color_pair(1)+curses.A_BOLD
    11. # deuxième jeu de couleur pour l'affichage inversé
    12. curses.init_pair(2,curses.COLOR_BLACK,curses.COLOR_WHITE)
    13. INVERSE=curses.color_pair(2)+curses.A_BOLD
    14. (maxl,maxc)=ecran.getmaxyx() # dimensions de l'écran
    15. ligne=1                      # position verticale initiale du curseur
    16. colonne=1                    # position horizontale initiale du curseur
    17. unetouche=0                  # pour pouvoir entrer dans la boucle
    18.  
    19. while unetouche!=ord("q") :  # tant qu'on n'a pas appuyé sur la touche Q
    20.     if (unetouche==curses.KEY_RIGHT) and (colonne<maxc-2) : # à droite
    21.         colonne+=1
    22.     elif (unetouche==curses.KEY_LEFT) and (colonne>0) :     # à gauche
    23.         colonne-=1
    24.     elif (unetouche==curses.KEY_UP) and (ligne>0) :         # en haut
    25.         ligne-=1
    26.     elif (unetouche==curses.KEY_DOWN) and (ligne<maxl-2) :  # en bas
    27.         ligne+=1
    28.     ecran.clear()                           # effacer l'écran
    29.     ecran.addch(ligne,colonne," ",INVERSE)  # positionner l'étoile
    30.     unetouche=ecran.getch()                 # attente d'une frappe clavier
    31.  
    32. curses.endwin()      # revenir à la console
Dernière modification : 25/8/2016