#! /usr/bin/env python3
import sys
import pygame
from pygame.sprite import Sprite
from pygame.sprite import Group
from setting import Settings
from pan import Pan
from pizza import Pizza
from chef import Chef
from game_stats import GameStats
from scoreboard import ScoreBoard
import game_functions as gf
# Инициализация экрана и создание игры.
def rungame():
pygame.init()
ai_setting = Settings()
screen_game = pygame.display.set_mode(
(ai_setting.game_width, ai_setting.game_height))
pygame.display.set_caption("Pizza")
# Создание сковороды.
pan = Pan(screen_game, ai_setting)
# Создание пиццы.
pizza = Pizza(screen_game, ai_setting)
# Создание группы спрайтов.
pizzas = Group()
# Объявление переменной stats.
stats = GameStats(ai_setting)
# Вывод очков на экран.
sb = ScoreBoard(ai_setting, screen_game, stats)
chef = Chef(screen_game, ai_setting, pizza)
"""Основной цикл игры."""
while True:
for pizza in pizzas.sprites():
if pizza.rect.y < ai_setting.game_height:
gf.collisions_pizza_pan(ai_setting, pan, pizzas, pizza, stats, sb)
break
else:
gf.pizza_chef_random(pizza, chef)
# Обновление экрана.
screen_game.blit(ai_setting.bg_fon, ai_setting.bg_rect)
gf.update_screen(screen_game,ai_setting, pizzas, pan, pizza, stats, sb, chef)
rungame()
#! /usr/bin/env python3
import pygame
class Settings():
# Настройки игры.
def __init__(self):
# Разрешение экрана
self.game_width = 640
self.game_height = 480
self.bg_fon = pygame.image.load("image/wall.jpg")
self.bg_rect = self.bg_fon.get_rect(bottomright = (640, 480))
# Скорость перемещения сковороды.
self.speed_pan = 3
# Скорость снижения пиццы
self.pizza_drop_speed = 2
# Подсчет очков.
self.points = 1
#! /usr/bin/env python3
import sys
import pygame
from pygame.sprite import Group
from pan import Pan
from pizza import Pizza
from setting import Settings
import random
def update_pizzas(pizza):
"""Обновляет позицию пиццы."""
pizza.update_pizza()
#def pizzas_rand_cickle(ai_setting, pan, pizzas, pizza, stats, sb, chef):
#if pizza.rect.y < ai_setting.game_height:
#collisions_pizza_pan(ai_setting, pan, pizzas, pizza, stats, sb)
#else:
#pizza_chef_random(pizza, chef)
def pizza_chef_random(pizza, chef):
"""Рандомное появление пиццы."""
numbers = [0, 59, 118, 177, 236, 295, 354, 413, 472, 531, 590]
rand_pizza = random.shuffle(numbers)
rand_pizza
x = random.choice(numbers)
# Координаты появления пиццы.
chef.rect.x = (x)
chef.rect.y = (0)
pizza.rect.x = (x)
pizza.rect.y = (70)
def check_event_keydown(event, pan):
"""Реагирует на нажатие клавиш."""
if event.key == pygame.K_RIGHT:
pan.moving_right = True
if event.key == pygame.K_LEFT:
pan.moving_left = True
def check_event_keyup(event, pan):
"""Реагирует на отпускание клавиш."""
if event.key == pygame.K_RIGHT:
pan.moving_right = False
if event.key == pygame.K_LEFT:
pan.moving_left = False
def check_event(pans):
"""Обрабатывает нажатие клавиш"""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_event_keydown(event, pans)
elif event.type == pygame.KEYUP:
check_event_keyup(event, pans)
def pizza_delete(pizza, pizzas):
"""Проверяет достигла ли пицца края экрана и удаляет её"""
if pizza.rect.bottom >= pizza.screen_rect.bottom:
pizza.remove(pizzas)
print(len(pizzas))
def collisions_pizza_pan(ai_setting, pan, pizzas, pizza, stats, sb):
collisions = pygame.sprite.spritecollide(pan, pizzas, True)
for pizza in collisions:
if collisions:
stats.score += ai_setting.points
sb.prep_score()
pizza.update_pizza()
break
def update_screen(screen_game,ai_setting, pizzas, pan, pizza, stats, sb, chef):
"""Обновляет изображение на экране"""
check_event(pan)
chef.blitme()
pizzas.draw(screen_game)
update_pizzas(pizza)
pan.blitme()
pan.update_pan() # Обновление сковороды.
pizza_delete(pizza, pizzas) # Удаление пиццы вышедшей за экран.
pizzas.add(pizza) # Добавление пиццы в группу спрайтов.
sb.show_score() # Вывод очков на экран.
#pizzas_rand_cickle(ai_setting, pan, pizzas, pizza, stats, sb, chef)
# Отображение последнего прорисованного экрана.
pygame.display.flip()
#! /usr/bin/env python3
import pygame
from pygame.sprite import Sprite
class Pan(Sprite):
"""Инициализирует сковороду и задаёт её начальную позицию"""
def __init__(self, screen_game, ai_setting):
super(Pan, self).__init__()
self.ai_setting = ai_setting
self.screen_game = screen_game
white = (255, 255, 255)
# Загрузка изображения сковороды.
self.image = pygame.image.load('image/pan1.bmp')
self.image.set_colorkey(white)
self.rect = self.image.get_rect()
self.screen_rect = screen_game.get_rect()
# Координаты сковороды.
self.rect.x = (300)
self.rect.y = (433)
# Флаги перемещения сковороды.
self.moving_right = False
self.moving_left = False
def update_pan(self):
if self.moving_right and self.rect.right < self.screen_rect.right:
self.rect.x += self.ai_setting.speed_pan
if self.moving_left and self.rect.left > 0:
self.rect.centerx -= self.ai_setting.speed_pan
def blitme(self):
self.screen_game.blit(self.image, self.rect)
#! /usr/bin/env python3
import pygame
from pygame.sprite import Sprite
import random
class Pizza(Sprite):
"""Инициализирует пиццу"""
def __init__(self, screen_game, ai_setting):
super(Pizza, self).__init__()
self.screen_game = screen_game
self.ai_setting = ai_setting
self.numbers = [0, 59, 118, 177, 236, 295, 354, 413, 472, 531, 590]
self.rand_pizza = random.shuffle(self.numbers)
white = (255, 255, 255)
# Загрузка изображения пиццы.
self.image = pygame.image.load('image/pizza.bmp')
self.image.set_colorkey(white)
self.rect = self.image.get_rect()
self.screen_rect = screen_game.get_rect()
self.rand_pizza
self.x = random.choice(self.numbers)
# Координаты появления пиццы.
self.rect.x = (self.x)
self.rect.y = (70)
def update_pizza(self):
self.rect.y += self.ai_setting.pizza_drop_speed
def blitme(self):
self.screen_game.blit(self.image, self.rect)
#! /usr/bin/env python3
class GameStats():
def __init__(self, ai_setting):
self.ai_setting = ai_setting
self.reset_stats()
def reset_stats(self):
self.score = 0
#! /usr/bin/env python3
import pygame.font
class ScoreBoard():
"""Класс для вывода игровой информации."""
def __init__(self, ai_setting, screen_game, stats):
"""Инициализирует атрибуты подсчета игры."""
self.ai_setting = ai_setting
self.screen_rect = screen_game.get_rect()
self.screen_game = screen_game
self.stats = stats
# Настройка шрифта для вывода на экран.
self.text_color = (30, 30, 30)
self.font = pygame.font.SysFont(None, 48)
# Подготовка исходного изображения.
self.prep_score()
def prep_score(self):
"""Преобразование текущего счета в графическое изображение."""
score_str = str(self.stats.score)
self.score_image = self.font.render(score_str, True,
self.text_color, self.ai_setting.bg_fon)
# Вывод счета в правой вехней части экрана.
self.score_rect = self.score_image.get_rect()
self.score_rect.right = self.screen_rect.right - 20
self.score_rect.top = 20
def show_score(self):
"""Выводит счет на экран."""
self.screen_game.blit(self.score_image, self.score_rect)
#! /usr/bin/env python3
import random
import pygame
from pygame.sprite import Sprite
class Chef(Sprite):
"""Инициализирует пиццу"""
def __init__(self, screen_game, ai_setting, pizza):
super(Chef, self).__init__()
self.screen_game = screen_game
self.ai_setting = ai_setting
blue = (8, 0, 181)
# Загрузка изображения повара.
self.image = pygame.image.load('image/chef.bmp')
self.image.set_colorkey(blue)
self.rect = self.image.get_rect()
self.screen_rect = screen_game.get_rect()
# Координаты появления пиццы.
self.rect.x = (pizza.x)
self.rect.y = (0)
def blitme(self):
self.screen_game.blit(self.image, self.rect)
Вот Весь код.