(495) 240-82-80ПН-СБ с 10:00 до 18:00
We speak English

5.4. Практикум: Движение - это жизнь!

В рамках урока по Практическому применению навыков вы научитесь создавать основную часть интерактивной графической программы, в которой можно перемещать объект по экрану с помощью кнопки стрелок клавиатуры.

Вы научитесь:

  • Совмещать на практике все полученные в ходе изучения онлайн курса навыки и знания путем создания интересной и увлекательной графической программы

Пришло время объединить все знания...

Ваша задача - создать программу, которая будет "слушаться" нажатия на кнопки клавиатуры и перемещать объект по экрану в нужном вам направлении...

1. Для того чтобы "отслеживать" нажатие на кнопку вам понадобится функция get_key(), а также функции рисования, чтобы отображать объект, способный перемещаться.

В пустой файл Python импортируйте функции ti_system и ti_draw. Или используйте один из шаблонов и добавьте в него недостающие функции.

2. Программа должна понимать, какая кнопка нажата, чтобы предпринимать соответствующие действия. Поэтому вам нужно сохранить значение кнопки в переменной:

k = get_key()

Начните рисовать свой объект (круг) в центре экрана:

x=159

y=106

Это действие также можно выполнить, если написать следующее: x,y = 159,106.

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

Примечание для учителя: Можете попросить учащихся самостоятельно ввести функции для рисования и стирания объектов. clear() стирает содержимое экрана, функция clear(x,y,w,h) стирает прямоугольную область.

3. Запустите основной цикл следующим образом:

while k != "esc":

Создайте цветной круг. Радиус и цвет заливки выбирайте на свое усмотрение.

Примечание для учителя: Цвет и радиус можно выбрать произвольно.

4. Проверьте, какая кнопка была нажата.

if k == "up":

y = y - 10 (или y - = 10)

Эти выражения означают следующее: Если нажата кнопка "стрелка вверх", нужно вычесть 10 из значения у. Это приведет к тому, что круг переместится по экрану вверх на 10 пикселей.

Теперь напишите три выражения с оператором if для других трех стрелок (вниз, влево и вправо). При этом нужно указать, насколько должен произойти сдвиг по оси х и у соответственно.

Все выражения if являются частью блока выражения while.

Внизу блока нужно будет снова ввести выражение для считывания нажатия кнопки (k = get_key()), все это внутри цикла с оператором while, т.к. первое выражение k = get_key() не являлось его частью.

Когда закончите, протестируйте программу.

5. Используйте кнопки стрелок, чтобы перемещать круг. Получилось? Если да, то примите наши поздравления! Только при движении круг оставляет за собой след, это можно исправить.

Нужно стереть старый круг перед тем, как перемещать его. Для этого понадобятся следующие выражения:

set_color(255,255,255)

fill_circle(x,y,10)

Их нужно вводить до того выражения, которое изменяет значения х и у.

6. Теперь круг "мигает", потому что вы его окрашиваете в желтый, а затем сразу в белый. Вам нужно сделать так, чтобы экран обновлялся именно тогда, когда будет нарисован желтый круг.

Поэтому вверху своей программы (перед выражением с оператором while) поместите следующее выражение:

use_buffer()

Его можно найти в меню: TI Draw > Control.

Теперь после выражения, которое отвечает за рисование желтого круга, введите следующую функцию:

paint_buffer()

Снова запустите программу.

Теперь стало лучше? Экран обновляется только после того, как нарисован желтый круг.

Примечание для учителя: Немного информации о функциях use_buffer() и paint_buffer():
Данные две функции предоставляют вам "контроль" над тем, когда именно обновляются нарисованные на экране объекты.

  • Функция use_buffer() подразумевает, что компьютер будет рисовать объекты в буфере памяти, то есть той области памяти, которая не видна на экране.
  • Функция paint_buffer() является сигналом для перемещения всех данных из буфера на экран.

Поэтому стирание желтого круга и рисование нового происходит не на экране, и это происходит одновременно, поэтому все, что вы видите, это желтый круг (в разных позициях).

7. И, наконец, что будет происходить, когда круг будет выходить за пределы экрана? Если, например, все время перемещать его в одном направлении. Дополните свою программу еще несколькими выражениями с оператором if, чтобы система понимала, где находится край, и предпринимала соответствующие действия. Здесь у вас два варианта:

  1. Если круг доберется до края, он должен оставаться на месте и не выходить за пределы экрана:
    (если x<0, то x=0 и так далее) (if x<0 then make x=0).
  2. Если круг выйдет за пределы одной из сторон экрана, нарисовать его с противоположной стороны:
    (если x<0, то x=317 и так далее) (if x<0 then make x=317)

Удачи!

Дополнительная задача:

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

Примечание для учителя: Образец кода для данной задачи:

# Unit 5 Application: move it!
from ti_system import get_key
rom ti_draw import *
#===========================
use_buffer()
key = get_key()
x,y = 159,106
while key!="esc":
   set_color(255,255,0)
   fill_circle(x,y,10)
   set_color(0,0,0)
   draw_circle(x,y,10)
   paint_buffer()
   set_color(255,255,255)
   fill_circle(x,y,10)
   draw_circle(x,y,10)
   if key == "up":
      y = y - 10  # or y-=10
   if key == "down":
      y+=10
   if key =="left":
      x-=10
   if key =="right":
      x+=10
   if x<0:x=317
   if x>317:x=0
   if y<0:y=211
   if y>211:y=0
   key = get_key(0)