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==2
和 if 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 将永远不会发生!似乎您并不完全确定在此循环中要做什么。再看一遍。
我正在使用 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==2
和 if 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 将永远不会发生!似乎您并不完全确定在此循环中要做什么。再看一遍。