Files
basic-computer-games/44 Hangman/python/hangman.py
2021-02-17 23:36:43 -05:00

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()