微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pygame帮助“游戏功能”中的循环值没有增加也没有减少

如何解决pygame帮助“游戏功能”中的循环值没有增加也没有减少

我正在使用pygame开发一款游戏,该游戏将显示两个按钮以及一个图像。用户将必须选择描述图像的右键。我遇到的困难是我无法为(对于循环线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() # insslatize all pygame 

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

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


""""Setting display. note the starderd 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 paramters x_axis Y_axis width hight 
Also,when you hit thr 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,(x,h))

        if click[0] == 1 and action != None:
            action()         
    else:
        pygame.draw.rect(gamedisplay,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))  
    message_display('wrong')
    print('wrong')
    



"""This function is for checing the value i  of the,changes the loaded picutres 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))
                 pygame.display.update()
            
                 NewRightButton = 1   #random.randint(1,2)
                 
                 if NewRightButton == 1:
                    button("Dog",150,450,100,50,green,bright_green,s2t)
                    button("Cat",blue,st2)
                    #code that says wich the right button is
                    pygame.display.update() 
                    # time.sleep(3)        
                    break  
                 else:
                    button("Cat",st2)
                    button("Dog",s2t)
                    #code that says wich 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,2)
                 
                 if NewRightButton == 1:
                    button("ross",st2)
                    button("ross",s2t)
                    #code that says wich 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,2)
                 
                 if NewRightButton == 1:
                    button("gator",st2)
                    button("gator",s2t)
                    #code that says wich 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  trake mosue postion
    gameExit = False
    while not gameExit:
        for event in pygame.event.get():
            print (event)

"""" In The main function is to show the frist screen with 
two buttons options play or quit. if the user choes 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",250,red,bright_red,close)
        button("play",game)
        pygame.display.update()   
     
        
if __name__ == '__main__':
    main()


解决方法

您的问题是,在内部循环中,您遍历范围1和3,您break循环,然后尝试更新aseel = aseel + 1,但这永远不会发生,因为您已经中断了循环。 if语句if i==2if i==3也是如此:它们永远不会发生,因为您已经在第一个if语句中中断了循环。 我不确定该循环的作用,但是如果您进行以下更改,则值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",blue,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循环应该退出,并且剩余的if语句将永远不会发生!似乎您并不完全确定在此循环中该做什么。再看一遍。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。