def StartScreen():
import pygame
pygame.init()
white = 230,230,230
blue = 0,0,200
water = 0,255,255
red = 255,0,0
WaterLevel = 400
Depth = 150
Move = True
Location = 825
TextTop = 350
rise = True
TextSink = False
score = 0
CLOCK = pygame.time.Clock()
FPS = 60
gameDisplay = pygame.display.set_mode((272,552))
pygame.display.set_caption('Boat Game')
BoatFloat = pygame.image.load("BoatFloatCut.png").convert_alpha()
BoatFloat = pygame.transform.scale(BoatFloat, (220,50))
boat = pygame.image.load("BoatLogoCut.png").convert_alpha()
boat = pygame.transform.scale(boat, (140,100))
stop = False
while not stop:
###### Screen Setup ##############################################
gameDisplay.fill(white)
###### Rising Water ##############################################
pygame.draw.rect(gameDisplay,water,(0,WaterLevel,272,Depth))
###### Button ####################################################
pygame.draw.rect(gameDisplay,water,(55,Location-10,160,120),2)
###### Score #####################################################
ScoreFont = pygame.font.SysFont("monospace", 25)
ScoreText = ScoreFont.render(str(score), 5, (red))
gameDisplay.blit(ScoreText, (20, 30))
###### Text ######################################################
gameDisplay.blit(BoatFloat, (35,TextTop))
###### Movement ##################################################
if rise:
TextTop -= 5
WaterLevel -= 5
Depth += 5
if TextTop == 0:
rise = False
if rise == False:
TextSink = True
if TextSink == True:
TextTop += 2
###### Float Down ################################################
gameDisplay.blit(boat,(60,Location))
if Move:
Location -= 5
if Location == 275:
Move = False
###### Start Check 3##############################################
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
is_inside = pygame.Rect(55,Location-10,160,120).collidepoint(pygame.mouse.get_pos())
if is_inside == 1:
MainGame()
if event.type == pygame.QUIT:
pygame.quit()
quit()
CLOCK.tick(FPS)
pygame.display.update()
def MainGame():
import pygame
import random
import time
pygame.init()
blue = 0,255,255
red = 255,0,0
white = 255,255,255
Location = 136
Level = 382
gate = 100
gate2 = 100
space1 = -30
space1 = -30
space2 = space1 - 200
space2 = space1 -200
WaterLevel = 402
score = 0
space1speed = 1
space2speed = 1
Left_Rect = pygame.Rect(0,402,185,150)
Right_Rect = pygame.Rect(137,402,185,150)
CLOCK = pygame.time.Clock()
FPS = 80
gate = random.randrange(20,222)
gate2 = random.randrange(20,222)
gameDisplay = pygame.display.set_mode((272,552))
pygame.display.set_caption('Boat Game')
boat = pygame.image.load("FinalBoat.png").convert_alpha()
boat = pygame.transform.scale(boat, (40,25))
stop = False
sink = False
gameOver = False
is_Left = False
is_Right = False
while not stop:
####### Background ###############################################
gameDisplay.fill(white)
###### Score #####################################################
ScoreFont = pygame.font.SysFont("monospace", 25)
ScoreText = ScoreFont.render(str(score), 5, (blue))
gameDisplay.blit(ScoreText, (20, 30))
score += 1
####### Barriers One ############################################
pygame.draw.line(gameDisplay,white,(gate,space1),(gate + 60,space1),2)
pygame.draw.rect(gameDisplay,red,(0,space1,gate,25))
pygame.draw.rect(gameDisplay,red,(gate + 60,space1,272 - gate + 60,25))
space1 += space1speed
if space1 == 402:
space1 = -30
gate = random.randrange(20,222)
###### Barriers two ##############################################
pygame.draw.line(gameDisplay,white,(gate2,space2),(gate2 + 60,space2),2)
pygame.draw.rect(gameDisplay,red,(0,space2,gate2,25))
pygame.draw.rect(gameDisplay,red,(gate2 + 60,space2,272 - gate2 + 60,25))
space2 += space2speed
if space2 == 402:
space2 = space1 - 200
gate2 = random.randrange(20,222)
####### Controles ################################################
pygame.draw.rect(gameDisplay, red, Left_Rect)
pygame.draw.rect(gameDisplay, red, Right_Rect)
####### Boat #####################################################
gameDisplay.blit(boat, (Location, Level))
####### Barrier 1 Effects ################################
if space1 == Level - 25 and gate >= Location:
sink = True
if space1 == Level - 25 and gate + 50 <= Location + 25:
sink = True
if sink == True:
Level += 1
if Level == 402:
stop = True
####### Barrier 2 Effects ################################
if space2 == Level - 25 and gate2 >= Location:
sink = True
if space2 == Level - 25 and gate2 + 50 <= Location + 25:
sink = True
if sink == True:
Level += 1
if Level == 402:
stop = True
####### Water #####################################################
pygame.draw.rect(gameDisplay,blue,(0,WaterLevel,272,150))
####### Movement ##################################################
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
is_Left = Left_Rect.collidepoint(pygame.mouse.get_pos())
is_Right = Right_Rect.collidepoint(pygame.mouse.get_pos())
if event.type == pygame.MOUSEBUTTONUP:
is_Left = False
is_Right = False
if event.type == pygame.QUIT:
pygame.quit()
quit()
if is_Left:
Location -= 5
elif is_Right:
Location += 5
CLOCK.tick(FPS)
pygame.display.update()
StartScreen()“分数”是我想要跨越的变量。在运行MainGame()时,分数+1每秒发生80次。我想在比赛结束后将比分传给StartScreen()。基本上,我希望看到球员在开场的屏幕上得分。
发布于 2015-04-07 01:27:11
您必须在任何方法定义之外初始化变量得分。若要访问该变量并编辑它,请使用关键字全局。这告诉python,您要访问的变量不是函数的本地作用域。有关正确使用全局变量的更多信息,请在这里阅读。Using global variables in a function other than the one that created them
下面是一个使用代码的示例,
import pygame
import random
import time
score = 0
def StartScreen():
global score
pygame.init()
white = 230,230,230
blue = 0,0,200
water = 0,255,255
red = 255,0,0
WaterLevel = 400
Depth = 150
Move = True
Location = 825
TextTop = 350
rise = True
TextSink = False
CLOCK = pygame.time.Clock()
FPS = 60
gameDisplay = pygame.display.set_mode((272,552))
pygame.display.set_caption('Boat Game')
BoatFloat = pygame.image.load("BoatFloatCut.png").convert_alpha()
BoatFloat = pygame.transform.scale(BoatFloat, (220,50))
boat = pygame.image.load("BoatLogoCut.png").convert_alpha()
boat = pygame.transform.scale(boat, (140,100))
stop = False
while not stop:
###### Screen Setup ##############################################
gameDisplay.fill(white)
###### Rising Water ##############################################
pygame.draw.rect(gameDisplay,water,(0,WaterLevel,272,Depth))
###### Button ####################################################
pygame.draw.rect(gameDisplay,water,(55,Location-10,160,120),2)
###### Score #####################################################
ScoreFont = pygame.font.SysFont("monospace", 25)
ScoreText = ScoreFont.render(str(score), 5, (red))
gameDisplay.blit(ScoreText, (20, 30))
###### Text ######################################################
gameDisplay.blit(BoatFloat, (35,TextTop))
###### Movement ##################################################
if rise:
TextTop -= 5
WaterLevel -= 5
Depth += 5
if TextTop == 0:
rise = False
if rise == False:
TextSink = True
if TextSink == True:
TextTop += 2
###### Float Down ################################################
gameDisplay.blit(boat,(60,Location))
if Move:
Location -= 5
if Location == 275:
Move = False
###### Start Check 3##############################################
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
is_inside = pygame.Rect(55,Location-10,160,120).collidepoint(pygame.mouse.get_pos())
if is_inside == 1:
MainGame()
if event.type == pygame.QUIT:
pygame.quit()
quit()
CLOCK.tick(FPS)
pygame.display.update()
def MainGame():
global score
pygame.init()
blue = 0,255,255
red = 255,0,0
white = 255,255,255
Location = 136
Level = 382
gate = 100
gate2 = 100
space1 = -30
space1 = -30
space2 = space1 - 200
space2 = space1 -200
WaterLevel = 402
space1speed = 1
space2speed = 1
Left_Rect = pygame.Rect(0,402,185,150)
Right_Rect = pygame.Rect(137,402,185,150)
CLOCK = pygame.time.Clock()
FPS = 80
gate = random.randrange(20,222)
gate2 = random.randrange(20,222)
gameDisplay = pygame.display.set_mode((272,552))
pygame.display.set_caption('Boat Game')
boat = pygame.image.load("FinalBoat.png").convert_alpha()
boat = pygame.transform.scale(boat, (40,25))
stop = False
sink = False
gameOver = False
is_Left = False
is_Right = False
while not stop:
####### Background ###############################################
gameDisplay.fill(white)
###### Score #####################################################
ScoreFont = pygame.font.SysFont("monospace", 25)
ScoreText = ScoreFont.render(str(score), 5, (blue))
gameDisplay.blit(ScoreText, (20, 30))
score += 1
####### Barriers One ############################################
pygame.draw.line(gameDisplay,white,(gate,space1),(gate + 60,space1),2)
pygame.draw.rect(gameDisplay,red,(0,space1,gate,25))
pygame.draw.rect(gameDisplay,red,(gate + 60,space1,272 - gate + 60,25))
space1 += space1speed
if space1 == 402:
space1 = -30
gate = random.randrange(20,222)
###### Barriers two ##############################################
pygame.draw.line(gameDisplay,white,(gate2,space2),(gate2 + 60,space2),2)
pygame.draw.rect(gameDisplay,red,(0,space2,gate2,25))
pygame.draw.rect(gameDisplay,red,(gate2 + 60,space2,272 - gate2 + 60,25))
space2 += space2speed
if space2 == 402:
space2 = space1 - 200
gate2 = random.randrange(20,222)
####### Controles ################################################
pygame.draw.rect(gameDisplay, red, Left_Rect)
pygame.draw.rect(gameDisplay, red, Right_Rect)
####### Boat #####################################################
gameDisplay.blit(boat, (Location, Level))
####### Barrier 1 Effects ################################
if space1 == Level - 25 and gate >= Location:
sink = True
if space1 == Level - 25 and gate + 50 <= Location + 25:
sink = True
if sink == True:
Level += 1
if Level == 402:
stop = True
####### Barrier 2 Effects ################################
if space2 == Level - 25 and gate2 >= Location:
sink = True
if space2 == Level - 25 and gate2 + 50 <= Location + 25:
sink = True
if sink == True:
Level += 1
if Level == 402:
stop = True
####### Water #####################################################
pygame.draw.rect(gameDisplay,blue,(0,WaterLevel,272,150))
####### Movement ##################################################
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
is_Left = Left_Rect.collidepoint(pygame.mouse.get_pos())
is_Right = Right_Rect.collidepoint(pygame.mouse.get_pos())
if event.type == pygame.MOUSEBUTTONUP:
is_Left = False
is_Right = False
if event.type == pygame.QUIT:
pygame.quit()
quit()
if is_Left:
Location -= 5
elif is_Right:
Location += 5
CLOCK.tick(FPS)
pygame.display.update()
StartScreen()我不确定我是否抓住了所有的分数,但如果我做到了,这应该是有效的。分数是在代码顶部定义的。在你的两种方法中,我都在上面输入了全球得分。这让函数知道在它的范围之外查找变量的分数。此外,导入应该放在文件的顶部。没有必要始终如一地导入同一个模块。
发布于 2015-04-07 01:44:17
使用全局变量将有效。另一种选择是将分数传递给所有改变分数的函数,并返回(至少)分数。
def some_func (score, otherstuff):
# do something with the inputs.
score += 1
return score, otherstuff.发布于 2015-04-07 01:31:34
您可以做的是将变量完全放在函数之外,而不是将其保存在函数中。这样,您所拥有的所有功能都可以识别它。但是,如果您想从另一个函数中编辑score,只需将单词global score放在顶部,表示您希望编辑score的全局版本。
https://stackoverflow.com/questions/29482207
复制相似问题