循环值的"游戏函数"中的 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() # 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语句中中断了循环。我不完全确定这个循环的作用,但如果您进行以下更改,值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循环将退出,剩余的if语句将永远不会发生!你似乎不完全确定在这个循环中该做什么。再看一眼。

最新更新