- устанавливать библиотеки в ruby и использовать в своём коде
- писать простые игры с помощью библиотеки ruby2d
Библиотеки и RubyGems
О фреймворках
- зачем нужны библиотеки в программировании?
- если использовали менеджеры пакетов/системы управления библиотеками , расскажите о своём опыте
- зачем нужны фреймворки? В чем отличие фреймворка от библиотеки?
Пришло время устанавливать библиотеки:
Rubygems - gem hosting service
Bundler - provides a consistent environment for Ruby projects by tracking and installing the exact gems and versions that are needed.
rubygems должке быть установлен вместе с Ruby, проверим:
gem -vСписок установленных библиотек (гемов):
gem listИщем bundler:
gem list | grep "bundler"Фреймворк Ruby2d
Для windows - в wsl устанавливаем пакеты, необходимые для ruby2d: (в ubuntu аналогично)
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev- создаём отдельную директорию (обратите внимание, чтобы она не была внутри существующего репозитория)
- создаём
Gemfile, записываем туда:
source 'https://rubygems.org'
gem 'ruby2d'
Устанавливаем указанные в Gemfile гемы командой:
bundle installВыполнять код будем:
bundle exec ruby файл.rbПопробуем простой код с использованием ruby2d:
- создадим файл
- нарисуем треугольник
require 'ruby2d'
set title: "Hello Triangle"
Triangle.new(
x1: 320, y1: 50,
x2: 540, y2: 430,
x3: 100, y3: 430,
color: ['red', 'green', 'blue']
)
showДля слeдующего эксперимента создадим отдельный файл.
Нарисуем квадрат, которым мы сможем управлять с клавиатуры.
- рисуем квадрат
- обработка нажатия клавиш
on :key_down do |event|
# здесь доступен объект event, можно изучить его свойства
puts event
endВозьмём пример.
Обратите внимание на: (найдите в коде примера и убедитесь, что понимаете принцип работы)
- обработку клавиш
- цикл update
- изменение значений переменных
@x_speed,@y_speed
-
изменим размеры, цвет, стартовую позицию квадрата
-
измените программу так, чтобы менялись не скорость движения, а координаты фигуры (
@square.x,@square.y) (можно менять скорость с помощью одних клавиш, а координаты - с помощью других) -
добавьте возвращение фигуры на исходное место (значение координат фигуры и скоростей - вернуть в исходные значения)
-
измените программу так, чтобы управлять другими клавишами
(клавишам направлений будут соответствовать строки 'left', 'right', 'up', 'down', пробел - 'space')
-
поэкспериментируйте с управлением и параметрами фигуры
-
используйте оператор
caseвместо множестваif-else:
case fruit
when 'banana'
puts "Это банан"
when 'apple'
puts "Это яблоко"
when 'orange'
puts "Это апельсин"
else
puts "Это какой-то непонятный фрукт"
endбудет соответствовать коду с if-elsif:
if fruit == 'banana'
puts "Это банан"
elsif fruit == 'apple'
puts "Это яблоко"
elsif fruit == 'orange'
puts "Это апельсин"
else
puts "Это какой-то непонятный фрукт"
endРубин меняет своё положение на экране, цель игры - попасть по рубину.
При попадании увеличивается счёт. При достижении целевого счёта (например, 10 попаданий) - игра завершается победой.
Какие задачи/знакомые концепции вы видите?
С чего бы начали разработку игры?
Прочитайте о спрайтах и их использовании
Мы будем использовать простой спрайт из двух кадров.
Вы можете использовать картинку или заменить на свою.
Если вы чувствуете себя уверенно, можете разрабатывать игру самостоятельно, опираясь на документацию фреймворка ruby2d.
Другой вариант - разработка по шагам, перечисленным ниже.
Ещё один вариант - писать код параллельно на встрече / по видео.
Шаги разработки:
- задаём title и фон
- создаём спрайт с loop false, он не будет меняться (на данном этапе это просто картинка)
- спрайт двигается
координаты рандомно меняются (Используйте метод
rand) концепция tick
(TODO: описать tick)
update loop - будем "попадать" по рубину
- обработка клика мышкой
- проверка попадания (можно использовать метода
contains?, но чтобы он работал, нужно, чтобы у спрайта были установлены значенияwidthиheight) => увеличиваем "счёт" - заводим "счёт"
- проверка "максимальный счёт => завершение игры"
- удаление спрайта при завершении игры
- эффект разбивания рубина (
sprite.play) - лупим молотком по рубину
- создаём картинку "молоток", обрабатываем событие
mouse_moveи, т.о. меняем координаты картинки на координаты курсора.
- создаём картинку "молоток", обрабатываем событие
Доработка:
- "играть снова" после завершения игры
- "анимация" при разбивании рубина
- замена рубина на ваш объект, возможно, другого размера
- замена анимации
репозиторий с кодом упражнений
Закоммитьте и запушьте на гитхаб:
- создайте репозиторий на гитхабе если создадите без ридми, то он напишет инструкцию
- в своей директории
git init - добавьте файлы - git add файлы (
git add .- все файлы) - закоммитьте
git commit -m "описание" git remote add origin url_репозитория(ssh)- пушьте -
git push origin main
