all_turtles = [] race_on = True for _ in range(6): new_turtle = Turtle(shape="turtle") new_turtle.penup() new_turtle.color(colors[_]) new_turtle.goto(x=-230, y=(90 - (_ * 30))) all_turtles.append(new_turtle) while race_on: for turtle in all_turtles: turtle.forward(randint(0, 10)) if turtle.xcor() > 230: race_on = False winner = turtle.pencolor() if winner == user_choice: play_again = screen.textinput(title="You win!", prompt="Would you like to play again? (Type 'yes' or 'no'): ") if play_again == 'no': game_over = True else: play_again = screen.textinput(title=f"You lose! The {winner} turtle finished first", prompt="Would you like to play again? (Type 'yes' or 'no'): ") if play_again == 'no': game_over = True screen.clearscreen() screen.exitonclick()
class TurtleRace: def __init__(self): self.game_setup() self.winner = None def game_setup(self): """Resets the screen and asks for how many turtles to send to the races""" self.screen = Screen() self.screen.setup(width=500, height=400) self.screen.clearscreen() self.num_turtles = int(self.screen.numinput("num_turtle", "How many turtles race today?", 2, 2, 5)) # Sets initial parameters for the turtles - 5 options self.names = ["Bob", "John", "Sally", "Rufus", "Marvin"] self.colors = ["red", "purple", "green", "yellow", "orange"] self.turtley = [-150, -50, 0, 50, 150] self.start = -230 self.is_winner = False self.turtles = {} self.create_turtles() self.play() def create_turtles(self): """Generates the turtles!!""" for turtle_ind in range(self.num_turtles): self.turtles[self.names[turtle_ind]]=(Turtle(shape="turtle")) self.turtles[self.names[turtle_ind]].color(self.colors[turtle_ind]) self.turtles[self.names[turtle_ind]].penup() self.turtles[self.names[turtle_ind]].goto(x=self.start,y=self.turtley[turtle_ind]) def start_race(self): while not self.is_winner: for turtle in self.turtles: this_turtle = self.turtles[turtle] xchange=randint(1,10) next_x = this_turtle.xcor()+xchange this_turtle.goto(x=next_x,y=this_turtle.ycor()) if next_x>=230: self.winner = turtle self.is_winner = True break # self.is_winner(next_x) self.end_race() def end_race(self): print(f"We have a winner! Great job, {self.winner}!!!") print("Replay? Press r") def play(self): """Listens for player input""" self.screen.listen() self.screen.onkeypress(key="g", fun=self.start_race) self.screen.onkeypress(key="r", fun=self.game_setup) self.screen.exitonclick()
class Game: def __init__(self): self.init_screen() self.is_game_on = True self.is_game_exited = True self.snake = Snake() self.food = Food() self.scoreboard = Scoreboard() self.define_keys() def init_screen(self): self.screen = Screen() self.screen.setup(width=SCREEN_WIDTH, height=SCREEN_HEIGHT) self.screen.bgcolor(BG_COLOR) self.screen.title(TITLE) def set_game_on(self): self.is_game_on = True def set_game_off(self): self.is_game_on = False def reset(self): self.snake.reset() self.food.reset() self.scoreboard.reset() self.screen.clearscreen() self.__init__() self.start_game() def define_keys(self): self.screen.listen() self.screen.onkey(key="Up", fun=self.snake.up) self.screen.onkey(key="Down", fun=self.snake.down) self.screen.onkey(key="Left", fun=self.snake.left) self.screen.onkey(key="Right", fun=self.snake.right) self.screen.onkey(key="c", fun=self.set_game_off) self.screen.onkey(key="r", fun=self.reset) self.screen.onkey(key="x", fun=self.exit_game) self.screen.onkey(key="s", fun=self.start_game) def exit_game(self): self.screen.bye() def is_snake_on_edge(self): xcor = self.snake.xcor() ycor = self.snake.ycor() edge_up = SCREEN_HEIGHT / 2 - 10 edge_down = -SCREEN_HEIGHT / 2 - 10 edge_left = -SCREEN_WIDTH / 2 - 10 edge_right = SCREEN_WIDTH / 2 - 10 if xcor < edge_left or \ xcor > edge_right or \ ycor < edge_down or \ ycor > edge_up: self.set_game_off() self.scoreboard.game_over() def start_game(self): self.screen.tracer(0) while self.is_game_on: self.screen.update() time.sleep(0.1) self.snake.move() self.is_snake_on_edge() if self.snake.snake_head.distance(self.food) < 20: self.food.refresh() self.snake.grow_snake() self.scoreboard.increase_score() for segment in self.snake.segments[2:]: if self.snake.snake_head.distance(segment) < 10: self.set_game_off() self.scoreboard.game_over()