Chapitre 9. Introduction à Ncurses, correction

Correction des exercices du Chapitre 3, Introduction à ncurses.

  1.         import curses
            ecran = curses.initscr()
            ecran.addch(0,0,"*")
            ecran.getch()      
            curses.endwin()
         
  2. Quand vous écrivez « y, x = ecran.getmaxyx() » n'oubliez pas que x et y représentent les dimensions de l'écran. Comme le système de coordonnées commmence à (0,0), on ne pourra donc atteindre que x-1 et y-1.

            import curses
            ecran = curses.initscr()
            y, x = ecran.getmaxyx()
            ecran.addch(0,0,"*")
            ecran.addch(y-1,0,"*")
            ecran.addch(0,x-1,"*")
            ecran.addch(y-1,x-2,"*")
            ecran.addch(y-2,x-1,"*")
            ecran.getch()      
            curses.endwin()
          

    Vous avez sans doute remarqué que la position en bas à droite ne peut pas être atteinte. C'est parce qu'après y avoir écrit le curseur sortirait de l'écran.

  3.         import curses
            ecran = curses.initscr()
            y, x = ecran.getmaxyx()
            ecran.move(y/2,x/2-10)
            for i in range (0,20):
                ecran.addch("*")
            ecran.move(0,0)    
            ecran.getch()      
            curses.endwin()
          

    ou, mieux :

            import curses
            ecran = curses.initscr()
            y, x = ecran.getmaxyx()
            ecran.addstr(y/2,x/2-10,20*"*")
            ecran.move(0,0)    
            ecran.getch()      
            curses.endwin()
          
  4.         import curses
            ecran = curses.initscr()
            y, x = ecran.getmaxyx()
            for i in range (0,10):
                ecran.addstr(y/2-5+i,x/2-10,20*"*")
            ecran.move(0,0)    
            ecran.getch()      
            curses.endwin()
          
  5. En trichant :

            import curses
            ecran = curses.initscr()
            y, x = ecran.getmaxyx()
            for i in range (0,10):
                ecran.addstr(y/2-5+i,x/2-10,20*"*")
            for i in range (0,8):
                ecran.addstr(y/2-4+i,x/2-9,18*" ")
            ecran.move(0,0)    
            ecran.getch()      
            curses.endwin()
          

    Mieux :

            import curses
            ecran = curses.initscr()
            y, x = ecran.getmaxyx()
            ecran.addstr(y/2-5,x/2-10,20*"*")
            for i in range (1,9):
                ecran.addch(y/2-5+i,x/2-10,"*")
                ecran.addch(y/2-5+i,x/2+9,"*")
            ecran.addstr(y/2+4,x/2-10,20*"*")
            ecran.move(0,0)    
            ecran.getch()      
            curses.endwin()
          
  6.         import curses
            ecran = curses.initscr()
            ymax, xmax = ecran.getmaxyx()
            x0,y0 = xmax/2,ymax/2
            for x in range (0,xmax):
                for y in range(0,ymax):
                    d = (x0-x)*(x0-x)+(y0-y)*(y0-y)
                    if d < 100:
                        ecran.addch(y,x,"*")
            ecran.move(0,0)    
            ecran.getch()      
            curses.endwin()
          
  7.         import curses
            ecran = curses.initscr()
            ymax, xmax = ecran.getmaxyx()
            x0,y0 = xmax/2,ymax/2
            for x in range (0,xmax):
                for y in range(0,ymax):
                    d = (x0-x)*(x0-x)+(y0-y)*(y0-y)
                    if d <= 108 and d >= 92 :
                        ecran.addch(y,x,"*")
            ecran.move(0,0)    
            ecran.getch()      
            curses.endwin()
          
  8.         import curses
            ecran = curses.initscr()
            ymax, xmax = ecran.getmaxyx()
            rayon=min(xmax,ymax)/2-1
            x0,y0 = xmax/2,ymax/2
            inf=rayon*rayon-8
            sup=rayon*rayon+8
            for x in range (0,xmax):
                for y in range(0,ymax):
                    d = (x0-x)*(x0-x)+(y0-y)*(y0-y)
                    if d <= sup and d >= inf :
                        ecran.addch(y,x,"*")
            ecran.move(0,0)    
            ecran.getch()      
            curses.endwin()