|
|
@ -1,124 +1,124 @@ |
|
|
|
class Screen: |
|
|
|
def _check(self, x, o, name): |
|
|
|
if not isinstance(x, int): |
|
|
|
raise TypeError("{} is not an int object".format(name)) |
|
|
|
elif x < 1: |
|
|
|
raise ValueError("{} is lower than 1".format(name)) |
|
|
|
if o is None: |
|
|
|
o = 0 |
|
|
|
elif x > o and o: |
|
|
|
raise ValueError("{} is greater than the height of this object: {} > {}". |
|
|
|
format(name, x, o)) |
|
|
|
|
|
|
|
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._check(width, None, "width") |
|
|
|
self._check(height, None, "height") |
|
|
|
if not isinstance(patern, str): |
|
|
|
raise TypeError("patern is not a string") |
|
|
|
elif len(patern) > 1: |
|
|
|
raise ValueError("patern is too long (length = {})".format(len(patern))) |
|
|
|
self._width = width |
|
|
|
self._height = height |
|
|
|
self.fill(patern) |
|
|
|
|
|
|
|
def locate(self, x, y, string): |
|
|
|
self._check(x, self._width, "x") |
|
|
|
self._check(y, self._height, "y") |
|
|
|
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): |
|
|
|
self._check(x, self._width, "x") |
|
|
|
self._check(y, self._height, "y") |
|
|
|
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"): |
|
|
|
to_print = str() |
|
|
|
for line in self._mat: |
|
|
|
for cell in line: |
|
|
|
to_print += cell |
|
|
|
to_print += "\n" |
|
|
|
to_print = to_print[:-1] |
|
|
|
print(to_print) |
|
|
|
if ask_for_input: |
|
|
|
return input("> ") |
|
|
|
else: |
|
|
|
print("", end=endl) |
|
|
|
return None |
|
|
|
|
|
|
|
def get_cell(self, x, y): |
|
|
|
self._check(x, self._width, "x") |
|
|
|
self._check(y, self._width, "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): |
|
|
|
if type(string) is not str: |
|
|
|
raise TypeError("string is not a string type") |
|
|
|
if len(string) != self._width * self._height: |
|
|
|
raise ValueError("string lenght isn't equal to {}".format(self._width * self._height)) |
|
|
|
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=6, ask_for_input=True, endl="\n"): |
|
|
|
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): |
|
|
|
print(dx, dy) |
|
|
|
to_print += self._mat[dy][dx] |
|
|
|
to_print += "\n" |
|
|
|
to_print = to_print[:-1] |
|
|
|
print(to_print) |
|
|
|
if ask_for_input: |
|
|
|
return input("> ") |
|
|
|
else: |
|
|
|
print("", end=endl) |
|
|
|
return None |
|
|
|
class Screen: |
|
|
|
def _check(self, x, o, name): |
|
|
|
if not isinstance(x, int): |
|
|
|
raise TypeError("{} is not an int object".format(name)) |
|
|
|
elif x < 1: |
|
|
|
raise ValueError("{} is lower than 1".format(name)) |
|
|
|
if o is None: |
|
|
|
o = 0 |
|
|
|
elif x > o and o: |
|
|
|
raise ValueError("{} is greater than the height of this object: {} > {}". |
|
|
|
format(name, x, o)) |
|
|
|
|
|
|
|
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._check(width, None, "width") |
|
|
|
self._check(height, None, "height") |
|
|
|
if not isinstance(patern, str): |
|
|
|
raise TypeError("patern is not a string") |
|
|
|
elif len(patern) > 1: |
|
|
|
raise ValueError("patern is too long (length = {})".format(len(patern))) |
|
|
|
self._width = width |
|
|
|
self._height = height |
|
|
|
self.fill(patern) |
|
|
|
|
|
|
|
def locate(self, x, y, string): |
|
|
|
self._check(x, self._width, "x") |
|
|
|
self._check(y, self._height, "y") |
|
|
|
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): |
|
|
|
self._check(x, self._width, "x") |
|
|
|
self._check(y, self._height, "y") |
|
|
|
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"): |
|
|
|
to_print = str() |
|
|
|
for line in self._mat: |
|
|
|
for cell in line: |
|
|
|
to_print += cell |
|
|
|
to_print += "\n" |
|
|
|
to_print = to_print[:-1] |
|
|
|
print(to_print) |
|
|
|
if ask_for_input: |
|
|
|
return input("> ") |
|
|
|
else: |
|
|
|
print("", end=endl) |
|
|
|
return None |
|
|
|
|
|
|
|
def get_cell(self, x, y): |
|
|
|
self._check(x, self._width, "x") |
|
|
|
self._check(y, self._width, "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): |
|
|
|
if type(string) is not str: |
|
|
|
raise TypeError("string is not a string type") |
|
|
|
if len(string) != self._width * self._height: |
|
|
|
raise ValueError("string lenght isn't equal to {}".format(self._width * self._height)) |
|
|
|
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=6, ask_for_input=True, endl="\n"): |
|
|
|
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): |
|
|
|
print(dx, dy) |
|
|
|
to_print += self._mat[dy][dx] |
|
|
|
to_print += "\n" |
|
|
|
to_print = to_print[:-1] |
|
|
|
print(to_print) |
|
|
|
if ask_for_input: |
|
|
|
return input("> ") |
|
|
|
else: |
|
|
|
print("", end=endl) |
|
|
|
return None |