-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSnakeGame.py
173 lines (143 loc) · 4.32 KB
/
SnakeGame.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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
import turtle
import random
import time
delay=0.1
score = 0
high_score = 0
# Creating the window and setting height and width
wn = turtle.Screen()
wn.title("Snake Game")
wn.bgcolor("black")
wn.setup(width=700, height=700)
wn.tracer(0)
#Creating a border for the game
turtle.speed(5)
turtle.pensize(4)
turtle.penup()
turtle.goto(-310,250)
turtle.pendown()
turtle.color('black')
turtle.forward(600)
turtle.right(90)
turtle.forward(500)
turtle.right(90)
turtle.forward(600)
turtle.right(90)
turtle.forward(500)
turtle.penup()
turtle.hideturtle()
# Crerating head of the snake
head = turtle.Turtle()
head.speed(2)
head.shape("square")
head.color("white")
head.penup()
head.goto(0, 0)
head.direction = "Stop"
#Creating food in the game
food = turtle.Turtle()
food_color = random.choice(['yellow', 'green', 'tomato'])
food_shape = random.choice([ 'triangle', 'circle','square'])
food.speed(0)
food.shape(food_shape)
food.color(food_color)
food.penup()
food.goto(20, 20)
#Creating space to show score and high score
scoreBoard = turtle.Turtle()
scoreBoard.speed(0)
scoreBoard.shape("square")
scoreBoard.color("white")
scoreBoard.penup()
scoreBoard.hideturtle()
scoreBoard.goto(0, 250)
scoreBoard.write("Score : 0 High Score : 0", align="center",
font=("Courier", 25, "bold"))
# assigning key directions
def move_up():
if head.direction != "down":
head.direction = "up"
def move_down():
if head.direction != "up":
head.direction = "down"
def move_left():
if head.direction != "right":
head.direction = "left"
def move_right():
if head.direction != "left":
head.direction = "right"
def move():
if head.direction == "up":
y = head.ycor()
head.sety(y+20)
if head.direction == "down":
y = head.ycor()
head.sety(y-20)
if head.direction == "left":
x = head.xcor()
head.setx(x-20)
if head.direction == "right":
x = head.xcor()
head.setx(x+20)
wn.listen()
wn.onkeypress(move_up, "Up")
wn.onkeypress(move_down, "Down")
wn.onkeypress(move_left, "Left")
wn.onkeypress(move_right, "Right")
segments = []
# Main Game
while True: #Running an infinite till the collision occurs and then game ends
wn.update()
#Ending the game on collision
if head.xcor() > 280 or head.xcor() < -300 or head.ycor() > 240 or head.ycor() < -240:
time.sleep(1)
wn.bgcolor('blue')
scoreBoard.goto(0,0)
scoreBoard.write("GAME OVER\n Your Score is : {}".format(
score), align="center", font=("Courier", 30, "bold"))
#If snake collects food
if head.distance(food) < 20:
#increasing score and updating the high_score if required
score += 10
if score > high_score:
high_score = score
scoreBoard.clear()
scoreBoard.write("Score : {} High Score : {} ".format(
score, high_score), align="center", font=("Courier", 25, "bold"))
#creating food at random location
x_cord = random.randint(-290, 270)
y_cord = random.randint(-240, 240)
food_color = random.choice(['yellow', 'green', 'tomato'])
food_shape = random.choice([ 'triangle', 'circle','square'])
food.speed(0)
food.shape(food_shape)
food.color(food_color)
food.goto(x_cord, y_cord)
# Adding a new segment to the snake
new_segment = turtle.Turtle()
new_segment.speed(0)
new_segment.shape("square")
new_segment.color("white smoke") # giving a new color to the tail
new_segment.penup()
segments.append(new_segment) #adding the segment to the list
# Moving the snake and ending the game on collisions of head with body segments
for i in range(len(segments)-1, 0, -1):
x = segments[i-1].xcor()
y = segments[i-1].ycor()
segments[i].goto(x, y)
if len(segments) > 0:
x = head.xcor()
y = head.ycor()
segments[0].goto(x, y)
move()
#Checking for collision with the body
for segment in segments:
if segment.distance(head) < 20:
time.sleep(1)
wn.clear()
wn.bgcolor('blue')
scoreBoard.goto(0,0)
scoreBoard.write("\t\tGAME OVER\n Your Score is : {}".format(
score), align="center", font=("Courier", 30, "bold"))
time.sleep(delay)
turtle.Terminator()