2013-04-15 8 views
0

Я создал до сих пор тип стиля эскиза-эскиза, который перемещается на определенное расстояние при нажатии клавиши и меняет цвет, используя функции onkey. Однако я хочу заполнить то, что вы рисуете с помощью программы, присвоив ее другому ключу, например «космос». Поэтому, когда выполняется «пробел», он заполняет то, что я нарисовал, например. квадрат с цветом, который я использую в настоящее время. Пробел пробела уже определен, чтобы остановить рисование, но я также хотел бы, чтобы он выполнял команду заливки.Заполнение рисунка черепахи после присвоения ключа

Заранее спасибо.

screen_size = 600 
setup(screen_size, screen_size) 
maximum_coord = (screen_size/2) - 20 
bgcolor("white") 
goto(0,0) 
speed = 5 
pensize(3) 
color("red") 
pendown() 


# Listen for the key presses 
listen() 

# Define all the functions that will control forward, back, left and right 
    def up(): 
     if ycor() < maximum_coord: 
    setheading(90) 
    forward(speed) 
def down(): 
    if ycor() > -maximum_coord: 
     setheading(270) 
     forward(speed) 
def left(): 
    if xcor() > -maximum_coord: 
     setheading(180) 
     forward(speed) 
def right(): 
    if xcor() < maximum_coord: 
     setheading(0) 
     forward(speed) 
def undo_move(): 
    undo() 


#Define space bar to make the pen go up and therefore stop drawing 
current_state = penup 
next_state = pendown 
def space_bar(): 
    global current_state, next_state 
    next_state() 
    current_state, next_state = next_state, current_state 


#Define colours when keys are pressed 
def red(): 
     color("red") 

def green(): 
    c olor("green") 

def blue(): 
     color("blue") 


#Define space bar to make the pen go up and therefore stop drawing 

current_state = penup 
next_state = pendown 
def space_bar(): 
    global current_state, next_state 
    next_state() 
    current_state, next_state = next_state, current_state 

# Define the function to clear all the currently drawn lines on the page, 
# but keep the turtle in the same position 
def clear_drawing(): 
    clear() 


# Define all the functions that will control forward, back, left and right 
s= getscreen() 
s.onkey(up,"Up") 
s.onkey(down,"Down") 
s.onkey(left,"Left") 
s.onkey(right,"Right") 
s.onkey(space_bar,"space") 
s.onkey(red,"r") 
s.onkey(green,"g") 
s.onkey(blue,"b") 
s.onkey(undo_move,"z") 
s.onkey(clear_drawing, "c") 

    done() 

ответ

0

Есть две функции Turtle называемые begin_fill() и end_fill() который заполняет любую форму Turtle проследил в цвете, что Turtle есть. Трудная вещь заключается в том, чтобы отличить, когда до begin_fill() или когда до end_fill().

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

Первое изменение pendown() к penup()

global counter 
counter = 0 

def space_bar(): 
    global counter 
    counter = counter + 1 
    if counter % 2 != 0: 
     pendown() 
     begin_fill() 
    else: 
     penup() 
     end_fill() 

Эта функция будет иметь возможность переключаться в и из функции, когда она нажата, и будет также заполнить любую форму вы проследите в Turtle.

Редактировать: Избавьтесь от одного из других space_bar() и замените его на этот код, чтобы получить результаты.

+0

Отлично работает, благодарю вас за помощь. – user2281912