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()
@futureneurologist
Copy link

Traceback (most recent call last):
File "C:/Users/INDIA/AppData/Local/Programs/Python/Python311/Lovely game.py", line 90, in
wn.update()
File "C:\Users\INDIA\AppData\Local\Programs\Python\Python311\Lib\turtle.py", line 1304, in update
t._update_data()
File "C:\Users\INDIA\AppData\Local\Programs\Python\Python311\Lib\turtle.py", line 2647, in _update_data
self.screen._incrementudc()
File "C:\Users\INDIA\AppData\Local\Programs\Python\Python311\Lib\turtle.py", line 1293, in _incrementudc
raise Terminator
turtle.Terminator
"What to do with this now??"

@wynand1004
Copy link
Author

wynand1004 commented Nov 5, 2023 via email

@futureneurologist
Copy link

futureneurologist commented Nov 5, 2023 via email

@wynand1004
Copy link
Author

wynand1004 commented Nov 5, 2023 via email

@ShantanuPandeyGit
Copy link

ShantanuPandeyGit commented Dec 8, 2023

Getting below error while running in Ubuntu terminal

Traceback (most recent call last):
File "/home/ubuntu/python/snake.py", line 12, in
wn = turtle.Screen()
File "/usr/lib/python3.10/turtle.py", line 3664, in Screen
Turtle._screen = _Screen()
File "/usr/lib/python3.10/turtle.py", line 3680, in init
_Screen._root = self._root = _Root()
File "/usr/lib/python3.10/turtle.py", line 435, in init
TK.Tk.init(self)
File "/usr/lib/python3.10/tkinter/init.py", line 2299, in init
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
ubuntu@ip-172-31-22-55:~/python$ nano snake.py

@wynand1004
Copy link
Author

wynand1004 commented Dec 8, 2023 via email

@NaxUnknown
Copy link

Thank you for the code! The snake game was amazing.

I think you're commenting to the wrong person, just saying

Wdym it works

@AshfaqueAhmed123
Copy link

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

@wynand1004
Copy link
Author

wynand1004 commented Apr 7, 2024 via email

@misakik4
Copy link

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

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