Python 函数重复十次而不是一次-Pygame Zero
我用Pygame Zero编写了一个简单的赛车游戏。这来自MagPi的《树莓皮复古游戏》一书。我是一个初学者程序员,所以我可能会问一个明显的问题。我想做水平测试。每100分,Python 函数重复十次而不是一次-Pygame Zero,python,python-3.x,pygame,pgzero,Python,Python 3.x,Pygame,Pgzero,我用Pygame Zero编写了一个简单的赛车游戏。这来自MagPi的《树莓皮复古游戏》一书。我是一个初学者程序员,所以我可能会问一个明显的问题。我想做水平测试。每100分,级别+1分。在10级比赛中获胜 感兴趣的领域可能是我的draw()函数: global gameStatus, level screen.fill((128, 128, 128)) if gameStatus == 0: car.draw() b = 0
级别
+1分。在10级比赛中获胜
感兴趣的领域可能是我的draw()
函数:
global gameStatus, level
screen.fill((128, 128, 128))
if gameStatus == 0:
car.draw()
b = 0
while b < len(trackLeft):
trackLeft[b].draw()
trackRight[b].draw()
b += 1
screen.draw.text("Score: " + str(score), (50, 30), color="black")
if score % 100 == 0:
check_levels()
screen.draw.text("Level: " + str(level), (50, 50), color="black")
if gameStatus == 1:
screen.blit('rflag', (318, 268))
if gameStatus == 2:
screen.blit('cflag', (318, 268))
global level
if level <= 10:
level += 1
if level == 10:
gameStatus == 2
分数是计算每一个轨道有一个更高的分数
我的问题:当我的分数达到100分时,等级增加10,而不是1。我不知道发生了什么事。可能是因为每个分数都有一些FPS/刻度,并且随着级别在每个刻度上更新,似乎当分数在100上挂起大约10个刻度时,级别会在每个刻度上更新
由于我的程序很短,我将继续发布所有代码:
import time
from random import randint
import pygame
import pgzrun
WIDTH = 700
HEIGHT = 800
car = Actor("racecar")
car.pos = 250, 700
SPEED = 4
trackLeft = []
trackRight = []
trackCount = 0
trackPosition = 250
trackWidth = 120
trackDirection = False
gameStatus = 0
score = 0
level = 1
def draw():
global gameStatus, level
screen.fill((128, 128, 128))
if gameStatus == 0:
car.draw()
b = 0
while b < len(trackLeft):
trackLeft[b].draw()
trackRight[b].draw()
b += 1
screen.draw.text("Score: " + str(score), (50, 30), color="black")
if score % 100 == 0:
check_levels()
screen.draw.text("Level: " + str(level), (50, 50), color="black")
if gameStatus == 1:
screen.blit('rflag', (318, 268))
if gameStatus == 2:
screen.blit('cflag', (318, 268))
def update():
global gameStatus, trackCount
if gameStatus == 0:
if keyboard.left: car.x -= 2
if keyboard.right: car.x += 2
update_track()
def make_track():
global trackCount, trackLeft, trackRight, trackPosition, trackWidth, score
trackLeft.append(Actor("barrier", pos=(trackPosition - trackWidth, 0)))
trackRight.append(Actor("barrier", pos=(trackPosition + trackWidth, 0)))
trackCount += 1
score += 1
def update_track():
global trackCount, trackPosition, trackDirection, trackWidth, gameStatus
b = 0
while b < len(trackLeft):
if car.colliderect(trackLeft[b]) or car.colliderect(trackRight[b]):
gameStatus = 1
trackLeft[b].y += SPEED
trackRight[b].y += SPEED
b += 1
if trackLeft[len(trackLeft) - 1].y > 32:
if trackDirection == False: trackPosition += 16
if trackDirection == True: trackPosition -= 16
if randint(0, 4) == 1: trackDirection = not trackDirection
if trackPosition > 700 - trackWidth: trackDirection = True
if trackPosition < trackWidth: trackDirection = False
make_track()
def check_levels():
global level
if level <= 10:
level += 1
if level == 10:
gameStatus = 2
make_track()
pgzrun.go()
导入时间
从随机导入randint
导入pygame
导入pgzrun
宽度=700
高度=800
汽车=演员(“赛车”)
car.pos=250700
速度=4
trackLeft=[]
trackRight=[]
trackCount=0
轨道位置=250
轨道宽度=120
trackDirection=False
游戏状态=0
分数=0
级别=1
def draw():
全球游戏状态、级别
屏幕填充((128、128、128))
如果gameStatus==0:
car.draw()
b=0
当b32:
如果trackDirection==False:trackPosition+=16
如果trackDirection==True:trackPosition-=16
如果randint(0,4)=1:trackDirection=非trackDirection
如果trackPosition>700-trackWidth:trackDirection=True
如果trackPosition 如果级别,则必须在更新分数时进行级别检查。注意,draw
的执行频率高于分数的更新频率,因此如果分数%100==0:
会多次完成,并且级别会增加一次以上:
def draw():
全球游戏状态、级别
屏幕填充((128、128、128))
如果gameStatus==0:
# [...]
screen.draw.text(“分数:+str(分数),(50,30),color=“黑色”)
#删除=高度:
del trackRight[0]
trackCount+=1
分数+=1
如果分数%100==0:
检查_级别()
gameStatus==2
-应该是gameStatus=2
?是的,对不起!我会编辑的!谢谢你的回复,很有效。而且几乎没有更多的滞后!但现在我感兴趣的是——在程序的末尾,make_track()运行。draw()也会运行。这是否意味着draw()在帧之间运行?@PolarBear123否。并且每帧调用一次。但是如果trackLeft[len(trackLeft)-1].y>32:
,则调用make\u track
。因此,它不会在每一帧中调用,并且分数不会在每一帧中递增。代码末尾的make_track
调用在启动时执行,并将第一个元素添加到trackLeft
和trackRight
。