class Screen: def __init__(self, width=21, height=6, patern=" ", copy=None): if isinstance(copy, Screen): self._width = copy._width self._height = copy._height self._mat = copy._mat else: self._width = width self._height = height self.fill(patern) def locate(self, x, y, string): string = str(string) i = -1 for char in string: if i + x < self._width: self._mat[y - 1][x + i] = char i += 1 def locate_v(self, x, y, string): string = str(string) i = -1 for char in string: if i + y < self._height: self._mat[y + i][x - 1] = char i += 1 def fill(self, patern=" "): self._mat = [[patern[0] for i in range(self._width)] for i in range(self._height)] def refresh(self, ask_for_input=True, endl="\n", fancy=False, fmargin=4): to_print = str() for line in self._mat[:-1] if fancy else self._mat: for cell in line: to_print += cell to_print += "\n" to_print = to_print[:-1] print(to_print) if ask_for_input or fancy: line = "" if fancy: for cell in self._mat[-1][:-fmargin]: line += cell return input(line) return input("> ") else: print("", end=endl) return None def get_cell(self, x, y): return self._mat[y - 1][x - 1] def get_dim(self): return self._width, self._height def export(self): result = str() for line in self._mat: for cell in line: result += cell return result def load(self, string): i = 0 s = 0 while i != self._height: self._mat[i] = list(string[s:s + self._width]) i += 1 s += self._width get_cell_content = get_cell # For retro-compability class Pad(Screen): def refresh(self, x=1, y=1, width=21, height=7, ask_for_input=True,\ endl="\n", fancy=True, fmargin=4): ogwidth = width if width > self._width: width = self._width if height > self._height: height = self._height if x < 1: x = 1 if y < 1: y = 1 x -= 1 y -= 1 if x + width > self._width: x = self._width - width if y + height > self._height: y = self._height - height to_print = str() for dy in range(y, height+y): dy = dy for dx in range(x, width+x): to_print += self._mat[dy][dx] to_print += "\n" to_print = to_print[:-1] print(to_print[:-width], end="") if ask_for_input or fancy: return input(to_print[-width:-1]+ " " * (ogwidth - width - fmargin) if fancy else "> ") else: print(to_print[-width:], end=endl) return None