如何在 python 乌龟中为掷骰子创建 while 循环?

How to create a while loop for a dice roll in python turtle?

我设置了两只乌龟,游戏的目标是看哪只乌龟能先到家。我必须使用掷骰子机制来确定这一点,但我不知道如何在使用 while 循环时添加一个。一旦乌龟 1 滚动,就应该轮到乌龟 2 了。他们一直这样做,直到其中一只海龟到达他们的家。那是游戏结束的时候。

import turtle
import random 

turtle.hideturtle()
turtle.penup()
turtle.setpos(300,80)
turtle.pendown()
turtle.speed(9)
turtle.circle(30)

turtle.hideturtle()
turtle.penup()
turtle.setpos(300,-125)
turtle.pendown()
turtle.speed(9)
turtle.circle(30)

p1 = turtle.Turtle()
p1.shape("turtle")

p2 = turtle.Turtle()
p2.shape("turtle")

def p1_start():
  p1.speed(9)
  p1.penup()
  p1.goto(-200,100)
  p1.pendown()

p1_start()
 
def p2_start():
  p2.speed(9)
  p2.penup()
  p2.goto(-200,-100)
  p2.pendown()

p2_start()

player1 = input("Player 1 enter name: ")
turtle.penup()
turtle.setpos(-207, 50)
turtle.write(player1, font=('Arial', 16, 'normal'))
turtle.hideturtle()

player2 = input("\nPlayer 2 enter name: ")
turtle.penup()
turtle.setpos(-207, -150)
turtle.write(player2, font=('Arial', 16, 'normal'))
turtle.hideturtle()

player1_color = raw_input("\nPlayer 1 enter color: ")
p1.color(player1_color)

player2_color = raw_input("\nPlayer 2 enter color: ")
p2.color(player2_color)

player1_dict = {"Name": player1, "Color": player1_color}
print("\nPLAYER 1 INFO: ")
print(player1_dict)

player2_dict = {"Name": player2, "Color": player2_color}
print("\nPLAYER 2 INFO: ")
print(player2_dict)

print('\n')

print('Player 1 is now rolling')
roll = int (random.randint (1,6))
if roll==1:
  print('The number on the die is',roll)
elif roll== 2:
  print('The number on the die is',roll)
elif roll == 3:
  print('The number on the die is',roll)
elif roll == 4:
  print('The number on the die is',roll)
elif roll == 5:
  print('The number on the die is',roll)
else: 
  print('The number on the die is',roll)
p1.forward(roll*20)

我看到了很多问题:在解决大局问题之前添加了太多细节——应该反过来;你创建了一个数据结构来代表你的玩家,但最后你并没有真正使用它;你为固定数量的玩家设计了这个,而你真的应该为未知(但合理)数量的玩家设计它以保持你的代码诚实。

让我们将您的代码拆开并重新组合起来以解决上述问题:

from turtle import Screen, Turtle
from random import randint

NUMBER_PLAYERS = 3
POLE = 300
FONT = ('Arial', 16, 'normal')

players = []

for player in range(1, NUMBER_PLAYERS + 1):
    name = input("\nPlayer " + str(player) + " enter name: ")
    color = input("Player " + str(player) + " enter color: ")

    players.append({'Name': name, 'Color': color})

for number, player in enumerate(players, 1):
    print("\nPlayer", number, "information:", player)

screen = Screen()
height = screen.window_height()
lane_height = height / (NUMBER_PLAYERS + 1)  # divide the vertical space into lanes

marker = Turtle()
marker.hideturtle()
marker.speed('fastest')

for number, player in enumerate(players, 1):
    y_coordinate = height/2 - lane_height * number

    marker.penup()
    marker.setpos(-POLE, y_coordinate + 30)
    marker.write(player['Name'], align='center', font=FONT)
    marker.setpos(POLE, y_coordinate - 30)
    marker.pendown()
    marker.circle(30)

    tortoise = Turtle()
    tortoise.hideturtle()
    tortoise.shape('turtle')
    tortoise.speed('slowest')
    tortoise.penup()
    tortoise.goto(-POLE, y_coordinate)
    tortoise.pendown()
    tortoise.color(player['Color'])
    tortoise.showturtle()

    player['Turtle'] = tortoise

while True:
    for number, player in enumerate(players, 1):
        y_coordinate = height/2 - lane_height * number

        print()
        print(player['Name'], 'is now rolling')
        roll = randint(1, 6)
        print('The number on the die is:', roll)
        player['Turtle'].forward(roll * 5)

        if player['Turtle'].distance(POLE, y_coordinate) < 30:
            print()
            print(player['Name'], "is the winner!")
            break

    else:  # no break
        continue

    break  # yes, this is a tricky loop -- take your time with it

screen.exitonclick()