Как заставить черепаху отскакивать от стен - PullRequest
0 голосов
/ 07 февраля 2019

Я должен написать код для класса информатики, который заставляет черепаху подпрыгивать вокруг прямоугольника, а также меняет цвет каждый раз, когда это делает.Я попытался разделить прямоугольник на 4 секции в зависимости от степени его заголовка, но, похоже, это не сработало. Я новичок, и некоторое время я пытался это выяснить.Я полностью потерян, поэтому любой совет / помощь будет высоко ценится.

import turtle, random

t = turtle.Turtle()
t.speed(0)
t.pensize(5)
t.color("Black")


def Rectangle():
  for i in range(2):
    t.forward(400)
    t.left(90)
    t.forward(200)
    t.left(90)

Rectangle()


t.penup()
t.goto(205,100)
t.color("Blue")
t.shape("circle")


direct = random.randint(1,360)

def tDirection(direct):
  t.right(direct)

tDirection(direct)



while True:

  color = ['red', 'blue', 'green', 'yellow', 'orange', "purple", "pink", "turquoise"]

  t.forward(2)
  ty = t.ycor()
  tx = t.xcor()

  #breaking out bottom
  if ty < 9:
    t.color((random.choice(color)))
    angleCurr = t.heading()
    if(270>angleCurr>180):
      t.left(90)
    if(270<angleCurr<360):
      t.right(90)
    t.forward(2)

  #breaking out top
  if ty > 188:
    t.color((random.choice(color)))
    angleCurr = t.heading()
    if(0<angleCurr<90):
      t.right(90)  
    elif(90<angleCurr<180):
      t.left(90)
    t.forward(2)

  #breaking out left
  if tx < 11:
    t.color((random.choice(color)))
    angleCurr = t.heading()
    if(180<angleCurr<270):
      t.right(90)  
    elif(270<angleCurr<180):
      t.left(90)
    t.forward(2)

  #breaking out right
  if tx > 390:
    t.color((random.choice(color)))
    angleCurr = t.heading()
    if(0<angleCurr<90):
      t.left(90)  
    elif(0<angleCurr<-90):
      t.right(90)
    t.forward(2)

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Я считаю, что мы можем исправить вашу программу и упростить ее.И параметризация это так, что вы можете изменить размер вашего прямоугольника и по-прежнему работать без исправления большого количества строк кода.И отцентрируйте его на экране:

from turtle import Turtle
from random import randint

COLORS = ['red', 'blue', 'green', 'yellow', 'orange', "purple", "pink", "turquoise"]

WIDTH, HEIGHT = 400, 200

CURSOR_SIZE = 20

def Rectangle():
    t.pendown()

    for i in range(2):
        t.forward(WIDTH)
        t.left(90)
        t.forward(HEIGHT)
        t.left(90)

    t.penup()

def tDirection(direct):
    t.setheading(direct)

t = Turtle("circle", visible=False)
t.speed('fastest')
t.pensize(5)
t.penup()
t.goto(-WIDTH/2, -HEIGHT/2)

Rectangle()

index = 0

t.color(COLORS[index % len(COLORS)])
t.home()
t.showturtle()

direct = randint(1, 360)

tDirection(direct)

while True:
    t.forward(2)
    ty = t.ycor()

    # breaking out top or bottom
    if not CURSOR_SIZE/2 - HEIGHT/2 <= ty <= HEIGHT/2 - CURSOR_SIZE/2:
        index += 1
        t.color(COLORS[index % len(COLORS)])

        angleCurr = t.heading()

        if 0 < angleCurr < 180:
            tDirection(0 - angleCurr)
        else:
            tDirection(360 - angleCurr)

        t.forward(2)

    tx = t.xcor()

    # breaking out left or right
    if not CURSOR_SIZE/2 - WIDTH/2 <= tx <= WIDTH/2 - CURSOR_SIZE/2:
        index += 1
        t.color(COLORS[index % len(COLORS)])

        angleCurr = t.heading()

        if 0 < angleCurr < 180:
            tDirection(180 - angleCurr)
        else:
            tDirection(540 - angleCurr)

        t.forward(2)

Вы заметите, что я изменил его с использования влево и вправо 90 градусов поворотов для использования абсолютных заголовков для управлениямяч отскакивает от стен.И заставил цвет перемещаться по списку цветов (по кругу) вместо того, чтобы выбирать один (возможно, один и тот же) случайным образом.

0 голосов
/ 07 февраля 2019

Вы допускаете некоторые ошибки в изменении направления угла, когда вам нужно установить угол вправо + 90 , установленный угол влево + 90 или когда вам нужно установить угол влево+ 90 вы установили угол вправо + 90 в столкновение левой, правой и нижней стенок .

Иногда, когда черепаха меняет цвет в случайном порядке. Выбор (цвет) поворачиваетсяцвет в такой же как и есть.Я сделал лучший код для изменения цвета, чтобы вы всегда меняли цвет черепахи.

import turtle, random

t = turtle.Turtle()
t.speed(0)
t.pensize(5)
t.color("Black")


def Rectangle():
  for i in range(2):
    t.forward(400)
    t.left(90)
    t.forward(200)
    t.left(90)

Rectangle()


t.penup()
t.goto(205,100)
t.color("Blue")
t.shape("circle")

A = random.randint(30,60)
B = random.randint(120,150)
C = random.randint(210,240)
D = random.randint(300,330)
Directions = [A, B, C, D]
direct = random.choice(Directions)

def tDirection(direct):
  t.right(direct)

tDirection(direct)


speed = 2
angle = 90
while True:

  color = ['red', 'blue', 'green', 'yellow', 'orange', "purple", "pink", "turquoise"]

  t.forward(speed)
  ty = t.ycor()
  tx = t.xcor()

  #print(ty, tx)

  #breaking out bottom
  if ty < 9:
    Col = random.choice(color)
    while Col == t.color()[0]:
      Col = random.choice(color)
    t.color(Col)
    angleCurr = t.heading()
    if(270>angleCurr>180):
      t.right(angle)
    else:
      t.left(angle)

    t.forward(2)

  #breaking out top
  if ty > 188:
    Col = random.choice(color)
    while Col == t.color()[0]:
      Col = random.choice(color)
    t.color(Col)
    angleCurr = t.heading()
    if(0<angleCurr<90):
      t.right(angle)
    else:
      t.left(angle)

    t.forward(2)

  #breaking out left
  if tx < 11:
    Col = random.choice(color)
    while Col == t.color()[0]:
      Col = random.choice(color)
    t.color(Col)
    angleCurr = t.heading()
    if(180<angleCurr<270):
      t.left(angle)
    else:
      t.right(angle)

    t.forward(2)

  #breaking out right
  if tx > 390:
    Col = random.choice(color)
    while Col == t.color()[0]:
      Col = random.choice(color)
    t.color(Col)
    angleCurr = t.heading()
    if(0<angleCurr<90):
      t.left(angle)
    else:
      t.right(angle)

    t.forward(speed)
...