-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
109 lines (81 loc) · 2.58 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import turtle
from turtle import Screen, Turtle
from snake import Snake
from food import Food
from scoreboard import Scoreboard
import time
screen = turtle.Screen()
screen.setup(width=700, height=700)
screen.bgcolor("black")
screen.title("Python Python")
screen.tracer(0)
def draw_border():
border = Turtle()
border.penup()
border.color("white")
border.goto(-290, -290) # Adjust so the border is just inside the screen
border.pendown()
border.speed("fastest")
for _ in range(4):
border.forward(580) # Adjust the length to fit inside the window
border.left(90)
border.hideturtle()
draw_border()
snake = Snake()
food = Food()
scoreboard = Scoreboard()
screen.listen()
def setup_key_bindings():
screen.onkey(snake.up, "Up")
screen.onkey(snake.down, "Down")
screen.onkey(snake.left, "Left")
screen.onkey(snake.right, "Right")
screen.onkey(snake.up, "W")
screen.onkey(snake.down, "S")
screen.onkey(snake.left, "A")
screen.onkey(snake.right, "D")
screen.onkey(game_restart, "r") # Add event listener for "R" key press
def game_over():
global game_state
game_state = "GAME_OVER"
scoreboard.game_overs()
def exit_game():
global game_state
game_state = "EXIT"
screen.onkeypress(exit_game, "Escape") # Bind the Escape key to exit_game function
def game_restart():
global game_state, move_speed
snake.reset() # Reset the snake to the starting position
scoreboard.reset() # Reset the scoreboard
food.refresh() # Move the food to a new position
move_speed = 0.1 # Reset the move speed
screen.update()
setup_key_bindings()
game_state = "PLAYING" # Ensure the game loop knows to continue running
setup_key_bindings()
game_state = "PLAYING"
move_speed = 0.1
speed_increase = 0.01
while game_state != "EXIT":
if game_state == "PLAYING":
screen.update()
time.sleep(move_speed)
snake.move()
# Detect collision with food.
if snake.head.distance(food) < 15:
food.refresh()
snake.extend()
move_speed = max(0.05, move_speed - speed_increase)
scoreboard.increase_score()
# Detect collision with wall.
if snake.head.xcor() > 280 or snake.head.xcor() < -280 or snake.head.ycor() > 280 or snake.head.ycor() < -280:
game_over()
scoreboard.game_overs()
# Detect collision with tail.
for segment in snake.segments:
if segment == snake.head:
pass
elif snake.head.distance(segment) < 10:
game_over()
scoreboard.game_overs()
screen.update()