mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 07:10:42 -08:00
* Add test to superstartrek and fixes several issues in superstartrek - I probably introduced them 🙈
* Mastermind type annotations
83 lines
2.2 KiB
Python
83 lines
2.2 KiB
Python
from math import sqrt
|
|
from random import randint
|
|
|
|
|
|
def introduction() -> None:
|
|
print(
|
|
"""The object of this game is to find 4 mugwumps
|
|
hidden on a 10*10 grid. Homebase is position 0,0.
|
|
Any guess you make must be two numbers with each
|
|
number between 0 and 9 inclusive. First number
|
|
is distance to right of homebase, and second number
|
|
is the distance above homebase."""
|
|
)
|
|
|
|
print(
|
|
"""You get 10 tries. After each try, I will tell
|
|
you how far you are from each mugwump."""
|
|
)
|
|
|
|
|
|
def generate_mugwumps(n=4):
|
|
mugwumps = []
|
|
for _ in range(n):
|
|
current = [randint(0, 9), randint(0, 9)]
|
|
mugwumps.append(current)
|
|
return mugwumps
|
|
|
|
|
|
def reveal_mugwumps(mugwumps):
|
|
print("Sorry, that's 10 tries. Here's where they're hiding.")
|
|
for idx, mugwump in enumerate(mugwumps, 1):
|
|
if mugwump[0] != -1:
|
|
print(f"Mugwump {idx} is at {mugwump[0]},{mugwump[1]}")
|
|
|
|
|
|
def calculate_distance(guess, mugwump):
|
|
d = sqrt(((mugwump[0] - guess[0]) ** 2) + ((mugwump[1] - guess[1]) ** 2))
|
|
return d
|
|
|
|
|
|
def play_again() -> None:
|
|
print("THAT WAS FUN! LET'S PLAY AGAIN.......")
|
|
choice = input("Press Enter to play again, any other key then Enter to quit.")
|
|
if choice == "":
|
|
print("Four more mugwumps are now in hiding.")
|
|
else:
|
|
exit()
|
|
|
|
|
|
def play_round():
|
|
mugwumps = generate_mugwumps()
|
|
turns = 1
|
|
score = 0
|
|
while turns <= 10 and score != 4:
|
|
m = -1
|
|
while m == -1:
|
|
try:
|
|
m, n = map(int, input(f"Turn {turns} - what is your guess? ").split())
|
|
except ValueError:
|
|
m = -1
|
|
for idx, mugwump in enumerate(mugwumps):
|
|
if m == mugwump[0] and n == mugwump[1]:
|
|
print(f"You found mugwump {idx + 1}")
|
|
mugwumps[idx][0] = -1
|
|
score += 1
|
|
if mugwump[0] == -1:
|
|
continue
|
|
print(
|
|
f"You are {calculate_distance((m, n), mugwump):.1f} units from mugwump {idx + 1}"
|
|
)
|
|
turns += 1
|
|
if score == 4:
|
|
print(f"Well done! You got them all in {turns} turns.")
|
|
else:
|
|
reveal_mugwumps(mugwumps)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
introduction()
|
|
while True:
|
|
play_round()
|
|
play_again()
|