【问题标题】:Using more than one While True loop in python turtle在 python turtle 中使用多个 While True 循环
【发布时间】:2020-07-03 07:15:03
【问题描述】:

我目前遇到一个问题,每次我尝试在我的代码中使用多个 While True 循环时,网站都会崩溃。我正在使用turtle 进行编码,这是一个很好的初学者开始使用 python 编码的方法。所以基本上我试图让乌龟物体无限旋转,直到玩家按下空格键。当海龟对象为蓝色时,海龟被触发旋转。一旦玩家按下按钮,海龟对象将变为绿色信号,它停止转动并在按下空格键之前向海龟对象所面对的方向前进 300 像素。这个小迷你游戏的目标是击中被称为目标的红球。每次代码运行时,此目标都会在画布上的随机位置生成。一旦海龟对象与目标碰撞,屏幕顶部的分数将从 0 变为 1。

import turtle
import random

t = turtle.Turtle()
target = turtle.Turtle()
scoreBoard = turtle.Turtle()
scoreBoard.ht()
target.ht()
screen = turtle.Screen()
x = random.randint(-300,300)
y = random.randint(-300,300)
scoreNum = 0
turnSpeed = 2

t.shape('turtle')
t.color('blue')

target.speed(0)
target.penup()
target.goto(30,0)
target.shape('circle')
target.color('red')
target.st()

scoreBoard.color('orange')
scoreBoard.speed(0)
scoreBoard.penup()
scoreBoard.goto(-75,310)
scoreBoard.write('Score:' + str(scoreNum),font=('Arial',15, 'normal'))

def turnStop():
  t.color('green')
  t.forward(300)

def checkCollision():
  if abs(t.xcor() - target.xcor()) < 10 and abs(t.ycor() - target.ycor()) < 10:
    return True
  else:
    return False

screen.onkey(turnStop,'space')
screen.listen()

while t.color()[0] == 'blue':
  t.right(turnSpeed)

while t.color()[0] == 'green':  
  if checkCollision():
    scoreNum = scoreNum + 1
    scoreBoard.clear()
    scoreBoard.write('Score:' + str(scoreNum),font=('Arial',15, 'normal'))

如您所见,我有两个 while True 循环。一种用于玩家在游戏开始时是蓝色的。这允许海龟对象永远旋转,直到玩家按下空格键。另一个 while true 循环用于当玩家按下空格键变为绿色时,检查与红球目标的碰撞。但是每次我在运行代码后按空格键时,网站都会崩溃。有什么想法吗?提前致谢!

P.S 我是juni learning的学生。这是一个在线课程,您可以在其中与老师实时学习编码。它带有自己的文本编辑器,这就是我一直在编写的代码。

P.S P.S 还有没有更好的方法可以将您的代码粘贴到这个论坛上?我不得不将代码粘贴到堆栈溢出并缩进每行代码 4 次,这有点乏味。

【问题讨论】:

  • 回应您的最后一个问题:当然有。一旦我的修改被接受,您就可以看到。
  • 所以我只是在我的代码中添加'''?示例:''' import turtle ''' 对不起,如果这看起来很愚蠢。这是我第一次上这个论坛。 :(

标签: python python while-loop turtle-graphics


【解决方案1】:

当您有两个 for 循环时,直到另一个完成后才会到达其中一个。 为什么不在主循环中使用另一个 if 条件?

while t.color()[0] == 'blue':  
    if t.color()[0] == 'green':
        t.right(turnSpeed)

PS:先粘贴,再标记为代码

【讨论】:

  • 我试过你的代码,但现在海龟对象似乎根本没有移动。请注意,我的乌龟一开始是蓝色的,一旦玩家按下空格键,它就会变成绿色。
  • 抱歉,我应该切换条件
  • 所以,我切换了颜色,现在似乎每次按空格键时网站都会崩溃,就像它在两个 While True 循环中崩溃一样。这可能只是网站的问题,我不确定。请注意,在添加变体之前,我已注释掉了两个 While True 循环。
【解决方案2】:

好的,所以我和我的老师解决了我遇到的代码问题。我们修复了它,现在它按预期运行。

import turtle
import random

t = turtle.Turtle()
target = turtle.Turtle()
scoreBoard = turtle.Turtle()
scoreBoard.ht()
target.ht()
screen = turtle.Screen()
x = random.randint(-300,300)
y = random.randint(-300,300)
scoreNum = 0
turnSpeed = 2

t.shape('turtle')
t.color('blue')

target.speed(0)
target.penup()
target.goto(30,0)
target.shape('circle')
target.color('red')
target.st()

scoreBoard.color('orange')
scoreBoard.speed(0)
scoreBoard.penup()
scoreBoard.goto(-75,310)
scoreBoard.write('Score:' + str(scoreNum),font=('Arial',15, 'normal'))

def turnStop():
  t.color('green')

def checkCollision():
  if abs(t.xcor() - target.xcor()) < 10 and abs(t.ycor() - target.ycor()) < 10:
    return True
  else:
    return False

screen.onkey(turnStop,'space')
screen.listen()

while True:
  while t.color()[0] == 'blue':
    t.right(turnSpeed)

  if t.color()[0] == 'green':  
    for i in range(30):
      t.forward(10)
      if checkCollision():
        x = random.randint(-300,300)
        y = random.randint(-300,300)
        scoreNum = scoreNum + 1
        scoreBoard.clear()
        scoreBoard.write('Score:' + str(scoreNum),font=('Arial',15, 'normal'))
        target.goto(x,y)
        t.penup()
        t.goto(0,0)
        t.color('blue')
        t.pendown()
        break
    else:
      break

基本上,我必须在我的 while color is blue 循环中嵌套一个 while True 循环,沿着我的条件检查代码是否为绿色。感谢任何回复的人,他们试图帮助我解决我的问题!我真的很感激!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2022-11-23
    • 2017-07-14
    相关资源
    最近更新 更多