learning from 100 Days of Code: The Complete Python Pro Bootcamp for 2022
inheritance
class Animal:
def __init__(self):
self.num_eyes = 2
def breathe(self):
print("Inhale, exhale.")
class Fish(Animal):
def __init__(self):
super().__init__() #not strictly required
def breathe(self):
super().breathe()
print("doing this underwater.")
def swim(self):
print("moving in water.")
slicing
piano = [a, b, c, d, e, f, g]
piano_keys[2:5] # => c, d, e
piano_keys[2:5:2] # => c,e
piano_keys[::-1] # => g, f, e, d, c, b, a
# main.py
from turtle import Screen
from scoreboard import ScoreBoard
from snake import Snake
from food import Food
import time
screen = Screen()
screen.setup(width=600, height=600)
screen.title("My Snake Game")
screen.bgcolor("black")
screen.tracer(0)
snake = Snake()
food = Food()
scoreboard = ScoreBoard()
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()
if snake.head.distance(food) < 15:
food.refresh()
scoreboard.get_score()
snake.extend()
if snake.head.xcor() > 290 or snake.head.xcor() < -290 or snake.head.ycor() > 290 or snake.head.ycor() < -290:
game_is_on = False
scoreboard.game_over()
for segment in snake.snake[1:]:
if snake.head.distance(segment) < 15:
game_is_on = False
scoreboard.game_over()
screen.exitonclick()
# snake.py
from turtle import Turtle
MOVE_DISTANCE = 20
START_POSITION = [(0, 0), (-20, 0), (-40, 0)]
UP = 90
DOWN = 270
LEFT = 180
RIGHT = 0
class Snake:
def __init__(self):
self.snake = []
self.create_snake()
self.head = self.snake[0]
def create_snake(self):
for position in START_POSITION:
self.add_segment(position)
def add_segment(self, position):
segment = Turtle(shape="square")
segment.color("white")
segment.penup()
segment.goto(position)
self.snake.append(segment)
def extend(self):
self.add_segment(self.snake[-1].position())
def move(self):
for seg_num in range(len(self.snake) - 1, 0, -1):
new_x = self.snake[seg_num - 1].xcor()
new_y = self.snake[seg_num - 1].ycor()
self.snake[seg_num].goto(new_x, new_y)
self.snake[0].forward(MOVE_DISTANCE)
def up(self):
if self.head.heading() != DOWN:
self.head.setheading(UP)
def down(self):
if self.head.heading() != UP:
self.head.setheading(DOWN)
def left(self):
if self.head.heading() != RIGHT:
self.head.setheading(LEFT)
def right(self):
if self.head.heading() != LEFT:
self.head.setheading(RIGHT)
# food.py
from turtle import Turtle
from random import randint
class Food(Turtle):
def __init__(self):
super().__init__()
self.shape("square")
self.penup()
self.shapesize(stretch_wid=0.5, stretch_len=0.5)
self.color("blue")
self.speed("fastest")
self.refresh()
def refresh(self):
x_position = randint(-280, 280)
y_position = randint(-280, 280)
self.goto(x_position, y_position)
# scrore_board.py
from turtle import Turtle
ALIGNMENT = "center"
FONT = ('courier', 18, 'normal')
class ScoreBoard(Turtle):
def __init__(self):
super().__init__()
self.score = 0
self.color("white")
self.hideturtle()
self.penup()
self.goto(0, 270)
self.update_score()
def update_score(self):
self.write(f"Score: {self.score}", align=ALIGNMENT, font=FONT)
def game_over(self):
self.goto(0, 0)
self.write(f"Game Over", align=ALIGNMENT, font=FONT)
def get_score(self):
self.score += 1
self.clear()
self.update_score()