forked from coding-horror/basic-computer-games
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpizza.py
More file actions
185 lines (137 loc) · 4.44 KB
/
pizza.py
File metadata and controls
185 lines (137 loc) · 4.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
"""
PIZZA
A pizza delivery simulation
Ported by Dave LeCompte
"""
import random
PAGE_WIDTH = 64
customer_names = [chr(65 + x) for x in range(16)]
street_names = [str(n) for n in range(1, 5)]
def print_centered(msg: str) -> None:
spaces = " " * ((PAGE_WIDTH - len(msg)) // 2)
print(spaces + msg)
def print_header(title: str) -> None:
print_centered(title)
print_centered("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY")
print()
print()
print()
def print_ticks() -> None:
for _ in range(4):
print("-")
def print_ruler() -> None:
print(" -----1-----2-----3-----4-----")
def print_street(i: int) -> None:
street_number = 3 - i
street_name = street_names[street_number]
line = street_name
space = " " * 5
for customer_index in range(4):
line += space
customer_name = customer_names[4 * street_number + customer_index]
line += customer_name
line += space
line += street_name
print(line)
def print_map() -> None:
print("MAP OF THE CITY OF HYATTSVILLE")
print()
print_ruler()
for i in range(4):
print_ticks()
print_street(i)
print_ticks()
print_ruler()
print()
def print_instructions() -> str:
print("PIZZA DELIVERY GAME")
print()
print("WHAT IS YOUR FIRST NAME?")
player_name = input()
print()
print(f"HI, {player_name}. IN THIS GAME YOU ARE TO TAKE ORDERS")
print("FOR PIZZAS. THEN YOU ARE TO TELL A DELIVERY BOY")
print("WHERE TO DELIVER THE ORDERED PIZZAS.")
print()
print()
print_map()
print("THE OUTPUT IS A MAP OF THE HOMES WHERE")
print("YOU ARE TO SEND PIZZAS.")
print()
print("YOUR JOB IS TO GIVE A TRUCK DRIVER")
print("THE LOCATION OR COORDINATES OF THE")
print("HOME ORDERING THE PIZZA.")
print()
return player_name
def yes_no_prompt(msg: str) -> bool:
while True:
print(msg)
response = input().upper()
if response == "YES":
return True
elif response == "NO":
return False
print("'YES' OR 'NO' PLEASE, NOW THEN,")
def print_more_directions(player_name: str) -> None:
print()
print("SOMEBODY WILL ASK FOR A PIZZA TO BE")
print("DELIVERED. THEN A DELIVERY BOY WILL")
print("ASK YOU FOR THE LOCATION.")
print(" EXAMPLE:")
print("THIS IS J. PLEASE SEND A PIZZA.")
print(f"DRIVER TO {player_name}. WHERE DOES J LIVE?")
print("YOUR ANSWER WOULD BE 2,3")
print()
def calculate_customer_index(x: int, y: int) -> int:
return 4 * (y - 1) + x - 1
def deliver_to(customer_index, customer_name, player_name) -> bool:
print(f" DRIVER TO {player_name}: WHERE DOES {customer_name} LIVE?")
coords = input()
xc, yc = (int(c) for c in coords.split(","))
delivery_index = calculate_customer_index(xc, yc)
if delivery_index == customer_index:
print(f"HELLO {player_name}. THIS IS {customer_name}, THANKS FOR THE PIZZA.")
return True
else:
delivery_name = customer_names[delivery_index]
print(f"THIS IS {delivery_name}. I DID NOT ORDER A PIZZA.")
print(f"I LIVE AT {xc},{yc}")
return False
def play_game(num_turns, player_name) -> None:
for _turn in range(num_turns):
x = random.randint(1, 4)
y = random.randint(1, 4)
customer_index = calculate_customer_index(x, y)
customer_name = customer_names[customer_index]
print()
print(
f"HELLO {player_name}'S PIZZA. THIS IS {customer_name}. PLEASE SEND A PIZZA."
)
while True:
success = deliver_to(customer_index, customer_name, player_name)
if success:
break
def main() -> None:
print_header("PIZZA")
player_name = print_instructions()
if yes_no_prompt("DO YOU NEED MORE DIRECTIONS?"):
print_more_directions(player_name)
understand = yes_no_prompt("UNDERSTAND?")
if not understand:
print("THIS JOB IS DEFINITELY TOO DIFFICULT FOR YOU. THANKS ANYWAY")
return
print("GOOD. YOU ARE NOW READY TO START TAKING ORDERS.")
print()
print("GOOD LUCK!!")
print()
num_turns = 5
while True:
play_game(num_turns, player_name)
print()
more = yes_no_prompt("DO YOU WANT TO DELIVER MORE PIZZAS?")
if not more:
print(f"O.K. {player_name}, SEE YOU LATER!")
print()
return
if __name__ == "__main__":
main()