Использование более одного варианта True l oop in python turtle - PullRequest
0 голосов
/ 22 марта 2020

В настоящее время у меня возникает проблема, когда каждый раз, когда я пытаюсь использовать более одного варианта «Верно», l oop в моем коде происходит сбой веб-сайта. Я кодирую с черепаха, хороший способ для начинающих начать с кодирования с 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'))

Так что, как вы можете видеть, у меня есть два цикла True, в то время как у меня есть два цикла. Один, когда игрок синий в начале игры. Это позволяет вращать объект черепахи до тех пор, пока игрок не нажмет пробел. А другое пока истинно l oop, когда игрок становится зеленым, нажимая клавишу пробела, чтобы проверить наличие столкновений с целью красного шара. Но каждый раз, когда я нажимаю пробел после запуска кода, сайт падает. Есть идеи? Заранее спасибо!

PS Я учусь на джуни. Это онлайн-класс, где вы можете go и научиться программировать с преподавателем в режиме реального времени. И он поставляется с собственным текстовым редактором, так что именно это я и кодировал.

PS PS И есть ли лучший способ вставить свой код на этот форум? Мне пришлось вставить свой код для переполнения стека и сделать отступ каждой строки кода 4 раза, что довольно утомительно.

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Хорошо, я и мой учитель решили проблему с кодом. Мы исправили это, и теперь он работает как задумано.

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

По сути, мне пришлось вложить некоторое время True l oop в мое пока синий цвет l oop вдоль моей условной проверки, чтобы проверить, зеленый ли код. Спасибо всем, кто откликнулся, за попытку помочь мне с моей проблемой! Я действительно ценю это!

0 голосов
/ 22 марта 2020

Когда у вас есть два цикла for, один из них никогда не будет достигнут, пока другой не закончится. Почему бы вам не использовать другое условие if в вашем mainl oop?

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

PS: сначала вставьте, затем пометьте все как код

...