Files
3StatRacing/main.py
2024-09-22 15:06:05 +01:00

146 lines
4.0 KiB
Python

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()