Skip to content

Commit 0ad3a2a

Browse files
authored
Merge pull request #160 from bharat13soni/sanke-game
Added snake game written in python
2 parents d151ac1 + 0a5b7dc commit 0ad3a2a

File tree

4 files changed

+147
-0
lines changed

4 files changed

+147
-0
lines changed

S/snake-game/food.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import random
2+
from turtle import Turtle
3+
4+
5+
class Food(Turtle):
6+
7+
def __init__(self):
8+
super().__init__()
9+
self.shape("circle")
10+
self.penup()
11+
self.shapesize(stretch_len=0.5, stretch_wid=0.5)
12+
self.color("blue")
13+
self.speed("fastest")
14+
self.refresh()
15+
16+
def refresh(self):
17+
random_x = random.randint(-280, 280)
18+
random_y = random.randint(-280, 280)
19+
self.goto(random_x, random_y)

S/snake-game/main.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import time
2+
from turtle import Screen
3+
4+
from food import Food
5+
from scoreboard import Scoreboard
6+
from snake import Snake
7+
8+
screen = Screen()
9+
screen.setup(width=600, height=600)
10+
screen.bgcolor("black")
11+
screen.title("My Snake Game")
12+
screen.tracer(0)
13+
14+
snake = Snake()
15+
food = Food()
16+
scoreboard = Scoreboard()
17+
18+
screen.listen()
19+
screen.onkey(snake.up, "Up")
20+
screen.onkey(snake.down, "Down")
21+
screen.onkey(snake.left, "Left")
22+
screen.onkey(snake.right, "Right")
23+
24+
game_is_on = True
25+
26+
while game_is_on:
27+
screen.update()
28+
time.sleep(0.1)
29+
snake.move()
30+
31+
# Detect food collision
32+
if snake.head.distance(food) < 15:
33+
food.refresh()
34+
snake.extend()
35+
scoreboard.increase_score()
36+
37+
# Detect wall collision
38+
if snake.head.xcor() > 280 or snake.head.xcor() < -280 or snake.head.ycor() > 280 or snake.head.ycor() < -280:
39+
game_is_on = False
40+
scoreboard.game_over()
41+
42+
# Detect tail collision
43+
for segment in snake.segments[1:]:
44+
if snake.head.distance(segment) < 10:
45+
game_is_on = False
46+
scoreboard.game_over()
47+
screen.exitonclick()

S/snake-game/scoreboard.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from turtle import Turtle
2+
3+
FONT = ("Arial", 24, "normal")
4+
ALIGN = "center"
5+
6+
7+
class Scoreboard(Turtle):
8+
9+
def __init__(self):
10+
super().__init__()
11+
self.score = 0
12+
self.color("white")
13+
self.penup()
14+
self.goto(0, 270)
15+
self.update_score_board()
16+
self.hideturtle()
17+
18+
def update_score_board(self):
19+
self.write(f"Score: {self.score}", align=ALIGN, font=FONT)
20+
21+
def game_over(self):
22+
self.goto(0, 0)
23+
self.write("GAME OVER", align=ALIGN, font=FONT)
24+
25+
def increase_score(self):
26+
self.score += 1
27+
self.clear()
28+
self.update_score_board()

S/snake-game/snake.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from turtle import Turtle
2+
3+
MOVE_DISTANCE = 20
4+
STARTING_POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
5+
UP = 90
6+
DOWN = 270
7+
LEFT = 180
8+
RIGHT = 0
9+
10+
11+
class Snake:
12+
13+
def __init__(self):
14+
self.segments = []
15+
self.create_snake()
16+
self.head = self.segments[0]
17+
18+
def create_snake(self):
19+
for position in STARTING_POSITIONS:
20+
self.add_segment(position)
21+
22+
def add_segment(self, position):
23+
new_segment = Turtle(shape="square")
24+
new_segment.penup()
25+
new_segment.color("white")
26+
new_segment.goto(position)
27+
self.segments.append(new_segment)
28+
29+
def extend(self):
30+
self.add_segment(self.segments[-1].position())
31+
32+
def move(self):
33+
for seg_num in range(len(self.segments) - 1, 0, -1):
34+
new_x = self.segments[seg_num - 1].xcor()
35+
new_y = self.segments[seg_num - 1].ycor()
36+
self.segments[seg_num].goto(new_x, new_y)
37+
self.head.forward(MOVE_DISTANCE)
38+
39+
def up(self):
40+
if self.head.heading() != DOWN:
41+
self.head.seth(UP)
42+
43+
def down(self):
44+
if self.head.heading() != UP:
45+
self.head.seth(DOWN)
46+
47+
def left(self):
48+
if self.head.heading() != RIGHT:
49+
self.head.seth(LEFT)
50+
51+
def right(self):
52+
if self.head.heading() != LEFT:
53+
self.head.seth(RIGHT)

0 commit comments

Comments
 (0)