我目前有一个问题,每次我尝试使用超过一个,而真实循环在我的代码,网站崩溃。我正在用python海龟编写代码,这是开始使用python编码的一个不错的初学者方式。基本上,我试图让一个海龟物体无限地旋转,直到玩家按下空格键。当海龟的物体是蓝色的时候,海龟就会被触发旋转。一旦玩家按下按钮,乌龟物体就会变成绿色,停止转动,并在按空格键之前向乌龟物体面对的方向移动300 px。这个小游戏的目标是击中被称为目标的红色球。每当代码运行时,这个目标都是在画布上的随机位置生成的。一旦海龟物体与目标发生碰撞,屏幕顶部的得分将从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'))
所以正如你所看到的,我有两个时间,真循环。一个是当玩家在游戏开始时是蓝色的。这允许海龟物体永远旋转,直到玩家击中空格键。另一个是真正的循环,当玩家通过按空格键变绿时,检查与红色球目标的碰撞。但是每次我运行代码后按下空格键,网站就会崩溃。有什么主意吗?谢谢!
我是朱尼学习的学生。这是一个在线课程,在那里你可以去学习与老师实时编码。它有自己的文本编辑器,所以这就是我一直在用的代码。
是否有更好的方法将您的代码粘贴到这个论坛上?我不得不粘贴我的代码堆栈溢出和缩进每一行代码4次,这有点乏味。
发布于 2020-03-23 16:06:09
好的,那么我和我的老师检查了我的密码问题。我们修复了它,现在它正在按预期运行。
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
基本上,我不得不在我的时间颜色是蓝色的循环中嵌套一个时间真循环,我的条件是检查代码是否是绿色的。感谢任何回应的人,感谢你们帮助我解决我的问题!我真的很感激!
发布于 2020-03-22 10:29:58
当您有两个for-循环时,一个将永远不会到达,直到另一个完成。为什么不在主循环中使用另一个if条件呢?
while t.color()[0] == 'blue':
if t.color()[0] == 'green':
t.right(turnSpeed)
PS:首先粘贴,然后将所有标记为代码
https://stackoverflow.com/questions/60803156
复制相似问题