游戲說明:螢屏頂部落下不同字母,敲擊鍵盤相應的鍵使字母消失。字母的x位置是隨機的。字母的下落速度逐漸加快。如果10個字母掉在螢屏底部,游戲結束。為了簡化游戲,先生成相同的一個字母(例如字母A)。已經實作了功能。但是生成字母的速度太快了,如何添加代碼控制字母A的生成速度呢?貌似添加time.sleep(5)會使字母下落卡頓。
A.png:

下面是我的代碼:
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) # ((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()
2.settings.py
class Settings():
def __init__(self):
self.bg_color = (0, 0, 0)
self.letter_speed_factor = 10
3. 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()
4. 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
uj5u.com熱心網友回復:
搞一個執行緒來控制字母生成,在執行緒里sleep , 這樣就不會導致主界面卡頓。uj5u.com熱心網友回復:
如樓上所說,還是用執行緒吧。啟用執行緒定時器。
這里順便也把 隨機字母產生了(包括大小寫),不知對否,參考。
import threading, string, random
def showLetter():
global i, c
threading.Timer(5, showLetter).start() # 每5秒列印一次
s = random.choice(string.ascii_letters)
print("Second: %d, Random Letter %d: %s" % (i, c, s))
i += 5
c += 1
i = 0
c = 1
showLetter()
uj5u.com熱心網友回復:
Python對執行緒數量有限制嗎?這里要生成的字母個數很多。uj5u.com熱心網友回復:
是一個執行緒控制所有的字母生成,直到主執行緒終止這個執行緒為止。python 對執行緒數量限制沒研究過, 我想對于目前的普通PC,十幾個執行緒應該沒問題。 我一般也就同時有4,5個執行緒。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/138731.html
上一篇:ansys安裝問題
下一篇:socket 發訊息失敗
