Я новичок в Python, учусь создавать простую игру в Pygame, где игрок (обезьяна) пытается поймать как можно больше бананов, падающих с верхней части экрана.
Моя проблема в том, как заставить бананы появляться и падать индивидуально каждые х раз / секунд. Либо они все появляются одновременно, либо, если я использую time.sleep, приостанавливаю бананы в воздухе. Даже использовала многопоточность после полной потери.
Соответствующие компоненты моего кода следующие:
catch_game
import sys
import pygame
from pygame.sprite import Group
from settings import Settings
# from background import Background
from monkey import Monkey
from banana import Banana
import functions
def run_game():
pygame.init()
settings = Settings()
screen = pygame.display.set_mode((settings.screen_width, settings.screen_height))
pygame.display.set_caption('Monkey Catch')
monkey = Monkey(screen, settings)
# background = Background((0, 0), screen)
bananas = Group()
functions.create_banana(screen, settings, bananas)
while True:
monkey.movement()
functions.check_events(monkey)
functions.update_screen(screen, settings, monkey, bananas)
functions.update_banana(monkey, bananas)
run_game()
банан
import pygame
from pygame.sprite import Sprite
from random import randint
class Banana(Sprite):
def __init__(self, screen, settings):
super(Banana, self).__init__()
self.screen = screen
self.settings = settings
self.image = pygame.image.load('E:\PycharmProjects\catch\images/banana.png')
self.rect = self.image.get_rect()
self.screen_rect = self.screen.get_rect()
self.y = self.screen_rect.top
self.y = float(self.rect.y)
self.x = randint(0, 1150)
self.speed = settings.banana_fallspeed
def update(self):
'''Banana falls down'''
self.y += self.settings.banana_fallspeed
self.rect.y = self.y
self.rect.x = self.x
def blit(self):
self.screen.blit(self.image, self.rect)
функции
import pygame
import sys
from banana import Banana
import threading
import time
def update_screen(screen, settings, monkey, bananas):
screen.fill([255, 255, 255])
# background.blit()
monkey.blit()
for banana in bananas:
banana.update()
bananas.draw(screen)
pygame.display.flip()
def keydown_events(event, monkey):
if event.key == pygame.K_RIGHT:
monkey.moving_right = True
if event.key == pygame.K_LEFT:
monkey.moving_left = True
def keyup_events(event, monkey):
if event.key == pygame.K_RIGHT:
monkey.moving_right = False
if event.key == pygame.K_LEFT:
monkey.moving_left = False
def check_events(monkey):
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
keydown_events(event, monkey)
if event.type == pygame.KEYUP:
keyup_events(event, monkey)
def create_banana(screen, settings, bananas):
banana = Banana(screen, settings)
bananas.add(banana)
def update_banana(monkey, bananas):
'''kill bananas, collisions with monkey'''
for banana in bananas.copy():
if banana.rect.bottom >= 720:
bananas.remove(banana)
collision = pygame.sprite.spritecollide(monkey, bananas, True)
if collision:
bananas.remove(banana)
# time.sleep(2)
# fall_interval = banana.threading.Timer(3, create_banana(screen, settings, bananas))
# fall_interval.start()