python-console-snake
python-console-snake copied to clipboard
Made the game never end
I added some code to line 111 of the program to make the snake bounce of the walls and never die import turtle import time import random
delay = 0.3
Score
score = 0 high_score = 0
Set up the screen
wn = turtle.Screen() wn.title("Snake Game by @TokyoEdTech") wn.bgcolor("green") wn.setup(width=600, height=600) wn.tracer(0) # Turns off the screen updates
Snake head
head = turtle.Turtle() head.speed(0) head.shape("square") head.color("blue") head.penup() head.goto(0, 0) head.direction = "stop"
Snake food
food = turtle.Turtle() food.speed(0) food.shape("circle") food.color("orange") food.penup() food.goto(0, 100)
segments = []
Pen
pen = turtle.Turtle() pen.speed(0) pen.shape("square") pen.color("blue") pen.penup() pen.hideturtle() pen.goto(0, 260) pen.write("Score: 0 High Score: 0", align="center", font=("Courier", 24, "normal"))
Functions
def go_up(): if head.direction != "down": head.direction = "up"
def go_down(): if head.direction != "up": head.direction = "down"
def go_left(): if head.direction != "right": head.direction = "left"
def go_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)
Keyboard bindings
wn.listen() wn.onkeypress(go_up, "q") wn.onkeypress(go_down, "a") wn.onkeypress(go_left, "w") wn.onkeypress(go_right, "g")
Main game loop
while True: wn.update()
# Check for a collision with the food
if head.distance(food) < 20:
# Move the food to a random spot
x = random.randint(-290, 290)
y = random.randint(-290, 290)
food.goto(x, y)
# Add a segment
new_segment = turtle.Turtle()
new_segment.speed(0)
new_segment.shape("circle")
new_segment.color("red")
new_segment.penup()
segments.append(new_segment)
# Shorten the delay
delay -= 0.001
# Increase the score
score += 10
if score > high_score:
high_score = score
pen.clear()
pen.write("Score: {} High Score: {}".format(score, high_score), align="center", font=("Courier", 24, "normal"))
# Move the end segments first in reverse order
for index in range(len(segments) - 1, 0, -1):
x = segments[index - 1].xcor()
y = segments[index - 1].ycor()
segments[index].goto(x, y)
# Move segment 0 to where the head is
if len(segments) > 0:
x = head.xcor()
y = head.ycor()
segments[0].goto(x, y)
move()
# Check for head collision with the body segments
for segment in segments:
if segment.distance(head) < 20:
# Reset the delay
delay = 0.1