pygame 帮助 "game function" for 循环值既不增加也不减少

pygame help in "game function" for loop value is not increasing nor decreasing

我正在使用 pygame 开发一款游戏,该游戏将显示两个按钮和一个图像。用户必须选择描述图像的正确按钮。我遇到的困难是我无法为(for 循环第 101 行)增加 I 变量。我注意到 while 循环是 运行 无限,即使我试图停止它。当我点击按钮时,我没有得到响应(在 st2 s2t 函数中编程的正确或错误)

总而言之,我试图从游戏功能中捕捉用户​​的反应,并确定用户是否从 st2 或 s2t 做出了正确的决定。然后回到游戏函数并增加 I 并执行下一个 elif 语句并再次调用 st2 或 s2t 等等。

# -*- coding: utf-8 -*-
"""
Created on Mon Sep  7 17:15:42 2020

@author: okand
"""
# -*- coding: utf-8 -*-
"""
Created on Mon Sep  7 17:15:42 2020

@author: okand
"""
import glob
import pygame
import random #we use this to make a random right button
import time 
import os 
pygame.init() # intialize all pygame 

"setting up the display parameters"
display_width = 600
display_height = 600

"setting up the colors and the bright's"
black = (0,0,0)
alpha = (0,88,255)
white = (255,255,255)
red = (200,0,0)
green = (0,200,0)
blue = (0, 0, 255)
bright_red = (255,0,0)
bright_green = (0,255,0)


""""Setting display. note the standard we use is 600*600 display limtation"""
gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('GUI Speech Recognition') #title of the window
gameDisplay.fill(white)


""" Loading images to the paython from the pic file """
current_path = os.path.dirname(__file__)

image_path = os.path.join('image')
def load_the_image(image):
    images = [
        load_the_image('lalaa.jpg'),
        load_the_image('Ross.jpg'),
        load_the_image('gator.jpg'),
        load_the_image('blue_sea_water.jpg'),
        load_the_image('mountains.jpg'),
        load_the_image('elif.jpg')
   ]


def close():
    pygame.quit()
    quit()

def message_display(text):
    largeText = pygame.font.Font('freesansbold.ttf',30)
    TextSurf, TextRect = text_objects(text, largeText)
    TextRect.center = ((display_width/2),(display_height/2))
    gameDisplay.blit(TextSurf, TextRect)
    pygame.display.update()
    

    
def text_objects(text, font):
    textSurface = font.render(text, True, alpha)
    return textSurface, textSurface.get_rect()




""" This function is to set the button parameters x_axis Y_axis width height 
Also, when you hit the button it will take an action """
def button(msg,x,y,w,h,ic,ac,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, ac,(x,y,w,h))

        if click[0] == 1 and action != None:
            action()         
    else:
        pygame.draw.rect(gameDisplay, ic,(x,y,w,h))

    smallText = pygame.font.SysFont("comicsansms",20)
    textSurf, textRect = text_objects(msg, smallText)
    textRect.center = ( (x+(w/2)), (y+(h/2)) )
    gameDisplay.blit(textSurf, textRect)



def s2t():
    carImg= game()
    gameDisplay.blit(carImg,(0,0))    
    message_display('good job')
    print('good job')
  
def st2():
    carImg= game()
    gameDisplay.blit(carImg,(0,0))  
    message_display('wrong')
    print('wrong')
    



"""This function is for checking the value i  of the , changes the loaded pictures as well 
as the button options. to get the response s2t & st2 functions are called"""    

def game ():
   aseel = 1
   while aseel == 1: 
       
       for event in pygame.event.get():
        for i in range(1,3):
            

            if i == 1:
                 carImg = pygame.image.load(os.path.join(image_path, 'lalaa.jpg'))
                 gameDisplay.blit(carImg,(0,0))
                 pygame.display.update()
            
                 NewRightButton = 1   #random.randint(1,2)
                 
                 if NewRightButton == 1:
                    button("Dog",150,450,100,50,green,bright_green,s2t)
                    button("Cat",50,450,100,50,blue,bright_green,st2)
                    #code that says which the right button is
                    pygame.display.update() 
                    # time.sleep(3)        
                    break  
                 else:
                    button("Cat",150,450,100,50,green,bright_green,st2)
                    button("Dog",50,450,100,50,blue,bright_green,s2t)
                    #code that says which the right button is
                    #This makes the buttons swap back and forth
                    pygame.display.update() 
                    # time.sleep(3)
                    break 
                 aseel = aseel + 1
                 print (aseel)
            elif i == 2: 
                 carImg = pygame.image.load(os.path.join(image_path, 'Ross.jpg'))
                 gameDisplay.blit(carImg,(0,0))
                 pygame.display.update()
            
                 NewRightButton = 1   #random.randint(1,2)
                 
                 if NewRightButton == 1:
                    button("ross",150,450,100,50,green,bright_green,s2t)
                    button("Cat",50,450,100,50,blue,bright_green,st2)
                    #code that says which the right button is
                    pygame.display.update() 
                    # time.sleep(3)        
                    break  
                 else:
                    button("Cat",150,450,100,50,green,bright_green,st2)
                    button("ross",50,450,100,50,blue,bright_green,s2t)
                    #code that says which the right button is
                    #This makes the buttons swap back and forth
                    pygame.display.update() 
                    # time.sleep(3)
                    break 
            elif i == 3: 
                 carImg = pygame.image.load(os.path.join(image_path, 'gator.jpg'))
                 gameDisplay.blit(carImg,(0,0))
                 pygame.display.update()
            
                 NewRightButton = 1   #random.randint(1,2)
                 
                 if NewRightButton == 1:
                    button("gator",150,450,100,50,green,bright_green,s2t)
                    button("Cat",50,450,100,50,blue,bright_green,st2)
                    #code that says which the right button is
                    pygame.display.update() 
                    # time.sleep(3)        
                    break  
                 else:
                    button("Cat",150,450,100,50,green,bright_green,st2)
                    button("gator",50,450,100,50,blue,bright_green,s2t)
                    #code that says which the right button is
                    #This makes the buttons swap back and forth
                    pygame.display.update() 
                    # time.sleep(3)
                    break 
                 aseel = aseel + 1 
                 print (aseel)
                
            else :
                aseel = aseel + 1
                continue 
            print ('end of the game')
            aseel = aseel + 1
             
        
     
 
                
        
            
def trake_mouse():   #To  track mouse position
    gameExit = False
    while not gameExit:
        for event in pygame.event.get():
            print (event)

"""" In The main function is to show the first screen with 
two buttons options play or quit. if the user choses quit. the game will quit.
On the other hand, if the user choses to play button. it is going to take him 
to game function  """
def main ():
     while True:
        for event in pygame.event.get():
                 if event.type == pygame.QUIT:
                        pygame.quit()
                        quit()
        pygame.display.update()
        button("Quit",450,250,100,50,red,bright_red,close)
        button("play",150,250,100,50,green,bright_green,game)
        pygame.display.update()   
     
        
if __name__ == '__main__':
    main()


你的问题是,在内部循环中,你遍历范围 1 和 3,你 break 循环然后尝试更新 aseel = aseel + 1,但它永远不会发生,因为你已经打破了循环。 if 语句 if i==2if i==3 也是如此:它们永远不会发生,因为您已经在第一个 if-statement 中打破了循环。 我不完全确定此循环的作用,但如果您执行以下更改,值 aseel 应该更新。

while aseel == 1: 
   
   for event in pygame.event.get():
    for i in range(1,3):
        
        if i == 1:
             ...
             
             if NewRightButton == 1:
                ...
                # time.sleep(3)        
                # break -> remove this  
             else:
                ...
                # time.sleep(3)
                # break -> remove this 
             aseel = aseel + 1  # should be executed now
             print (aseel)
        elif i == 2: 
             ...
        
             NewRightButton = 1   #random.randint(1,2)
             
             if NewRightButton == 1:
                ...
                # time.sleep(3)        
                # break -> remove this  
             else:
                button("Cat",150,450,100,50,green,bright_green,st2)
                button("ross",50,450,100,50,blue,bright_green,s2t)
                #code that says wich the right button is
                #This makes the buttons swap back and forth
                pygame.display.update() 
                # time.sleep(3)
                # break -> remove this 
        elif i == 3: 
             ...
             NewRightButton = 1   #random.randint(1,2)
             
             if NewRightButton == 1:
                ... 
                # time.sleep(3)        
                # break -> remove this   
             else:
                ...
                # time.sleep(3)
                # break -> remove this
             aseel = aseel + 1 
             print (aseel)
            
        else : # it will only loop from 1 to 3, so this case will never happen -> you might as well remove it
            aseel = aseel + 1
            continue 
        print ('end of the game')
        aseel = aseel + 1

另外,我想提一下你在这个循环中的实现没有意义,因为你从 1 迭代到 3,然后在每个 if 语句中执行一些东西。如果无论如何都要执行循环,为什么首先需要一个循环?此外,您要多次更新 aseel,一旦您在第一个语句中更新 aseel,while-loop 应该退出,其余的 if-statement 将永远不会发生!似乎您并不完全确定在此循环中要做什么。再看一遍。