import os import platform """ ANSI color codes """ colors = { 'BLACK' : "\033[0;30m", 'RED' : "\033[0;31m", 'GREEN' : "\033[0;32m", 'BROWN' : "\033[0;33m", 'BLUE' : "\033[0;34m", 'PURPLE' : "\033[0;35m", 'CYAN' : "\033[0;36m", 'LIGHT_GRAY' : "\033[0;37m", 'DARK_GRAY' : "\033[1;30m", 'LIGHT_RED' : "\033[1;31m", 'LIGHT_GREEN' : "\033[1;32m", 'YELLOW' : "\033[1;33m", 'LIGHT_BLUE' : "\033[1;34m", 'LIGHT_PURPLE' : "\033[1;35m", 'LIGHT_CYAN' : "\033[1;36m", 'LIGHT_WHITE' : "\033[1;37m", 'BOLD' : "\033[1m", 'FAINT' : "\033[2m", 'ITALIC' : "\033[3m", 'UNDERLINE' : "\033[4m", 'END' : "\033[0m" } class Cli(): """Classe gérant l'interface graphique""" def __init__(self, **kwargs): self.width = os.get_terminal_size().columns self.height = os.get_terminal_size().lines -1 for key, value in kwargs.items(): if key == 'width': self.width = value elif key == 'height': self.height = value-1 self.__set_dimensions() self.screen = [[' ' for i in range(self.width)] for j in range(self.height)] def __clear(self): if platform.system() == 'Linux': os.system('clear') else: os.system('cls') def __set_dimensions(self): """ Défini les dimensions du terminal """ if platform.system() == 'Linux': os.system('resize -s {} {}'.format(self.height + 1, self.width)) else: os.system('mode con: cols={} lines={}'.format(self.width, self.height + 1)) self.__clear() def display(self): """affiche le contenu de self.screen""" os.system('clear') for line in self.screen: print(''.join(line)) self.screen = [[' ' for i in range(self.width)] for j in range(self.height)] def draw(self, content, x, y, **kwargs): """dessine aux coordonées""" for key, value in kwargs.items(): if key == 'color': try: self.screen[y][x-1] = colors[value] self.screen[y][x+len(str(content))] = colors['END'] except: pass for i in range(len(str(content))): try: if content[i] != ' ': self.screen[y][x+i] = content[i] except(IndexError): break def draw_life(self, percent, x, y): """dessine la barre de vie""" length = 40 part_to_draw = length * percent // 100 if percent > 25: self.draw('|{}{}|'.format(''.join(['█' for i in range(part_to_draw)]), ''.join([' ' for i in range(length - part_to_draw)])), x, y) else: self.draw('{}|{}{}|{}'.format(colors['RED'], ''.join(['█' for i in range(part_to_draw)]), ''.join([' ' for i in range(length - part_to_draw)]), colors['END']), x, y) class Layer(Cli): """defini une zone indépendante dans l'écran pour ne pas tout recharger""" def __init__(self, x, y, shape): """shape doit être fournis sous forme de tableau""" super().__init__() self.x = x self.y = y self.width = max(map(len, shape)) self.height = len(shape) def refresh(self): pass print(platform.system())