-
Notifications
You must be signed in to change notification settings - Fork 443
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #54 from Akash0239/patch-1
Created a snake game.py
- Loading branch information
Showing
1 changed file
with
133 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
import random | ||
import time | ||
import turtle | ||
|
||
# Set up the screen | ||
win = turtle.Screen() | ||
win.title("Snake Game") | ||
win.bgcolor("black") | ||
win.setup(width=600, height=600) | ||
win.tracer(0) | ||
|
||
# Snake head | ||
head = turtle.Turtle() | ||
head.speed(0) | ||
head.shape("square") | ||
head.color("white") | ||
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 = [] | ||
|
||
|
||
# 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 | ||
win.listen() | ||
win.onkeypress(go_up, "Up") | ||
win.onkeypress(go_down, "Down") | ||
win.onkeypress(go_left, "Left") | ||
win.onkeypress(go_right, "Right") | ||
|
||
# Main game loop | ||
while True: | ||
win.update() | ||
|
||
# Check for 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) | ||
|
||
segments.clear() | ||
|
||
# Check for collision with food | ||
if head.distance(food) < 20: | ||
x = random.randint(-280, 280) | ||
y = random.randint(-280, 280) | ||
food.goto(x, y) | ||
|
||
new_segment = turtle.Turtle() | ||
new_segment.speed(0) | ||
new_segment.shape("square") | ||
new_segment.color("grey") | ||
new_segment.penup() | ||
segments.append(new_segment) | ||
|
||
# Move the end segments first | ||
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" | ||
|
||
for segment in segments: | ||
segment.goto(1000, 1000) | ||
|
||
segments.clear() | ||
|
||
time.sleep(0.1) |