import random from turtle import * import time screen = Screen() screen.setup(900, 500) screen.title("Turtle Betting Race") racers = [] obstacles = [] player = None diceBox = None diceNum = None colors = ["red", "blue", "green", "purple", "orange"] names = ["Jeff", "Fred", "Alice", "Xin", "Max"] # /AI def loadMoney(): try: f = open("money.txt", "r") return int(f.read()) except: return 5 # /AI def saveMoney(m): f = open("money.txt", "w") f.write(str(m)) f.close() money = loadMoney() def clearGame(): for t in turtles(): t.clear() t.hideturtle() def drawTrack(): pen = Turtle() pen.speed(0) pen.hideturtle() pen.penup() # Draw Grass screen.bgcolor("forestgreen") # Draw Asphalt Road pen.goto(-450, 130) pen.color("gray20") pen.begin_fill() for _ in range(2): pen.forward(900) pen.right(90) pen.forward(260) pen.right(90) pen.end_fill() # Draw Lane Markings (Dashed Lines) pen.color("white") for i in range(6): pen.goto(-450, 130 - (i * 52)) pen.setheading(0) for _ in range(15): pen.pendown() pen.forward(30) pen.penup() pen.forward(30) # Draw Start and Finish Lines pen.pensize(5) # Start Line pen.color("white") pen.goto(-300, 130) pen.setheading(270) pen.pendown() pen.forward(260) pen.penup() # Finish Line (Checkered Pattern look) pen.color("red") pen.goto(300, 130) pen.pendown() pen.forward(260) pen.penup() pen.pensize(1) def setupRacers(): global racers racers = [] for i in range(5): t = Turtle() t.shape("turtle") t.color(colors[i]) t.penup() t.goto(-300, 100 - i * 50) t.name = names[i] racers.append(t) label = Turtle() label.hideturtle() label.penup() label.color("white") # Changed to white to be visible on dark road label.goto(-380, 95 - i * 50) label.write(names[i]) # /AI def setupObstacles(): global obstacles obstacles = [] for i in range(5): o = Turtle() o.shape("square") o.color("orange") # Added color so they are visible o.penup() o.goto(random.randint(-50, 200), random.choice([100, 50, 0, -50, -100])) obstacles.append(o) def showMoney(): pen = Turtle() pen.hideturtle() pen.penup() pen.color("white") pen.goto(0, 180) pen.write("Money: " + str(money), align="center", font=("Arial", 18, "bold")) def showRules(): pen = Turtle() pen.hideturtle() pen.penup() pen.color("white") pen.goto(0, 150) pen.write("When lost -1, when won +3", align="center", font=("Arial", 14, "normal")) # /AI def chooseTurtle(): global player choice = textinput( "Choose Turtle", "Pick one:\nJeff, Fred, Alice, Xin, Max" ) for t in racers: if choice and t.name.lower() == choice.lower(): player = t return player = racers[0] # /AI def setupDice(): global diceBox, diceNum diceBox = Turtle() diceBox.shape("square") diceBox.shapesize(1.5, 1.5) diceBox.penup() diceNum = Turtle() diceNum.hideturtle() diceNum.penup() diceNum.color("white") def updateDice(value): y = player.ycor() diceBox.goto(-420, y) diceNum.clear() diceNum.goto(-420, y - 10) diceNum.write(value, align="center", font=("Arial", 16, "bold")) # /AI def avoidObstacles(t): for o in obstacles: if t.distance(o) < 25: if t.ycor() < o.ycor(): t.sety(t.ycor() - 30) else: t.sety(t.ycor() + 30) def race(): setupDice() winner = None while winner is None: for t in racers: time.sleep(0.05) # Slightly faster sleep for better flow move = random.randint(1, 5) if t == player: updateDice(move) t.forward(move * 15) # /AI avoidObstacles(t) if t.xcor() >= 300: winner = t break return winner.name def showResult(winner): pen = Turtle() pen.hideturtle() pen.penup() pen.color("white") pen.goto(0, -160) pen.write("Winner: " + winner, align="center", font=("Arial", 22, "bold")) pen.goto(0, -190) pen.write("Your turtle: " + player.name, align="center", font=("Arial", 16, "normal")) def brokeScreen(): pen = Turtle() pen.hideturtle() pen.penup() pen.color("red") pen.write("YOU'RE BROKE", align="center", font=("Arial", 36, "bold")) def main(): global money while True: if money <= 0: clearGame() brokeScreen() break clearGame() drawTrack() setupRacers() setupObstacles() showMoney() showRules() chooseTurtle() winner = race() showResult(winner) if winner.lower() == player.name.lower(): money += 3 else: money -= 1 # /AI saveMoney(money) again = textinput("Play again?", "yes or no") if again != "yes": break screen.mainloop() main()