Программирование на Python: графика — презентация
logo
Программирование на Python: графика
  • Программирование на Python: графика
  • Анимация
  • Принцип анимации
  • Начальная картинка
  • Движение
  • Выход по Escape
  • Полная программа
  • Задания
  • Задания
  • **Управление клавишами
  • Задания
  • Задания
  • ***Управление по требованию
  • Как «поймать» нажатие клавиши?
  • Полная программа
  • Задания
  • Задания
  • «Змейка»
  • Как хранить змейку?
  • Как двигать змейку?
  • Как двигать змейку?
  • Как двигать змейку?
  • Полная программа
  • Задания
  • Задания
1/25

Первый слайд презентации: Программирование на Python: графика

Анимация 1

Изображение слайда

Слайд 2: Анимация

2 Анимация (англ. animation ) – оживление изображения на экране. Задача : внутри синего квадрата 400 на 400 пикселей слева направо двигается желтый квадрат 20 на 20 пикселей. Программа останавливается, если нажата клавиша Esc или квадрат дошел до границы синей области. Привязка: состояние объекта задается координатами ( x,y) ( x, y ) ( x +20, y +20)

Изображение слайда

Слайд 3: Принцип анимации

3 рисуем объект в точке ( x,y) задержка на несколько миллисекунд стираем объект изменяем координаты ( x,y ) переходим к шагу 1 В Python все фигуры, из которых состоит рисунок, – объекты (умеют перерисовывать себя сами)! ! moveObjectBy (obj, dx, dy) смещения по осям объект

Изображение слайда

Слайд 4: Начальная картинка

4 from graph import * brushColor ( "blue" ) rectangle ( 0, 0, 400, 400 ) x = 100 y = 100 penColor ( "yellow" ) brushColor ( "yellow" ) obj = rectangle (x, y, x+ 20, y+ 20 ) run () синий квадрат начальные координаты жёлтый квадрат

Изображение слайда

Слайд 5: Движение

5 def update (): moveObject By (obj, 5, 0 ) if x Coord ( obj ) >= 380 : # если вышел close () # за границу onTimer ( update, 50 ) вызывать update каждые 50 мс x -координата

Изображение слайда

Слайд 6: Выход по Escape

6 Событие (англ. event ) – изменение состояния какого-то объекта в программе (нажатие на клавишу, щелчок мышью, перемещение или изменение размеров окна и т.п.). def keyPressed (event): if event.keycode == VK_ESCAPE: close () # закрыть окно onKey ( keyPressed ) вызывать при нажатии любой клавиши обработчик события установка обработчика события код клавиши Esc = 27

Изображение слайда

7 from graph import * def update (): ... def keyPressed (event): ... brushColor ( "blue" ) rectangle ( 0, 0, 400, 400 ) x = 100 y = 100 penColor ( "yellow" ) brushColor ( "yellow" ) obj = rectangle (x, y, x+ 20, y+ 20 ) onKey ( keyPressed ) onTimer ( update, 50 ) run () процедуры обработка событий

Изображение слайда

Слайд 8: Задания

8 Квадрат двигается справа налево: Два квадрата двигаются в противоположных направлениях:

Изображение слайда

Слайд 9: Задания

9 Два квадрата двигаются в противоположных направлениях и отталкиваются от стенок синего квадрата:

Изображение слайда

Слайд 10: Управление клавишами

10 Задача : жёлтый квадрат внутри синего квадрата управляется клавишами-стрелками. Коды клавиш: влево – 37 вверх – 38 Esc – 27 вправо – 39 вниз – 40 Проблема : как изменять направление движения? Обработчик события : def keyPressed (event): if event.keycode == VK_LEFT: moveObjectBy ( obj, - 5, 0 ) elif event.keycode == VK_RIGHT: moveObjectBy ( obj, 5, 0 ) ... # дальше – сами... onKey ( keyPressed ) # установить обработчик =37 =39 VK_UP = 38 VK_DOWN = 40 VK_ESCAPE

Изображение слайда

Слайд 11: Задания

11 Квадрат в самом начале стоит в правом нижнем углу, и двигается при нажатии стрелок только вверх или влево: Квадрат двигается при нажатии стрелок, однако не может выйти за границы синего квадрата:

Изображение слайда

Слайд 12: Задания

12 Два квадрата, один управляется стрелками, второй – любыми другими клавишами. Оба не могут выйти за границы синего поля.

Изображение слайда

Задача : жёлтый квадрат постоянно движется и меняет направление движения при нажатии клавиш-стрелок. При нажатии на пробел останавливается. Проблема : как изменять направление движения? Решение : def update (): ... moveObjectBy ( obj, 5, 0 ) ... onTimer ( update, 50 ) Что меняем? ? Здесь должны быть переменные! ! 13 d x dy

Изображение слайда

Слайд 14: Как «поймать» нажатие клавиши?

14 def keyPressed (event): global dx, dy if event.keycode == VK_LEFT : dx = -5 dy = 0 ... onKey ( keyPressed ) ? ? Как для остальных клавиш? ? Пробел: VK _ SPACE Это глобальные переменные!

Изображение слайда

Слайд 15: Полная программа

15 from graph import * def update (): ... def keyPressed (event): ... # рисуем синий квадрат x = 100 ; y = 100 dx = 0 ; dy = 0 penColor ( "yellow" ) brushColor ( "yellow" ) obj = rectangle (x, y, x+ 20, y+ 20 ) onKey ( keyPressed ) onTimer ( update, 50 ) run () процедуры обработка событий глобальные переменные

Изображение слайда

Слайд 16: Задания

« 3 » : Собрать и запустить программу. «4» : Квадрат не может выйти за границы синего квадрата, сразу останавливается при столкновении со стенкой. 16

Изображение слайда

Слайд 17: Задания

« 5 » : Квадрат отталкивается от стенок. «6»: Квадрат может ходить по диагоналям (используйте ещё 4 клавиши) и отталкивается от стенок. 17

Изображение слайда

Слайд 18: Змейка»

18 Задача : змейка состоит из головы и нескольких секций тела, постоянно движется и меняет направление движения при нажатии клавиш-стрелок. При нажатии на пробел останавливается. Проблемы : 1) как хранить данные о змейке? 2) как двигать её в нужную сторону?

Изображение слайда

Слайд 19: Как хранить змейку?

19 Змейка = массив из звеньев-квадратов snake = [obj0, obj1, obj2, obj3, obj4] a ( x, y ) snake = [] penColor ( "yellow" ) brushColor ( "yellow" ) for i in range(N): obj = rectangle ( x+i *a, y, x+i * a+a, y+a ) snake. append ( obj ) brushColor ( "green" ) цвет границы и заливки для головы остальные зелёные

Изображение слайда

Слайд 20: Как двигать змейку?

20 Каждое следующее звено перемещается на место предыдущего! ! В каком порядке перебирать звенья? ? Для k - ого звена: newCoord = coords (snake[k- 1 ]) moveObjectTo (snake[k], newCoord [ 0 ], newCoord [ 1 ]) с последнего! координаты предыдущего звена

Изображение слайда

Слайд 21: Как двигать змейку?

21 Вся змейка: def moveSnake ( xNew, yNew ): global x, y for k in range ( len (snake)- 1, 0,- 1 ): newCoord = coords (snake[k- 1 ]) moveObjectTo (snake[k], newCoord [ 0 ], newCoord [ 1 ]) moveObjectTo (snake[ 0 ], xNew, yNew) x = xNew y = yNew перебор с последнего, кроме головы двигаем голову

Изображение слайда

Слайд 22: Как двигать змейку?

22 Шаг перемещения всегда равен a ! ! Удобно так: dx, dy = –1, 0 или1 def keyPressed (event): global dx, dy if event.keycode == VK_LEFT : dx = - 1 dy = 0 ... def update (): if dx or dy : moveSnake ( x + dx *a, y + dy *a ) dy*a dx*a если оба нули, двигать не нужно!

Изображение слайда

Слайд 23: Полная программа

23 from graph import * def move Snake (xNew, yNew): ... def update (): ... def keyPressed (event): ... # рисуем синий квадрат x = 100 ; y = 100 # координаты головы dx = 0 ; dy = 0 # в начале стоит на месте a = 10 ; N = 20 # размер и количество звеньев # рисуем змейку в начальном положении onKey ( keyPressed ) onTimer ( update, 50 ) run ()

Изображение слайда

Слайд 24: Задания

« 3 » : Собрать и запустить программу. «4» : Змейка не может выйти за пределы синего квадрата ( останавливается у стенки). 24

Изображение слайда

Последний слайд презентации: Программирование на Python: графика: Задания

« 5 » : Змейка при столкновении с границей поля начинает ползти вдоль этой границы. «6»: Если змейка пересекает сама себя, игра заканчивается. 25

Изображение слайда

Похожие презентации