为什么If语句不能用于Python和Pygame
所以我创造了我的第一场比赛,我想用shelve追踪高分。我的逻辑是我有一个名为highscore的全局变量。在游戏开始时,在game_menu()中为其分配了highscore文件中的值。逻辑是,如果当前分数(道奇)大于highscore,则highscore文件将被分配道奇值,并显示在游戏菜单中。这在大多数情况下确实有效,但即使减淡变量小于highscore,它仍然会被分配给文件。就像游戏没有看到If语句一样。下面是游戏代码的重要部分为什么If语句不能用于Python和Pygame,python,if-statement,pygame,logic,Python,If Statement,Pygame,Logic,所以我创造了我的第一场比赛,我想用shelve追踪高分。我的逻辑是我有一个名为highscore的全局变量。在游戏开始时,在game_menu()中为其分配了highscore文件中的值。逻辑是,如果当前分数(道奇)大于highscore,则highscore文件将被分配道奇值,并显示在游戏菜单中。这在大多数情况下确实有效,但即使减淡变量小于highscore,它仍然会被分配给文件。就像游戏没有看到If语句一样。下面是游戏代码的重要部分 d = shelve.open("highscore.tx
d = shelve.open("highscore.txt")
highscore = d["highscore"]
d.close()
best_score(highscore)
在上面,我们将文件中的值分配给全局变量,并通过best_score显示
if dodged > highscore:
d = shelve.open("highscore.txt")
d["highscore"] = dodged
d.close
这就是我认为问题所在。它清楚地说明了dodged是否更大,但即使它等于或更小,文件也会被dodged变量替换。我甚至试着加入ifesle,但没有任何效果
下面是游戏的完整代码
import pygame
import time
import random
import shelve
pygame.init()
display_width = 800
display_height = 600
black = (0,0,0)
red = (255,0,0)
dark_red = (200,0,0)
green = (0,255,0)
dark_green = (0,200,0)
awing_width = 95
gameDisplay = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption("Lonely ship")
clock = pygame.time.Clock()
background = pygame.image.load("space.jpg")
awingImg = pygame.image.load("A-wing.png")
awingImg = pygame.transform.scale(awingImg, (95,119))
asteroidImg = pygame.image.load("AsteroidPNG.png")
asteroidImg = pygame.transform.scale(asteroidImg, (100,100))
def score(score):
scoreFont = pygame.font.Font("freesansbold.ttf", 30)
text = scoreFont.render("Dodged: "+str(score), True, red)
gameDisplay.blit(text, (10,10))
def best_score(best_score):
scoreFont = pygame.font.Font("freesansbold.ttf", 30)
text = scoreFont.render("Highscore: "+str(best_score), True, red)
gameDisplay.blit(text, (10,10))
def asteroid(asteroidx, asteroidy, asteroidw, asteroidh):
gameDisplay.blit(asteroidImg, (asteroidx, asteroidy, asteroidw, asteroidh))
def awing(x,y):
gameDisplay.blit(awingImg, (x,y))
def text_objects(text, font):
textSurface = font.render(text, True, red)
return textSurface, textSurface.get_rect()
def button_text_objects(text, font):
textSurface = font.render(text, True, black)
return textSurface, textSurface.get_rect()
def message_display(text):
largeText = pygame.font.Font("freesansbold.ttf", 50)
TextSurf, TextRect = text_objects(text, largeText)
TextRect.center = ((display_width/2), (display_height/2))
gameDisplay.blit(TextSurf, TextRect)
pygame.display.update()
time.sleep(2)
pygame.event.clear()
game_menu()
def outOfBounds():
message_display("You flew out of bounds!")
def crash():
message_display("You crashed!")
def win():
message_display("YOU WIN!!!")
def button(message,x,y,w,h,dc,bc,action=None):
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if x+w > mouse[0] > x and y+h > mouse [1] > y:
pygame.draw.rect(gameDisplay, bc, (x,y,w,h))
if click[0] == 1 and action != None:
if action == "play":
game_loop()
elif action == "quit":
pygame.quit()
quit()
else:
pygame.draw.rect(gameDisplay, dc, (x,y,w,h))
smallText = pygame.font.Font("freesansbold.ttf", 20)
textSurf, textRect = button_text_objects(message, smallText)
textRect.center = ( (x+(w/2)), (y+(h/2)) )
gameDisplay.blit(textSurf, textRect)
global highscore
def game_menu():
intro = True
while intro:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
gameDisplay.blit(background, (0,0))
d = shelve.open("highscore.txt")
highscore = d["highscore"]
d.close()
best_score(highscore)
largeText = pygame.font.Font("freesansbold.ttf", 50)
TextSurf, TextRect = text_objects("Lonely Ship", largeText)
TextRect.center = ((display_width/2), (display_height/2))
gameDisplay.blit(TextSurf, TextRect)
button("Play", 200, 400, 100, 50, dark_green,green, "play")
button("Quit", 500, 400, 100, 50, dark_red,red, "quit")
pygame.display.update()
clock.tick(15)
def game_loop():
x = (display_width * 0.425)
y = (display_height * 0.75)
x_change = 0
asteroid_startx = random.randrange(0, display_width)
asteroid_starty = -600
asteroid_speed = 5
asteroid_width = 100
asteroid_height = 100
dodged = 0
gameExit = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_change += -10
elif event.key == pygame.K_RIGHT:
x_change += 10
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
x_change += 10
elif event.key == pygame.K_RIGHT:
x_change += -10
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
game_menu()
x += x_change
gameDisplay.blit(background, (0,0))
asteroid(asteroid_startx, asteroid_starty, asteroid_width, asteroid_height)
asteroid_starty += asteroid_speed
awing(x,y)
score(dodged)
if x > display_width - awing_width or x < 0:
outOfBounds()
if asteroid_starty > display_height:
asteroid_starty = 0 - asteroid_height
asteroid_startx = random.randrange(0, display_width)
dodged += 1
asteroid_speed += 0.5
if dodged > highscore:
d = shelve.open("highscore.txt")
d["highscore"] = dodged
d.close
if y < asteroid_starty + asteroid_height:
print("y crossover")
if x > asteroid_startx and x < asteroid_startx + asteroid_width or x + awing_width > asteroid_startx and x + awing_width < asteroid_startx + asteroid_width:
print("x crossover")
crash()
if dodged >= 50:
d = shelve.open("highscore.txt")
d["highscore"] = 0
d.close
win()
pygame.display.update()
clock.tick(60)
game_menu()
game_loop()
pygame.quit()
quit()
导入pygame
导入时间
随机输入
进口货架
pygame.init()
显示宽度=800
显示高度=600
黑色=(0,0,0)
红色=(255,0,0)
深红色=(200,0,0)
绿色=(0255,0)
深绿色=(0200,0)
awing_宽度=95
gameDisplay=pygame.display.set_模式((显示宽度、显示高度))
pygame.display.set_标题(“孤独的船”)
clock=pygame.time.clock()
background=pygame.image.load(“space.jpg”)
awingImg=pygame.image.load(“A-wing.png”)
awingImg=pygame.transform.scale(awingImg,(95119))
asteroidImg=pygame.image.load(“AsteroidPNG.png”)
asteroidImg=pygame.transform.scale(asteroidImg,(100100))
def分数(分数):
scoreFont=pygame.font.font(“freesansbold.ttf”,30)
text=scoreFont.render(“减淡:+str(分数),真,红色)
blit(文本,(10,10))
def最佳评分(最佳评分):
scoreFont=pygame.font.font(“freesansbold.ttf”,30)
text=scoreFont.render(“高分:+str(最佳分数),真,红色)
blit(文本,(10,10))
def小行星(小行星X、小行星Y、小行星W、小行星H):
blit(asteroidImg,(asteroidx,asteroidy,asteroidw,asteroidh))
def awing(x,y):
游戏显示.blit(awingImg,(x,y))
def text_对象(文本、字体):
textSurface=font.render(文本,真,红色)
返回textSurface,textSurface.get_rect()
def按钮\文本\对象(文本、字体):
textSurface=font.render(文本,真,黑色)
返回textSurface,textSurface.get_rect()
def信息_显示(文本):
largeText=pygame.font.font(“freesansbold.ttf”,50)
TextSurf,TextRect=text\u对象(text,largeText)
text rect.center=((显示宽度/2),(显示高度/2))
blit(TextSurf,TextRect)
pygame.display.update()
时间。睡眠(2)
pygame.event.clear()
游戏菜单()
def outOfBounds():
信息显示(“你飞出了边界!”)
def crash():
显示消息(“您崩溃了!”)
def win():
信息显示(“您赢了!!!”)
def按钮(消息,x,y,w,h,dc,bc,操作=无):
mouse=pygame.mouse.get_pos()
click=pygame.mouse.get_pressed()
如果x+w>鼠标[0]>x和y+h>鼠标[1]>y:
pygame.draw.rect(游戏显示,bc,(x,y,w,h))
如果单击[0]==1并执行操作!=无:
如果动作==“播放”:
博弈(循环)
elif操作==“退出”:
pygame.quit()
退出
其他:
pygame.draw.rect(游戏显示,dc,(x,y,w,h))
smallText=pygame.font.font(“freesansbold.ttf”,20)
textSurf,textRect=按钮\文本\对象(消息,smallText)
textRect.center=((x+(w/2)),(y+(h/2)))
blit(textSurf,textRect)
全球高分
def game_菜单():
简介=正确
而简介:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
退出
游戏显示.blit(背景,(0,0))
d=搁置.open(“highscore.txt”)
highscore=d[“highscore”]
d、 关闭()
最佳成绩(高分)
largeText=pygame.font.font(“freesansbold.ttf”,50)
TextSurf,TextRect=text_对象(“孤独的船”,largeText)
text rect.center=((显示宽度/2),(显示高度/2))
blit(TextSurf,TextRect)
按钮(“播放”,200,400,100,50,深绿色,绿色,“播放”)
按钮(“退出”,500,400,100,50,深红色,红色,“退出”)
pygame.display.update()
时钟滴答(15)
def game_loop():
x=(显示宽度*0.425)
y=(显示高度*0.75)
x_变化=0
小行星_startx=随机。随机范围(0,显示宽度)
小行星_星体=-600
小行星速度=5
小行星宽度=100
小行星高度=100
减淡=0
gameExit=False
不退出游戏时:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
退出
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
x_变化+=-10
elif event.key==pygame.K_RIGHT:
x_变化+=10
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_左:
x_变化+=10
elif event.key==pygame.K_RIGHT:
x_变化+=-10
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_退出:
游戏菜单()
x+=x_变化
游戏显示.blit(背景,(0,0))
小行星(小行星星体X、小行星星体Y、小行星宽度、小行星高度)
小行星星体+=小行星速度
awing(x,y)
得分(闪避)
如果x>display_width-awing_width或x<0:
边界外()
如果小行星>显示高度:
小行星星体=0-小行星高度
小行星_startx=随机。随机范围(0,显示宽度)
减淡+=1
ast
0 > '0' // false
highscore = int(d["highscore"])