Урок 2.3. Создание простой компьютерной игры
Базовый курс "Программирование микроконтроллеров"
Модуль 2. Создание интерактивных интерфейсов в среде Processing
Что такое Processing?
Помимо художественных анимаций и научных моделей, на Processing можно писать игры! Напишем простую игру по мотивам известного произведения Анджея Сапковского “Ведьмак”. В этой игре нам нужно будет собирать монетки, которыми щедро осыпают кошелек Геральта из Ривии.
Начнём с того, что научимся работать с изображениями. Для удобства, скачайте архив и переместите папку Witcher на рабочий стол, ссылка на скачивание архива:
Откройте папку и запустите файл Witcher.pde.
В нём Вы обнаружите наш стартовый код с пояснениями, запустив который, Вы увидите на своём экране Ведьмака, устало сидящего на Плотве, и Лютика, сочинившего в честь Геральта хвалебную оду.
void loop() {
int duration;
float cm;
// генерируем на выводе Trig положительный импульс длиной 10 мкс
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// считываем длительность импульса, т.е. время между испусканием УЗ волны и её возвратом
duration = pulseIn(echoPin, HIGH);
// вычисляем расстояние
cm = (float)duration / 58;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Dist = " + String(cm) + " cm");
delay(200);
}
По такому же принципу добавим еще два объекта, кошелек, которым будем ловить монетки, и сами монетки:
// Создание объекта класса "Изображение"
PImage bg; // объект фон окна
PImage coin; // объект монетки
PImage wallet; //объект кошелька
float x_w, w_w, h_w, y_w; // координаты, ширина и высота кошелька
float w_c, h_c; // ширина и высота монетки
int N=5; // количество монет, их координаты и скорости
float x_c[] = new float[N];
float y_c[] = new float[N];
float Vy[] = new float[N];
void setup()
{
fullScreen(); // полноэкранный режим
bg = loadImage("witcher.jpg");
bg.resize(width, height);
coin = loadImage("coin.png");
// задаем размеры монетки как 1/20 от ширины и высоты экрана
w_c = width/20;
h_c = height/20;
coin.resize(int(w_c), int(h_c));
wallet = loadImage("wallet.png");
// задаем размеры кошелька как 1/10 от ширины и высоты экрана
h_w = height/10;
w_w = width/10;
wallet.resize(int(w_w), int(h_w));
// генерируем параметры монеток
for (int i=0; i<N; i++)
{
x_c[i]=random(w_c, width - w_c);
y_c[i]=h_c;
Vy[i]=random(1, 5);
}
// задаём положение кошелька
y_w=height-100;
x_w=width/2;
}
void draw()
{
background(bg); // устанавливаем в качестве заднего фона объект bg
image(wallet, x_w, y_w); // располагаем изображение кошелька в координатах x_w и y_w
// рисуем монетки в сгенерированных позициях
for (int i=0; i<N; i++)
{
y_c[i]=y_c[i]+Vy[i];
image(coin, x_c[i], y_c[i]);
}
}