Reputation: 129
In this game, different letters fall down from the top of the screen after a time interval and the letter will vanish while you strike the corresponding key on the keyboard. The x position of each letter is random and the falling speed will accelerate as the game progress. Game will end under a certain condition(e.g. screen height is occupied by letters). This seems a great chanllenge for me. Thus, during the first stage, my codes are simplified for same letters 'A' rather than varied letters. The question is how to control the speed of generating each 'A' in the game. At present, it is too fast. I've tried time.sleep(5) but it also stops the falling down of each letter. Here are the codes:
import sys
import pygame
from pygame.locals import *
from settings import Settings
from letter import Letter
import game_functions as gf
from pygame.sprite import Group
def run_game():
pygame.init()
az_settings =Settings()
screen = pygame.display.set_mode((0,0), RESIZABLE)
pygame.display.set_caption("Alphabet Zoo")
letters = pygame.sprite.Group()
while True:
gf.letter_generator(az_settings ,screen, letters)
gf.check_events(letters)
letters.update()
gf.update_screen(az_settings, screen, letters)
run_game()
def __init__(self):
self.bg_color = (0, 0, 0)
self.letter_speed_factor = 1
import sys
import pygame
import time
from letter import Letter
def letter_generator(az_settings, screen, letters):
# time.sleep(5)
# This setting not only slowdowns the generating of A
# but also stops the falling down of each A for a short time.
new_letter = Letter(az_settings, screen)
letters.add(new_letter)
def check_events(letters):
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
letters.empty()
def update_screen(az_settings, screen, letters):
screen.fill(az_settings.bg_color)
letters.draw(screen)
letters.update()
pygame.display.flip()
import pygame
import random
from pygame.sprite import Sprite
class Letter(Sprite):
def __init__(self, az_settings, screen):
super().__init__()
self.screen = screen
self.az_settings = az_settings
self.image = pygame.image.load('images/A.png')
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
self.rect.centerx = random.randint(0, self.screen_rect.right)
self.rect.top = self.screen_rect.top
self.center = float(self.rect.centerx)
def update(self):
if self.rect.bottom < self.screen_rect.bottom:
self.rect.centery += self.az_settings.letter_speed_factor
How can I achieve my goal to control the speed of generating A?
Upvotes: 1
Views: 135
Reputation:
You can look into time.time()
function from time module. Example:
import time
start = time.time()
sleepTime = 1
while True:
print("This is being printed meaning the program isn't stopped")
now = time.time()
if now - start > sleepTime:
print("generate A in this area. This will only happen every one second.")
start = now
Upvotes: 1