Skip to content

Instantly share code, notes, and snippets.

@wynand1004
Created September 2, 2018 08:56
Show Gist options
  • Save wynand1004/ec105fd2f457b10d971c09586ec44900 to your computer and use it in GitHub Desktop.
Save wynand1004/ec105fd2f457b10d971c09586ec44900 to your computer and use it in GitHub Desktop.
A Simple Snake Game made in Python 3
# Simple Snake Game in Python 3 for Beginners
# By @TokyoEdTech
import turtle
import time
import random
delay = 0.1
# 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("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()
@ElmoDaFrog
Copy link

How to change the background to a custom picture instead of a colour

@bon2013
Copy link

bon2013 commented Dec 23, 2021

thanks

@TinyHaitch
Copy link

nice game

@Olexandr-Andriyenko
Copy link

Nice game, you can create classes for the snake body, scoreboard, food and maybe wall. Then the code will be more structured :)

@SohamRoy20Gaming
Copy link

 /bin/python3 "/home/devil/Code/Python/Turtle/Snake Game/snake_game.py"
Traceback (most recent call last):
  File "/home/devil/Code/Python/Turtle/Snake Game/snake_game.py", line 4, in <module>
    import turtle
  File "/usr/lib/python3.10/turtle.py", line 107, in <module>
    import tkinter as TK
ModuleNotFoundError: No module named 'tkinter'

@wynand1004
Copy link
Author

wynand1004 commented Jan 20, 2023 via email

@sweir66
Copy link

sweir66 commented Feb 9, 2023

how would one add a border around the playable area, as i would like to enlarge the game screen but a border around the playable are would make it easier to play

@wynand1004
Copy link
Author

wynand1004 commented Feb 9, 2023 via email

@wynand1004
Copy link
Author

wynand1004 commented Apr 14, 2023 via email

@Aroulis8
Copy link

Great i liked it

@wynand1004
Copy link
Author

wynand1004 commented Aug 21, 2023 via email

@Aroulis8
Copy link

😄

@jarvissilva937
Copy link

Great code, here is is tutorial to make fruit ninja game in python

@misakik4
Copy link

its amazing game nice! I'm still learning how to code python thanks for sharing this!

@Raghav2013R
Copy link

Hey! I was wondering is there a way I can change the background from green to checkers?

You can

@naqiiabbas
Copy link

 /bin/python3 "/home/devil/Code/Python/Turtle/Snake Game/snake_game.py"
Traceback (most recent call last):
  File "/home/devil/Code/Python/Turtle/Snake Game/snake_game.py", line 4, in <module>
    import turtle
  File "/usr/lib/python3.10/turtle.py", line 107, in <module>
    import tkinter as TK
ModuleNotFoundError: No module named 'tkinter'

go to terminal and type pip install tkinter, i hope it will work

@beResonant
Copy link

arrow keys are not working in ubuntu how to play the game

Change each of the letters for up, down, etc in the "onkeypress" statements to correspond to the literal words "Up" "Down" "Left" and "Right" in place of the 'wsad' options, and you'll get keyboard arrow functionality.

@malachihartley
Copy link

I'm using JDoodle on my school laptop so that might be the problem as a whole, but the only error I get is always:

Dependency download failed - --null

@wynand1004
Copy link
Author

wynand1004 commented Dec 17, 2024 via email

@markusfury
Copy link

markusfury commented Apr 26, 2025

I think this game is really cool! Simple and fun snake concept with great Python implementation. Key controls are convenient, and the mechanics of eating food and making the snake bigger add interest. However, in my opinion, the game can be improved.

@0PrintPre
Copy link

How to play?

WASD

@midz8
Copy link

midz8 commented Oct 11, 2025

Thanks for the game. It was fun to play. Needs a pause button and the sync is off when turning left, right, up and down but hopefully i can try add that if i am allowed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment