python-3.x 僵尸骰子游戏中的玩家回合结束循环错误

jk9hmnmh  于 2022-11-26  发布在  Python
关注(0)|答案(1)|浏览(134)

我在开发僵尸骰子游戏的代码。
我的问题是当第一个玩家回答说他不想继续玩了。
游戏结束了,我找不到第二个玩家。有人能帮我吗?

import random

print("========== ZOMBIE DICE (PROTÓTIPO SEMANA 4) ==========")
print("========= WELCOME TO THE ZOMBIE DICE GAME! ========")
numeroJogadores = 0
while numeroJogadores < 2:
  numeroJogadores = int(input("Enter the number of players: "))
  print(numeroJogadores)

  if numeroJogadores < 2:
    print("NOTICE: You must have at least 2 players to continue!")

  listaJogadores = []
  
  for i in range(numeroJogadores):

    nome = str(input("\nEnter player name: " + str(i+1) + ": "))
    listaJogadores.append(nome)

  print(listaJogadores)

  dadoVerde = ("brain", "steps", "brain", "shot", "steps", "brain")
  dadoAmarelo = ("shot", "steps", "brain", "shot", "steps", "brain")
  dadoVermelho = ("shot", "steps", "shot", "brain", "steps", "shot")

  listaDados = [dadoVerde, dadoVerde, dadoVerde, dadoVerde, dadoVerde, dadoVerde, 
                dadoAmarelo, dadoAmarelo, dadoAmarelo, dadoAmarelo, 
                dadoVerde, dadoVermelho, dadoVermelho]

  print("\nSTARTING THE GAME...")

  jogadorAtual = 0
  dadosSorteados = []
  tiros = 0
  cerebros = 0
  passos = 0

  while True:

    print("PLAYER TURN: ", listaJogadores[jogadorAtual])

    
    for i in range (3):
      numeroSorteado = random.randint(0, 12)
      dadoSorteado = listaDados[numeroSorteado]

      if (dadoSorteado == dadoVerde):
        corDado = "Green"
      elif (dadoSorteado == dadoAmarelo):
        corDado = "Yellow"
      else:
        corDado = "Red"

      print("Dice Drawn: ", corDado)

      dadosSorteados.append(dadoSorteado)

    print("\nThe faces drawn were: ")

    for dadoSorteado in dadosSorteados:
      numeroFaceDado = random.randint(0,5)

      if dadoSorteado[numeroFaceDado] == "brain":
        print("- brain (you ate a brain)")
        cerebros = cerebros + 1
      elif dadoSorteado[numeroFaceDado] == "tiro":
        print("- shot (you got shot)")
        tiros = tiros + 1
      else:
        print("- steps (a victim escaped)")
        passos = passos + 1

    print("\nCURRENT SCORE: ")
    print("brins: ", cerebros)
    print("shots: ", tiros)

    if cerebros >= 13:
      print("Congratulations, you've won the game!")
      break
    elif tiros >= 3:
      print("You lost the game!")
      break
    else:
      continuarTurno = str(input("\nNOTICE: Do you want to continue playing dice? (y=yes / n=no)")).lower()
      if continuarTurno == "n":
        jogadorAtual = jogadorAtual + 1
        dadossorteados = 0
        tiros = 0
        cerebros = 0
        passos = 0

        if jogadorAtual > numeroJogadores:
          print("Finalizing the game prototype")
      else:
        print("Starting another round of the current turn")
        dadossorteados = []

print("======================================================")
print("===================== END OF THE GAME ====================")
print("======================================================")

有人知道我做错了什么吗?
我是一个新的程序员。如果有人知道如何帮助我解决这个问题,我将不胜感激。

i86rm4rw

i86rm4rw1#

编辑:好了,现在代码可以正常工作了。我可以很好地切换玩家,但是如果你检查所有的角色,它会再次崩溃,因为jogadorAtual对于listaJogadores来说太大了。我不是很理解这个游戏,但是假设你想从第一个玩家开始,一个优雅的方法就是用%运算符求模。将两个数字相除,但返回余数。如果将玩家人数除以listaJogadores的大小,得到的数字始终在listaJogadores的范围内。

# Change this...
print("PLAYER TURN: ", listaJogadores[jogadorAtual])

# ...to this
print("PLAYER TURN: ", listaJogadores[jogadorAtual % len(listaJogadores)])

如果这不是你比赛所需要的,告诉我。
原文回答:游戏结束了还是 * 崩溃了 *?当我运行游戏时,它总是崩溃:

File "C:\Users\me\Desktop\Untitled-1.py", line 56, in <module>
    diceDrawns.append(diceDrawn)
AttributeError: 'int' object has no attribute 'append'

这是因为在循环之后,您尝试执行diceDrawns.append(),但是您已经在第87行用一个整数替换了diceDrawns列表。我不确定您是否打算替换diceDrawn,但这肯定是问题的根源。
一个不相关的注解:你可以用+=作为一种简化的方式来增加一个变量,这样你就可以用currentPlayer += 1来替换很多像currentPlayer = currentPlayer + 1这样的示例,同样的操作也可以用 any 操作符来完成,所以你也可以做像-=*=这样的事情

相关问题