Snake Game Code Using Python 3

Snake Game Code Using Python 3

A simple snake game using Python 3.

A snake game is an arcade game which has been developed by Gremlin Industries and published by Sega in October 1976. The snake game is controlled with four direction buttons: W is up, A is Left, S is Down, and D is right. The code under “# Keyboard bindings” is where you can program your own buttons of choice to react to a specific direction.

The games objective is to achieve maximum points as possible by collecting food or fruits on the screen by steering the player or “Turtle” in the direction of the “fruit”. The player loses once the snake hits the wall.

Copy and paste the code below in any Python IDE or Python Code Editor. A suggested and free IDE called “Thonny” will work if you do not have a Python IDE  installed on a computer. Visit thony.org for IDE software download and installation.

CODE STARTS BELOW ↓

___

import turtle
import time
import random

delay = 0.08

# Score
score = 0
high_score = 0

# Set up the screen
wn = turtle.Screen()
wn.bgcolor(“gray”)
wn.setup(width=800, height=600)
wn.tracer(0) # Turns off the screen updates

# Snake head
head = turtle.Turtle()
head.speed(0)
head.shape(“square”)
head.color(“black”)
head.penup()
head.goto(0,0)
head.direction = “stop”

# Snake food
food = turtle.Turtle()
food.speed(0)
food.shape(“circle”)
food.color(“red”)
food.penup()
food.goto(0,100)

segments = []

# Pen
pen = turtle.Turtle()
pen.speed(0)
pen.shape(“square”)
pen.color(“white”)
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, “w”)
wn.onkeypress(go_down, “s”)
wn.onkeypress(go_left, “a”)
wn.onkeypress(go_right, “d”)

# Main game loop
while True:
wn.update()

# Check for a collision with the border
if head.xcor()>290 or head.xcor()<-290 or head.ycor()>290 or head.ycor()<-290:
time.sleep(1)
head.goto(0,0)
head.direction = “stop”

# Hide the segments
for segment in segments:
segment.goto(1000, 1000)

# Clear the segments list
segments.clear()

# Reset the score
score = 0

# Reset the delay
delay = 0.1

pen.clear()
pen.write(“Score: {} High Score: {}”.format(score, high_score), align=”center”, font=(“Courier”, 24, “normal”))

# 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(“square”)
new_segment.color(“grey”)
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:
time.sleep(1)
head.goto(0,0)
head.direction = “stop”

# Hide the segments
for segment in segments:
segment.goto(1000, 1000)

# Clear the segments list
segments.clear()

# Reset the score
score = 0

# Reset the delay
delay = 0.1

# Update the score display
pen.clear()
pen.write(“Score: {} High Score: {}”.format(score, high_score), align=”center”, font=(“Courier”, 24, “normal”))

time.sleep(delay)

wn.mainloop()

Like (1)

Attachments