В игре 7 файлов:
- WEConf.py | Файл конфигурации
class WEConf:
scWidth = 400 # ширина окна
scHeight = 600 # высота окна
white = (255,255,255) # белый цвет
black = (0, 0, 0) # чёрный цвет
red = (255,0,0) # красный цвет
clock = 60 # частота обновления игры/экрана
2. CollObject.py | Файл для Абстрактного класса Colladable Object, который содержит все ОБЩИЕ методы для всех участников игрового процесса, которые должны взаимодействовать (создавать коллизии)
from WEConf import WEConf as conf
class CollObject():
# основные ПОЛЯ (СВОЙСТВА) объекта для коллизий:
# координата нуля объекта и
# ширина(width) с высотой(height)
x = 0
y = 0
h = 0
w = 0
# Дальше идут МЕТОДЫ класса
def collide(self, collObject): # проверка коллизии с другим объектом
return collObject.y + collObject.h > self.y and collObject.x + collObject.w > self.x and collObject.x < self.x + collObject.w
def getParams(self): # получение основных СВОЙСТВ объекта в виде кортежа ()
return (self.x, self.y, self.w, self.h)
def checkRight(self): # проверка с пересечением экрана справа
return self.x < conf.scWidth - self.w
def checkLeft(self):# проверка с пересечением экрана слева
return self.x > 0
def checkBott(self):# проверка с пересечением экрана снизу
return self.y > conf.scHeight
3. Player.py | EggКласс Игрока
from CollObject import CollObject
from WEConf import WEConf as conf
class Player(CollObject):
def __init__(self): # конструктор
self.w = 50
self.h = 50
self.x = conf.scWidth/2 - self.w/2
self.y = conf.scHeight - self.h
self.playerSpeed = 5
def moveLeft(self): # движение влево
if self.checkLeft():
self.x -= self.playerSpeed
def moveRight(self): # движение вправо
if self.checkRight():
self.x += self.playerSpeed
4. Egg.py | Класс «Яйца»
from CollObject import CollObject
from WEConf import WEConf as conf
import random
class Egg(CollObject):
def __init__(self):
self.w = 30
self.h = 30
self.eggSpeed = 3
def move(self):
self.y += self.eggSpeed
def spawn(self): # рождение/перерождение объекта
self.x = random.randint(0,conf.scWidth-self.w)
self.y = 0
self.eggSpeed += 0.1
def borderTouch(self):
if self.checkBott():
self.spawn()
return True
5. Counters.py | Файл со счётом
class Counters: # просто класс, держащий одно поле(свойство) со счётом.
score = 0
6. WEGame.py | Самый большой файл — контроллер игры(сама игра), который отвечает за все события, которые происходят в Игре
import pygame
from WEConf import WEConf as conf
from Player import Player
from Egg import Egg
from Counters import Counters
class WEGame():
def __init__(self):
pygame.init()
self.clock = pygame.time.Clock()
self.screen = pygame.display.set_mode((conf.scWidth, conf.scHeight))
pygame.display.set_caption("Волк и яйца")
self.font = pygame.font.SysFont(None,30)
self.counters = Counters()
self.player = Player()
self.egg = Egg()
self.egg.spawn()
self.isRunning = True
def updateScene(self):
self.screen.fill(conf.white)
pygame.draw.rect(self.screen, conf.black, self.player.getParams())
pygame.draw.ellipse(self.screen, conf.red, self.egg.getParams())
scoreText = self.font.render("Счёт: " + str(self.counters.score), True, conf.black)
self.screen.blit(scoreText, (10,10) )
pygame.display.update()
self.clock.tick(conf.clock)
def run(self):
for event in pygame.event.get():
if event.type == pygame.QUIT or ( event.type == pygame.KEYDOWN and
event.key == pygame.K_ESCAPE ):
self.isRunning = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.player.moveLeft()
if keys[pygame.K_RIGHT]:
self.player.moveRight()
self.egg.move()
if self.player.collide(self.egg):
self.egg.spawn()
self.counters.score += 1
if self.egg.borderTouch():
self.egg.spawn()
self.counters.score -= 1
def startRun(self):
while self.isRunning:
self.updateScene()
self.run()
pygame.quit()
7. main.py | Точка входа в Игру (запускаемый файл)
from WEGame import WEGame
if __name__ == "__main__":
game = WEGame()
game.startRun()
Архив со всем файлами: