Files
basic-computer-games/18_Bullseye/python/bullseye.py
2024-08-19 03:46:27 +03:00

112 lines
3.3 KiB
Python

import random
from dataclasses import dataclass
from typing import List
@dataclass
class Player:
name: str
score: int = 0
def print_intro() -> None:
print(" " * 32 + "BULLSEYE")
print(" " * 15 + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY")
print("\n" * 3, end="")
print("IN THIS GAME, UP TO 20 PLAYERS THROW DARTS AT A TARGET")
print("WITH 10, 20, 30, AND 40 POINT ZONES. THE OBJECTIVE IS")
print("TO GET 200 POINTS.")
print()
print("THROW", end="")
print(" " * 20 + "DESCRIPTION", end="")
print(" " * 45 + "PROBABLE SCORE")
print(" 1", end="")
print(" " * 20 + "FAST OVERARM", end="")
print(" " * 45 + "BULLSEYE OR COMPLETE MISS")
print(" 2", end="")
print(" " * 20 + "CONTROLLED OVERARM", end="")
print(" " * 45 + "10, 20 OR 30 POINTS")
print(" 3", end="")
print(" " * 20 + "UNDERARM", end="")
print(" " * 45 + "ANYTHING")
print()
def print_outro(players: List[Player], winners: List[int]) -> None:
print()
print("WE HAVE A WINNER!!")
print()
for winner in winners:
print(f"{players[winner].name} SCORED {players[winner].score} POINTS.")
print()
print("THANKS FOR THE GAME.")
def main() -> None:
print_intro()
players: List[Player] = []
winners: List[int] = [] # will point to indices of player_names
nb_players = int(input("HOW MANY PLAYERS? "))
for _ in range(nb_players):
player_name = input("NAME OF PLAYER #")
players.append(Player(player_name))
round_number = 0
while not winners:
round_number += 1
print()
print(f"ROUND {round_number}---------")
for player in players:
print()
while True:
throw = int(input(f"{player.name}'S THROW? "))
if throw in {1, 2, 3}:
break
else:
print("INPUT 1, 2, OR 3!")
if throw == 1:
probability_1 = 0.65
probability_2 = 0.55
probability_3 = 0.5
probability_4 = 0.5
elif throw == 2:
probability_1 = 0.99
probability_2 = 0.77
probability_3 = 0.43
probability_4 = 0.01
elif throw == 3:
probability_1 = 0.95
probability_2 = 0.75
probability_3 = 0.45
probability_4 = 0.05
throwing_luck = random.random()
if throwing_luck >= probability_1:
print("BULLSEYE!! 40 POINTS!")
points = 40
elif throwing_luck >= probability_2:
print("30-POINT ZONE!")
points = 30
elif throwing_luck >= probability_3:
print("20-POINT ZONE")
points = 20
elif throwing_luck >= probability_4:
print("WHEW! 10 POINTS.")
points = 10
else:
print("MISSED THE TARGET! TOO BAD.")
points = 0
player.score += points
print(f"TOTAL SCORE = {player.score}")
winners.extend(
player_index
for player_index, player in enumerate(players)
if player.score > 200
)
print_outro(players, winners)
if __name__ == "__main__":
main()