如何解决在 pygame 中发出运行函数
import pygame
import random
import time
pygame.init()
backX = 1000
backY = 600
screen = pygame.display.set_mode((backX,backY))
score = 0
white = (255,255,255)
green = (0,0)
blue = (0,128)
timespent = 0
pygame.display.set_caption('Monkey Simulator') # game name
pygame.font.init() # you have to call this at the start,# if you want to use this module.
myfont = pygame.font.SysFont('Comic Sans MS',30)
textsurface = myfont.render('score: ' + str(score),False,(255,255))
pygame.mixer.init()
# music
sound = pygame.mixer.sound('background1.mp3')
collection = pygame.mixer.sound('collection.mp3')
gameover1 = pygame.mixer.sound('gameover.mp3')
sound.play(-1)
# score indicator
text = myfont.render('score: ' + str(score),True,white,blue)
textRect = text.get_rect() # getting the rectangle for the text object
textRect.center = (400 // 2,400 // 2)
pre_background = pygame.image.load('background.jpeg')
background = pygame.transform.scale(pre_background,(backX,backY))
clock = pygame.time.Clock()
FPS = 60
vel = 6.5
BLACK = (0,0)
monkeyimg = pygame.image.load('monkey.png')
playerX = 410
playerY = 435
bananaveLocity = 4
monkey = pygame.transform.scale(monkeyimg,(100,120))
prebanana = pygame.image.load('banana.png')
bananaXList = []
def change():
if score>=5:
monkey = pygame.transform.scale(pre_shark,100))
banana = pygame.transform.scale(pre_meat,(50,50))
background = pygame.transform.scale(underwater,backY))
for i in range(50):
value = random.randint(10,980)
bananaXList.append(value)
valuenumber = random.randint(1,30)
bananaX = bananaXList[valuenumber - 1]
bananaY = 0
banana = pygame.transform.scale(prebanana,50))
underwater = pygame.image.load('underwater.jpg')
pre_shark = pygame.image.load('shark.png')
pre_meat = pygame.image.load('meat.png')
banana_rect = banana.get_rect(topleft=(bananaX,bananaY))
monkey_rect = monkey.get_rect(topleft=(playerX,playerY))
run = True
black = (0,0)
# start screen
screen.blit(background,(0,0))
myfont = pygame.font.SysFont("Britannic Bold",50)
end_it = False
while not end_it:
myfont1 = pygame.font.SysFont("Britannic Bold",35)
nlabel = myfont.render("Monkey Simulator",1,255))
info = myfont1.render("Use your right and left arrow keys to move the character.",255))
info2 = myfont1.render("Try to catch as many bananas as you can while the game speeds up!",255))
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
end_it = True
screen.blit(nlabel,(400,150))
screen.blit(info,300))
screen.blit(info2,350))
pygame.display.flip()
while run:
clock.tick(FPS)
screen.fill(BLACK)
screen.blit(background,0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
# banana animation
bananaY = bananaY + bananaveLocity
timespent = int(pygame.time.get_ticks() / 1000)
bananaveLocity = 4 + (timespent * 0.055)
vel = 6.5 + (timespent * 0.07)
# end game sequence
change()
if bananaY > 510:
bananaX = -50
bananaY = -50
banana
veLocity = 0
gameover = pygame.image.load("gameover.jpg")
background = pygame.transform.scale(gameover,backY))
pygame.mixer.sound.stop(sound)
gameover1.play()
# collecting coins sequence
if banana_rect.colliderect(monkey_rect):
collection.play()
valuenumber = random.randint(1,30)
bananaX = bananaXList[valuenumber - 1]
bananaY = -25
score += 1
# moving character
if keys[pygame.K_LEFT] and playerX > 0:
playerX = playerX - vel
if keys[pygame.K_RIGHT] and playerX < 930:
playerX = playerX + vel
# adding the sprites to the screen
screen.blit(monkey,(playerX,playerY))
screen.blit(banana,(bananaX,bananaY))
banana_rect = banana.get_rect(topleft=(bananaX,bananaY))
monkey_rect = monkey.get_rect(topleft=(playerX,playerY))
pygame.draw.rect(screen,(150,75,0),pygame.Rect(0,534,1000,20))
screen.blit(textsurface,(30,0))
textsurface = myfont.render('score: ' + str(score),255))
pygame.display.update()
现在我正在制作一款收集游戏。一旦你达到某个分数,我想使用一个函数来替换所有图像。但是,无论您获得多高的分数,它都不起作用。我不明白这个问题,因为我通过放置打印语句测试了函数和 if 语句。
解决方法
如果要更改函数内全局命名空间中的变量,则必须使用 global
statement:
def change():
global monkey,banana,background
if score>=5:
monkey = pygame.transform.scale(pre_shark,(100,100))
banana = pygame.transform.scale(pre_meat,(50,50))
background = pygame.transform.scale(underwater,(backX,backY))
如果不使用 global
语句,则将值分配给函数作用域内的局部变量。
另一种选择是从函数返回新值:
def change():
if score>=5:
return (
pygame.transform.scale(pre_shark,100)),pygame.transform.scale(pre_meat,50)),pygame.transform.scale(underwater,backY)) )
return monkey,background
while True:
# [...]
monkey,background = change()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。