mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-23 07:29:02 -08:00
105 lines
2.4 KiB
Python
Executable File
105 lines
2.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
|
|
class Canvas:
|
|
''' For drawing text-based figures '''
|
|
|
|
def __init__(self, width=12, height=12, fill=' '):
|
|
self._buffer = []
|
|
for _ in range(height):
|
|
line = []
|
|
for _ in range(width):
|
|
line.append('')
|
|
self._buffer.append(line)
|
|
|
|
self.clear()
|
|
|
|
def clear(self, fill=' '):
|
|
for row in self._buffer:
|
|
for x in range(len(row)):
|
|
row[x] = fill
|
|
|
|
def draw(self):
|
|
for line in self._buffer:
|
|
# Joining by the empty string ('') smooshes all of the
|
|
# individual characters together as one line.
|
|
print(''.join(line))
|
|
|
|
def put(self, s, x, y):
|
|
# In an effort to avoid distorting the drawn image, only write the
|
|
# first character of the given string to the buffer.
|
|
self._buffer[y][x] = s[0]
|
|
|
|
def draw_head(canvas):
|
|
canvas.put('-', 5, 2)
|
|
canvas.put('-', 6, 2)
|
|
canvas.put('-', 7, 2)
|
|
canvas.put('(', 4, 3)
|
|
canvas.put('.', 5, 3)
|
|
canvas.put('.', 7, 3)
|
|
canvas.put(')', 8, 3)
|
|
canvas.put('-', 5, 4)
|
|
canvas.put('-', 6, 4)
|
|
canvas.put('-', 7, 4)
|
|
|
|
def draw_gallows(canvas):
|
|
for i in range(12):
|
|
canvas.put('X', 0, i)
|
|
for i in range(7):
|
|
canvas.put('X', i, 0)
|
|
canvas.put('X', 6, 1)
|
|
|
|
def draw_body(canvas):
|
|
for i in range(5, 9, 1):
|
|
canvas.put('X', 6, i)
|
|
|
|
def draw_right_arm(canvas):
|
|
for i in range(3, 7):
|
|
canvas.put('\\', i - 1, i)
|
|
|
|
def draw_left_arm(canvas):
|
|
canvas.put('/', 10, 3)
|
|
canvas.put('/', 9, 4)
|
|
canvas.put('/', 8, 5)
|
|
canvas.put('/', 7, 6)
|
|
|
|
def draw_right_leg(canvas):
|
|
canvas.put('/', 5, 9)
|
|
canvas.put('/', 4, 10)
|
|
|
|
def draw_left_leg(canvas):
|
|
canvas.put('\\', 7, 9)
|
|
canvas.put('\\', 8, 10)
|
|
|
|
def draw_left_hand(canvas):
|
|
canvas.put('\\', 10, 2)
|
|
|
|
def draw_right_hand(canvas):
|
|
canvas.put('/', 2, 2)
|
|
|
|
def draw_left_foot(canvas):
|
|
canvas.put('\\', 9, 11)
|
|
canvas.put('-', 10, 11)
|
|
|
|
def draw_right_foot(canvas):
|
|
canvas.put('-', 2, 11)
|
|
canvas.put('/', 3, 11)
|
|
|
|
def play():
|
|
canvas = Canvas()
|
|
draw_gallows(canvas)
|
|
draw_head(canvas)
|
|
draw_body(canvas)
|
|
draw_right_arm(canvas)
|
|
draw_left_arm(canvas)
|
|
draw_right_leg(canvas)
|
|
draw_left_leg(canvas)
|
|
draw_left_hand(canvas)
|
|
draw_right_hand(canvas)
|
|
draw_left_foot(canvas)
|
|
draw_right_foot(canvas)
|
|
canvas.draw()
|
|
|
|
if __name__ == '__main__':
|
|
play()
|