我正在尝试使用Pygame和Python创建一个小的Guess The Flag游戏,但是有些问题出现了循环和我创建的函数。我对Python比较陌生,有时候我很困惑。
无论如何,我正处于游戏的测试部分,我有四个国家:中国,加拿大,美国和法国。我已经将它们放入单独定义的函数中,将它们放在一个列表中并使用随机模块来重新排列列表。我把它放在for循环中,我试图让它得到理想的工作。
它正确地混洗列表并选择函数,但是有相同函数的重复并且它永远不会结束。
这是我的代码:
def pick_country():
global list1
main_font = "brain flower euro.ttf"
font1 = pygame.font.Font((main_font), 50)
font2 = pygame.font.Font((main_font), 40)
list1 = [france1, canada1, china1, usa1]
random.shuffle(list1)
for cur_country in list1:
cur_country()
pygame.display.update()
def france1():
screen.fill((255, 255, 255))
country = 'FRANCE'
flag = 'france_flag.jpeg'
flag1 = pygame.image.load(flag).convert()
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
pick_country()
screen.blit(flag1, (300, 350))
pygame.display.update()
def canada1():
name = ""
main_font = "brain flower euro.ttf"
font1 = pygame.font.Font((main_font), 50)
country = 'CANADA'
flag = 'canada_flag.jpeg'
black = 0, 0, 0
flag1 = pygame.image.load(flag).convert()
while True:
for evt in pygame.event.get():
if evt.type == KEYDOWN:
if evt.unicode.isalpha():
name += evt.unicode
elif evt.key == K_SPACE:
name += " "
elif evt.key == K_BACKSPACE:
name = name[:-1]
elif evt.type == QUIT:
pygame.quit()
sys.exit()
screen.fill((255, 255, 255))
screen.blit(flag1, (200, 25))
pygame.draw.line(screen, black, (200, 115), (0, 115), (6))
pygame.draw.line(screen, black, (600, 115), (800, 115), (6))
block = font1.render(name, True, black)
rect = block.get_rect(center = (400, 600))
screen.blit(block, rect)
pygame.draw.rect(screen, black, (275, 550, 250, 100), (2))
if name == "canada":
pick_country()
pygame.display.update()
def usa1():
screen.fill((255, 255, 255))
country = 'USA'
flag = 'usa_flag.jpeg'
flag1 = pygame.image.load(flag).convert()
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
pick_country()
screen.blit(flag1, (225, 300))
pygame.display.update()
def china1():
screen.fill((255, 255, 255))
country = 'CHINA'
flag = 'china_flag.jpeg'
flag1 = pygame.image.load(flag).convert()
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
pick_country()
screen.blit(flag1, (300, 350))
pygame.display.update()
pick_country()
不要问加拿大;这是我的主要国家测试区。
在开始“你尝试过什么”之前,我尝试了以下内容:
1:将脚本的'list and shuffle'部分放在屏幕顶部的函数外面。 1的错误:它不知道列表中的功能是什么。
2:在国家运行之后,在实际的pick_country()
之前,将脚本的“列表和随机播放”部分放在函数之外。
2的错误:它首先选择了国家,但显然从未进入另一个国家。
有任何帮助吗?请!
答案 0 :(得分:4)
这是发生了什么:
pick_country
来电france1()
pick_country()
。此新来电将在您的国家/地区列表的第一个条目开始,再次致电france1()
。pick_country()
。当按下某个键时,您可能需要来自每个国家/地区功能的return
。这会将您带回原来的pick_country
电话,允许它移至列表中的第二个国家/地区。
答案 1 :(得分:1)
在每个函数中,您再次调用pick_country()
if event.type == KEYDOWN:
pick_country()
因此,当您再次运行此功能时,遍历各国的for循环将重新开始。