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()