2015-12-09 3 views
0

Я пытаюсь запрограммировать игру python с использованием черепаховой графики, и я столкнулся с некоторыми препятствиями. Когда я запускаю свой код, он позволяет мне направить черепаху вокруг, затем появляется целая куча точек, а затем она имеет ошибку глубины рекурсии.Как заставить точку исчезнуть после того, как ее съели?

раздел кода, который у меня возникли проблемы с это:

def move(): 
    colormode(255) 
    global turtle 
    global moving 
    x = randomColor() 

    if moving: 
     for i in range(1): 
      turtle.penup() 
      turtle.shape('turtle') 
      turtle.shapesize(.5, .5, .5) 
      turtle.color(x) 
      turtle.forward(5) 
      ontimer(move, 10 // FRAMES_PER_SECOND) 

     x = randrange(-250, 250) 
     y = randrange(-250, 250) 
     pen1 = Pen() 
     pen1.hideturtle() 
     pen1.penup() 
     pen1.goto(x, y) 

     pen1.dot(10, "red") 

     if turtle.pos() == pen1.pos(): 
      pen1.clear() 
      pen1.goto(x, y) 

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

ответ

0

вы должны:

  1. рисовать красную точку один раз на старте и сохранить координацию.
  2. После каждого перемещения проверьте положение черепахи с вашей последней точкой (x, y).
  3. Если это так, нарисуйте точку в том же положении с цветом фона (белый, я думаю).

    3.1. Затем создайте новые случайные x, y и перерисуйте красную точку.

0

Способ, которым я собираюсь это сделать, - определить вторую черепаху с формой и цветом пищи. Затем отпечатайте эту черепаху, чтобы произвести еду, сохраняя результат звонка stamp(), чтобы вы могли позже позвонить по телефону clearstamp(stamp). Я установил такие вверх ниже с большим количеством пищи, которую черепаха гонит вниз, пока они все ушли:

from turtle import Turtle, Screen 
from random import randrange 

WIDTH, HEIGHT = 500, 500 
FRAMES_PER_SECOND = 24 
TARGET_SIZE = 10 

POSITION, STAMP = 0, 1 

def move(): 
    global meal 

    x, y = meal[POSITION] 
    tx, ty = turtle.position() 

    if x - TARGET_SIZE // 2 < tx < x + TARGET_SIZE // 2 and y - TARGET_SIZE // 2 < ty < y + TARGET_SIZE // 2: 
     food.clearstamp(meal[STAMP]) 

     if meals: 
      meal = meals.pop() 
     else: 
      meal = None 

    if meal: 
     turtle.setheading(turtle.towards(meal[POSITION])) 
     turtle.forward(turtle.speed()) 
     screen.ontimer(move, 1000 // FRAMES_PER_SECOND) 


screen = Screen() 
screen.setup(int(WIDTH * 1.1), int(HEIGHT * 1.1)) # size window but leave a border 

turtle = Turtle(shape='turtle') 
turtle.speed("fast") 
turtle.penup() 

food = Turtle(shape="circle", visible=False) 
food.shapesize(0.5, 0.5) 
food.color("red") 
food.penup() 

meals = [] 

for _ in range(10): 
    x = randrange(-WIDTH // 2, WIDTH // 2) 
    y = randrange(-HEIGHT // 2, HEIGHT // 2) 

    food.goto(x, y) 
    meals.append(((x, y), food.stamp())) 

meal = meals.pop() 

screen.ontimer(move, 1000 // FRAMES_PER_SECOND) 

screen.exitonclick() 

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

enter image description here

0

Do: (имя) .up() (имя) .forward (10000)

+1

Любой шанс, что вы можете дать немного больше контекста, чтобы сделать ваш ответ немного понятнее? – entpnerd

Смежные вопросы