A controllable snake!
A controllable snake! Added snake in README!
This commit is contained in:
parent
8f4c47043d
commit
735ff97d0d
3 changed files with 79 additions and 0 deletions
8
Day 20/README.md
Normal file
8
Day 20/README.md
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
# Day 20 - Build the Snake Game Part 1: Animation & Coordinates
|
||||
|
||||
- Made a controllable snake, and will complete the full snake game on Day 21.
|
||||
- Abstracted snake logic into a Snake class.
|
||||
|
||||
## Snake
|
||||
|
||||

|
||||
26
Day 20/main.py
Normal file
26
Day 20/main.py
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
from turtle import Screen
|
||||
from snake import Snake
|
||||
import time
|
||||
|
||||
screen = Screen()
|
||||
screen.setup(width=600, height=600)
|
||||
screen.bgcolor("black")
|
||||
screen.title("A Snake Game!")
|
||||
screen.tracer(0)
|
||||
|
||||
snake = Snake()
|
||||
|
||||
screen.listen()
|
||||
screen.onkey(snake.up, "Up")
|
||||
screen.onkey(snake.down, "Down")
|
||||
screen.onkey(snake.left, "Left")
|
||||
screen.onkey(snake.right, "Right")
|
||||
|
||||
game_is_on = True
|
||||
while game_is_on:
|
||||
screen.update()
|
||||
time.sleep(0.1)
|
||||
|
||||
snake.move()
|
||||
|
||||
screen.exitonclick()
|
||||
45
Day 20/snake.py
Normal file
45
Day 20/snake.py
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
from turtle import Turtle
|
||||
STARTING_POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
|
||||
MOVE_DISTANCE = 20
|
||||
UP = 90
|
||||
DOWN = 270
|
||||
LEFT = 180
|
||||
RIGHT = 0
|
||||
|
||||
class Snake:
|
||||
|
||||
def __init__(self):
|
||||
self.segments = []
|
||||
self.create_snake()
|
||||
self.head = self.segments[0]
|
||||
|
||||
def create_snake(self):
|
||||
for position in STARTING_POSITIONS:
|
||||
segment = Turtle(shape="square")
|
||||
segment.color("white")
|
||||
segment.penup()
|
||||
segment.goto(position)
|
||||
self.segments.append(segment)
|
||||
|
||||
def move(self):
|
||||
for segment_index in range(len(self.segments) - 1, 0, -1):
|
||||
new_x = self.segments[segment_index - 1].xcor()
|
||||
new_y = self.segments[segment_index - 1].ycor()
|
||||
self.segments[segment_index].goto(new_x, new_y)
|
||||
self.head.forward(MOVE_DISTANCE)
|
||||
|
||||
def up(self):
|
||||
if self.head.heading() != DOWN:
|
||||
self.head.setheading(90)
|
||||
|
||||
def down(self):
|
||||
if self.head.heading() != UP:
|
||||
self.head.setheading(270)
|
||||
|
||||
def left(self):
|
||||
if self.head.heading() != RIGHT:
|
||||
self.head.setheading(180)
|
||||
|
||||
def right(self):
|
||||
if self.head.heading() != LEFT:
|
||||
self.head.setheading(0)
|
||||
Loading…
Add table
Add a link
Reference in a new issue