Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 40f23fa

Browse files
Merge pull request #836 from AlexAdvent/enhanced-snake-game
Enhanced snake game
2 parents b67951d + 0d99f8e commit 40f23fa

File tree

8 files changed

+247
-0
lines changed

8 files changed

+247
-0
lines changed
23.6 KB
Loading[フレーム]
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Snake_Game - Game
2+
3+
## Aim
4+
5+
The main of this project is to create famous snake game
6+
## Purpose
7+
8+
The purpose of this project is creating a game using python for the players.
9+
10+
## Short description of package/script
11+
12+
Simple snake game is easy to play you just need to used up key ↑ up arrow to move snake up , ↓ down arrow to move snake down , ← left arrow to move to left and → right arrow to move snake right.
13+
14+
- If standalone script, short description of script explaining what it achieves.
15+
16+
- List out the libraries imported.
17+
- random
18+
- time
19+
- turtle
20+
21+
## Setup instructions
22+
23+
Download the Enhanced folder and extract the files
24+
25+
Run them by double clicking main.py.
26+
27+
## Workflow
28+
29+
- Importing the required modules
30+
- Imported snake and other object class
31+
- Create Intance of Class
32+
- move the snake and listening for event
33+
- change direction of snake on key
34+
- check weather snake eat food and extend snake
35+
- check weather snake hit wall or tail
36+
- on gameover save high_score
37+
38+
39+
## what's new in update version
40+
- Create different class for each object
41+
- seperating each class in different file
42+
- Save highest score for future reference
43+
44+
## Output
45+
46+
![](https://github.com/AlexAdvent/Awesome_Python_Scripts/blob/enhanced-snake-game/PyGamesScripts/Snake%20Game/Enhanced/Images/output.png)
47+
48+
## Author(s)
49+
50+
Alex Advent
51+
52+
## Disclaimers, if any
53+
54+
None
55+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# class for food object
2+
from turtle import Turtle
3+
import random
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+
# function for creating new food
17+
def refresh(self):
18+
random_x = random.randint(-280, 280)
19+
random_y = random.randint(-280, 280)
20+
self.goto(random_x, random_y)
21+
22+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# import class and library
2+
from turtle import Screen
3+
from snake import Snake
4+
from food import Food
5+
from scoreboard import Scoreboard
6+
import time
7+
8+
# setupping screen
9+
screen = Screen()
10+
screen.setup(width=600, height=600)
11+
screen.bgcolor("black")
12+
screen.title("Snake Game")
13+
screen.tracer(0)
14+
15+
# creating snake player from snake class
16+
snake_player = Snake()
17+
food = Food()
18+
scoreboard = Scoreboard()
19+
20+
# listening to keyboard event
21+
screen.listen()
22+
screen.onkey(snake_player.up,"Up")
23+
screen.onkey(snake_player.down,"Down")
24+
screen.onkey(snake_player.left,"Left")
25+
screen.onkey(snake_player.right,"Right")
26+
27+
28+
# check for game status
29+
game_over = False
30+
31+
# to game keep running
32+
while not game_over:
33+
screen.update()
34+
# create delay in game
35+
time.sleep(0.1)
36+
# calling move function
37+
snake_player.move()
38+
39+
# check snake eat food
40+
if snake_player.snakes_bit[0].distance(food) < 15:
41+
food.refresh()
42+
scoreboard.incr_score()
43+
print(snake_player.snakes_bit[0].position() ,"player at")
44+
print(snake_player.snakes_bit[-1].position() ,"last player at")
45+
snake_player.extend()
46+
47+
# detect collision with wall
48+
if snake_player.snakes_bit[0].xcor() > 280 or snake_player.snakes_bit[0].xcor() < -280 or snake_player.snakes_bit[0].ycor() > 280 or snake_player.snakes_bit[0].ycor() < -280:
49+
50+
scoreboard.reset()
51+
snake_player.reset()
52+
53+
# DETECT COLLISION WITH TAIL
54+
for bit in snake_player.snakes_bit:
55+
if bit == snake_player.snakes_bit[0]:
56+
pass
57+
elif snake_player.snakes_bit[0].distance(bit) < 10:
58+
scoreboard.reset()
59+
snake_player.reset()
60+
61+
62+
screen.exitonclick()
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
turtle
2+
time
3+
random
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# class to handle scorecard
2+
from turtle import Turtle
3+
4+
5+
class Scoreboard(Turtle):
6+
7+
def __init__(self):
8+
super().__init__()
9+
self.score = 0
10+
self.high_score = 0
11+
self.get_high_score()
12+
self.color("white")
13+
self.penup()
14+
self.update_score()
15+
self.hideturtle()
16+
17+
# get and store highest score
18+
def get_high_score(self):
19+
with open("high_score.txt", mode="r") as file_score:
20+
self.high_score = int(file_score.read())
21+
22+
def set_high_score(self):
23+
with open("high_score.txt", mode="w") as file_score:
24+
file_score.write(f"{self.score}")
25+
26+
# increment score
27+
def incr_score(self):
28+
self.score += 1
29+
self.update_score()
30+
31+
32+
def update_score(self):
33+
self.clear()
34+
self.goto(0, 270)
35+
self.write(f"Score: {self.score} High Score: {self.high_score}", align="center", font=("Arial", 18, "normal"))
36+
37+
# reset score when game over
38+
def reset(self):
39+
if self.score > self.high_score:
40+
self.set_high_score()
41+
self.high_score = self.score
42+
self.score = 0
43+
self.update_score()
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# snake player class
2+
from turtle import Turtle
3+
4+
MOVE_DISTANCE = 20
5+
6+
7+
class Snake:
8+
def __init__(self):
9+
self.snakes_bit = []
10+
self.create_snake()
11+
12+
def create_snake(self):
13+
for i in range(3):
14+
snake = Turtle(shape="square")
15+
snake.color("white")
16+
snake.penup()
17+
snake.goto(x=-20 * i, y=0)
18+
self.snakes_bit.append(snake)
19+
20+
# reset snake player when game over
21+
def reset(self):
22+
for bit in self.snakes_bit:
23+
bit.goto(1000,1000)
24+
self.snakes_bit.clear()
25+
26+
self.create_snake()
27+
28+
29+
def move(self):
30+
for current in range(len(self.snakes_bit) - 1, 0, -1):
31+
new_x = self.snakes_bit[current - 1].xcor()
32+
new_y = self.snakes_bit[current - 1].ycor()
33+
self.snakes_bit[current].goto(new_x, new_y)
34+
self.snakes_bit[0].forward(MOVE_DISTANCE)
35+
36+
# extend player when rat food
37+
def extend(self):
38+
# add new bit
39+
snake = Turtle(shape="square")
40+
snake.color("white")
41+
snake.penup()
42+
snake.goto(self.snakes_bit[-1].position())
43+
print("adding at",self.snakes_bit[-1].position())
44+
self.snakes_bit.append(snake)
45+
46+
# handle movement
47+
def up(self):
48+
if self.snakes_bit[0].heading() != 270:
49+
self.snakes_bit[0].setheading(90)
50+
51+
def down(self):
52+
if self.snakes_bit[0].heading() != 90:
53+
self.snakes_bit[0].setheading(270)
54+
55+
def left(self):
56+
if self.snakes_bit[0].heading() != 0:
57+
self.snakes_bit[0].setheading(180)
58+
59+
def right(self):
60+
if self.snakes_bit[0].heading() != 180:
61+
self.snakes_bit[0].setheading(0)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /