Python PyGame 中的 Simon 游戏项目- 循环模式?
Simon Game Project in Python PyGame- Looping through the pattern?
我正在做一个项目,我必须制作一个满足多个要求的程序。我选择了西蒙游戏
我想我已经完成了大部分,但是,有一部分我没能做好,那就是让它每次都循环遍历整个模式。现在,用户只需点击最近的颜色,它就会认为这是正确的。假设图案是红、黄、蓝、绿,那么黄色又出现了。用户所要做的就是按黄色,它认为这是正确的。我希望用户必须按红色、黄色、蓝色、绿色,然后是黄色,以使其正确。
如何修改我的代码来执行此操作?这是我的代码:
pattern = []
userpattern = []
score = 1
global run_once
run_once = 0
def randomcolor():
print(score)
for i in range(10):
padchoice = random.randint(0, 3)
if(padchoice == 0):
pattern.append("green")
break
elif(padchoice == 1):
pattern.append("red")
break
...
print("Pattern: " + str(pattern))
print(userpattern)
fps = pg.time.Clock()
while(end == False):
fps.tick(60)
if run_once == 0:
randomcolor()
run_once = 1
for event in pg.event.get():
#If Quit Button Pressed
if event.type == pg.QUIT:
end = True
elif event.type == pg.MOUSEBUTTONDOWN:
pos_x = pg.mouse.get_pos()[0]
pos_y = pg.mouse.get_pos()[1]
#Mouse Position
print(str(pos_x) + ", " + str(pos_y))
if(pos_x > 5 and pos_x < 150):
if(pos_y > 5 and pos_y < 150):
green("on")
userpattern.append("green")
print(userpattern)
...
if(userpattern != pattern[:len(userpattern)] and len(userpattern) != 0):
print("Wrong!")
userpattern.clear()
pattern.clear()
score = 0
run_once = 0
for i in range(len(pattern)):
if(pattern[i] == "green"):
if(pos_x > 5 and pos_x < 150):
if(pos_y > 5 and pos_y < 150):
green("on")
userpattern.append("green")
print(userpattern)
if(userpattern == pattern):
print("Correct")
score += 1
print(score)
run_once = 0
if(score == 11):
wintext = font.render("Win!"), 0, (255, 255, 255)
screen.blit(wintext, (screen.get_width()/2, screen.get_height()/2))
pg.display.flip()
P.S.- 我知道代码不是最好的,我敢肯定,但我真的只是想让它工作。
编辑:我认为问题出在这些代码行附近,我正在努力让它工作:
if(userpattern != pattern[:len(userpattern)] and len(userpattern) != 0):
print("Wrong!")
userpattern.clear()
pattern.clear()
score = 0
run_once = 0
for i in range(len(pattern)):
if(pattern[i] == "green"):
if(pos_x > 5 and pos_x < 150):
if(pos_y > 5 and pos_y < 150):
green("on")
userpattern.append("green")
print(userpattern)
if(userpattern == pattern): #and new == False
print("Correct")
score += 1
print(score)
run_once = 0
如果有人需要更多信息或可以提供帮助,请告诉我!
提前致谢!
您可以轻松修复代码。允许用户进行多项输入。仅当列表具有相同长度或已输入的模式部分不同时,才将输入 (userpattern
) 与 pattern
进行比较:
while(end == False):
# [...]
for event in pg.event.get():
if event.type == pg.MOUSEBUTTONDOWN:
# add input to `userpattern`
# [...]
if len(userpattern) == len(pattern) or userpattern != pattern[:len(userpattern)]:
win = userpattern == pattern
if not win:
# [...]
else:
# [...]
代码相关改动:
while(end == False):
fpsmax.tick(60)
# [...]
#USER INPUT
for event in pg.event.get():
# [...]
#Render Out Text
patterntext = font.render(str(pattern), 0, (255, 255, 255))
userpatterntext = font.render(str(userpattern), 0, (255, 255, 255))
screen.blit(patterntext, (screen.get_width()/2, screen.get_height()/2))
screen.blit(userpatterntext, (screen.get_width()/2, (screen.get_height()/2) - 50 ))
pg.display.flip()
if len(userpattern) == len(pattern) or userpattern != pattern[:len(userpattern)]:
win = userpattern == pattern
if not win:
print("Wrong!")
userpattern.clear()
pattern.clear()
score = 0
run_once = 0
else:
print("Correct")
userpattern.clear()
new = True
score += 1
print(score)
run_once = 0
#OUTPUT
if(score == 10):
wintext = font.render("You Win!"), 0, (255, 255, 255)
screen.blit(wintext, (screen.get_width()/2, screen.get_height()/2))
pg.display.flip()
我正在做一个项目,我必须制作一个满足多个要求的程序。我选择了西蒙游戏
我想我已经完成了大部分,但是,有一部分我没能做好,那就是让它每次都循环遍历整个模式。现在,用户只需点击最近的颜色,它就会认为这是正确的。假设图案是红、黄、蓝、绿,那么黄色又出现了。用户所要做的就是按黄色,它认为这是正确的。我希望用户必须按红色、黄色、蓝色、绿色,然后是黄色,以使其正确。
如何修改我的代码来执行此操作?这是我的代码:
pattern = []
userpattern = []
score = 1
global run_once
run_once = 0
def randomcolor():
print(score)
for i in range(10):
padchoice = random.randint(0, 3)
if(padchoice == 0):
pattern.append("green")
break
elif(padchoice == 1):
pattern.append("red")
break
...
print("Pattern: " + str(pattern))
print(userpattern)
fps = pg.time.Clock()
while(end == False):
fps.tick(60)
if run_once == 0:
randomcolor()
run_once = 1
for event in pg.event.get():
#If Quit Button Pressed
if event.type == pg.QUIT:
end = True
elif event.type == pg.MOUSEBUTTONDOWN:
pos_x = pg.mouse.get_pos()[0]
pos_y = pg.mouse.get_pos()[1]
#Mouse Position
print(str(pos_x) + ", " + str(pos_y))
if(pos_x > 5 and pos_x < 150):
if(pos_y > 5 and pos_y < 150):
green("on")
userpattern.append("green")
print(userpattern)
...
if(userpattern != pattern[:len(userpattern)] and len(userpattern) != 0):
print("Wrong!")
userpattern.clear()
pattern.clear()
score = 0
run_once = 0
for i in range(len(pattern)):
if(pattern[i] == "green"):
if(pos_x > 5 and pos_x < 150):
if(pos_y > 5 and pos_y < 150):
green("on")
userpattern.append("green")
print(userpattern)
if(userpattern == pattern):
print("Correct")
score += 1
print(score)
run_once = 0
if(score == 11):
wintext = font.render("Win!"), 0, (255, 255, 255)
screen.blit(wintext, (screen.get_width()/2, screen.get_height()/2))
pg.display.flip()
P.S.- 我知道代码不是最好的,我敢肯定,但我真的只是想让它工作。
编辑:我认为问题出在这些代码行附近,我正在努力让它工作:
if(userpattern != pattern[:len(userpattern)] and len(userpattern) != 0):
print("Wrong!")
userpattern.clear()
pattern.clear()
score = 0
run_once = 0
for i in range(len(pattern)):
if(pattern[i] == "green"):
if(pos_x > 5 and pos_x < 150):
if(pos_y > 5 and pos_y < 150):
green("on")
userpattern.append("green")
print(userpattern)
if(userpattern == pattern): #and new == False
print("Correct")
score += 1
print(score)
run_once = 0
如果有人需要更多信息或可以提供帮助,请告诉我! 提前致谢!
您可以轻松修复代码。允许用户进行多项输入。仅当列表具有相同长度或已输入的模式部分不同时,才将输入 (userpattern
) 与 pattern
进行比较:
while(end == False):
# [...]
for event in pg.event.get():
if event.type == pg.MOUSEBUTTONDOWN:
# add input to `userpattern`
# [...]
if len(userpattern) == len(pattern) or userpattern != pattern[:len(userpattern)]:
win = userpattern == pattern
if not win:
# [...]
else:
# [...]
代码相关改动:
while(end == False):
fpsmax.tick(60)
# [...]
#USER INPUT
for event in pg.event.get():
# [...]
#Render Out Text
patterntext = font.render(str(pattern), 0, (255, 255, 255))
userpatterntext = font.render(str(userpattern), 0, (255, 255, 255))
screen.blit(patterntext, (screen.get_width()/2, screen.get_height()/2))
screen.blit(userpatterntext, (screen.get_width()/2, (screen.get_height()/2) - 50 ))
pg.display.flip()
if len(userpattern) == len(pattern) or userpattern != pattern[:len(userpattern)]:
win = userpattern == pattern
if not win:
print("Wrong!")
userpattern.clear()
pattern.clear()
score = 0
run_once = 0
else:
print("Correct")
userpattern.clear()
new = True
score += 1
print(score)
run_once = 0
#OUTPUT
if(score == 10):
wintext = font.render("You Win!"), 0, (255, 255, 255)
screen.blit(wintext, (screen.get_width()/2, screen.get_height()/2))
pg.display.flip()