from enum import Enum from random import randrange from time import sleep class Stats(Enum): SPD = "SPEED" HND = "HANDLING" BRK = "BRAKING" class Skills(Enum): FM = "FUEL MANAGEMENT" TM = "TYRE MANAGEMENT" def roll(modifier = 0): rolled = randrange(1, 7, 1) + modifier if rolled < 1: rolled = 1 return rolled class Player(): def __init__(self, name, spd, hnd, brk, skill): self.name = name self.SPD = spd self.HND = hnd self.BRK = brk self.skill = skill self.SP = 0 def roll(self, stat, skill = None): rolled = roll(0) if stat == Stats.SPD: rolled += self.SPD elif stat == Stats.HND: rolled += self.HND elif stat == Stats.BRK: rolled += self.BRK if skill == self.skill: rolled += 1 return rolled def info(self): print(f"{self.name}:") print(f"\tSPD: {self.SPD}") print(f"\tHND: {self.HND}") print(f"\tBRK: {self.BRK}") print(f"\tSkill: {self.skill.value}") print(f"\tSkill Points: {self.SP}") class Obstacle(): def __init__(self, name, stat, skill): self.name = name self.stat = stat self.skill = skill def info(self): print(f"{self.name}") print(f"\tStat: {self.stat.value}") print(f"\tSkill: {self.skill.value}") class Track(): def __init__(self, name): self.name = name self.obstacles = [] def add_obstacle(self, obstacle): self.obstacles.append(obstacle) def info(self): print("---") print(f"{self.name}") for o in self.obstacles: o.info() print("---") class Game(): def __init__(self, player1, player2, track): self.p1 = player1 self.p2 = player2 self.track = track self.laps = 0 self.current_lap = 1 self.round = 0 self.leader = None self.lead = 0 def roll_laps(self): self.laps = roll(-2) def play_round(self): print(f"Round {self.round} | Lap {self.current_lap}/{self.laps}") if self.round == 0: p1_roll = self.p1.roll(Stats.SPD) p2_roll = self.p2.roll(Stats.SPD) print("Green flag, the race has started") if p1_roll > p2_roll: print(f"{self.p1.name} gets a good start and takes the lead") self.p1.SP += 1 self.leader = self.p1 self.lead += 1 elif p2_roll > p1_roll: print(f"{self.p2.name} gets a good start and takes the lead") self.p2.SP += 1 self.leader = self.p2 self.lead += 1 else: print("Both drivers get a good start and they're neck and neck") else: obstacle_index = self.round % len(self.track.obstacles) if obstacle_index == 0 and self.round != 0: self.current_lap += 1 if self.current_lap == self.laps: print("its over") obstacle = self.track.obstacles[obstacle_index] print(obstacle.name) sleep(1) self.round += 1 self.play_round() player1 = Player("Player 1", 3, 2, 1, Skills.FM) player2 = Player("Player 2", 1, 3, 2, Skills.TM) track = Track("Track 1") start_finish_straight = Obstacle("Start Finish Straight", Stats.SPD, Skills.FM) turn1 = Obstacle("Turn 1", Stats.BRK, Skills.TM) turn2 = Obstacle("Turn 2", Stats.HND, Skills.FM) back_straight = Obstacle("Back Straight", Stats.BRK, Skills.TM) turn3 = Obstacle("Turn 3", Stats.HND, Skills.TM) turn4 = Obstacle("Turn 4", Stats.SPD, Skills.FM) track.add_obstacle(start_finish_straight) track.add_obstacle(turn1) track.add_obstacle(turn2) track.add_obstacle(back_straight) track.add_obstacle(turn3) track.add_obstacle(turn4) player1.info() player2.info() track.info() game = Game(player1, player2, track) game.roll_laps() game.play_round()