Files
basic-computer-games/69_Pizza/python/pizza.py
2024-08-19 03:46:27 +03:00

186 lines
4.5 KiB
Python

"""
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 more_directions := 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()