BGT — Множество объектов

При создании игр у вас может возникнуть вопрос, как сделать много объектов.
Например, вы делаете игру, где много каких-нибудь роботов, которые должны убивать персонажа.
Не будете же вы прописывать переменные для каждого робота. Это сильно грузит процессор, да и вообще плохо сказывается на производительности игры.
Лучше автоматизировать сей процесс.
Это можно делать несколькими способами.
Способ массивов, как я сам его называю и объектный способ.
Сегодня мы рассмотрим только 1 способ: массивный.
Наша задача: создать игру, где игрок тупо собирает яйца, получая за это очки.
Если вы играли в коллекцию игр, то там тоже была игра «В поисках яиц».
Вот мы и создадим её подобие.
#include»sound_pool.bgt»;
sound_pool s;
//Задаём случайные координаты игрока
int x=random(1, 100);
int y=random(1, 100);
//Переменная очков
int points=0;
//Создаём массив с координатами яиц
int[] egg_x;
int[] egg_y;
//Создаём массив слотов для яиц, чтобы управлять их звуками через sound_pool
int[] egg_slot;
void main() {
show_game_window(«Тест»);
//У нас будет 20 яиц на поле, поэтому задаём значение для двадцати.
for(int i=0; i<20; i++) {
egg_x.insert_at(i, random(1, 100));
egg_y.insert_at(i, random(1, 100));
//Запускаем проигрывание звука яйца.
egg_slot.insert_at(i, s.play_2d(«egg.wav», x, y, egg_x[i], egg_y[i], true));
}
while(true) {
//Делаем движение игрока по полю.
if(key_pressed(KEY_LEFT)) {
x-=1;
s.play_stationary(«step»+random(1, 3)+».wav», false);
}
if(key_pressed(KEY_UP)) {
y+=1;
s.play_stationary(«step»+random(1, 3)+».wav», false);
}
if(key_pressed(KEY_RIGHT)) {
x+=1;
s.play_stationary(«step»+random(1, 3)+».wav», false);
}
if(key_pressed(KEY_DOWN)) {
y-=1;
s.play_stationary(«step»+random(1, 3)+».wav», false);
}
//Запускаем цикл, в котором будем работать с яйцами.
for(int i=0; i<20; i++) {
//Создаём условие, чтобы игрок взял яйцо, наступив на его координаты.
if(x==egg_x[i] and y==egg_y[i]) {
//Проигрываем звук того, что игрок взял яйцо.
s.play_stationary(«egg take.wav», false);
//Перемещаем яйцо на новые координаты и даём его слоту новый звук.
s.destroy_sound(egg_slot[i]);
egg_x[i]=random(1, 100);
egg_y[i]=random(1, 100);
egg_slot[i]=s.play_stationary(«egg.wav», false);
//Начисляем игроку одно очко.
points+=1;
}
}
//Делаем просмотр очков.
if(key_pressed(KEY_SPACE))
alert(«Сообщение», points);
if(key_pressed(KEY_ESCAPE))
exit();
s.update_listener_2d(x, y);
}
}
Как вы поняли, мы создавали массив для каждой переменной объекта.
У каждого из яиц есть переменные:
координата x, координата y, слот для звука.
Нам нужно создать таких 20 яиц, поэтому создаём три массива для каждой переменной.
А потом в while просто запускаем цикл, который ежесекундно проверяет условие в своём теле.
Также вы можете создавать и много врагов, только переменных у них будет больше и условий тоже больше.
Бывает так, что нужно создать массив не int или string, а массивы таймеров, звуков, логических значений и т. д.
Делается это вот так:
sound[] my_sound;
timer[] my_timer;
bool[] life;
vector[] v;
По идее всё также, как и с int и string.
Пробуйте создавать много объектов, пробуйте делать так, чтобы они двигались и жили своей жизнью.
Всем удачи, вопросы пишем в комментах к статье.