kafka
kafka

Reputation: 129

Python game: How to control the speed of generating A?

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:

  1. alphabet_zoo.py
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()

  1. settings.py
    def __init__(self):
        self.bg_color = (0, 0, 0)
        self.letter_speed_factor = 1
  1. game_functions.py
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()
  1. letter.py
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

Answers (1)

user12291970
user12291970

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

Related Questions