Сбор яиц

Сбор яиц — это игра, представляющая собой поле 100 на 100 клеток, на котором в случайном порядке раскиданы яйца.
Вам необходимо перемещаться во всех четырёх направлениях и собирать эти яйца.
По клавише Enter можно узнать, сколько яиц вы собрали.
Данная игра стабильно озвучивается скринридером NVDA.
Несмотря на то, что в коде не осуществляется установка хука на клавиатуру, перехвата клавиш, даже при запущенном NVDA не возникает.
Ниже следует исходный код игры.
Автор постарался достаточно подробно прокомментировать практически каждую строку кода.
Там, где комментариев нет, но у читателя могут возникнуть вопросы, авторы перевода данного руководства добавили свои комментарии.
Автор кода: Fluttery

Код

//Подключаем sound_pool.bgt
#include"sound_pool.bgt"

//Создаём объект sound_pool
sound_pool sounder;

//Создаём координаты игрока
int x;
int y;

//Создаём переменную яиц
int eggs;

//Задаём константы поля, поле будет 100 на 100 клеток
const int max_x=100;
const int max_y=100;

//Создаём таймер движения игрока
timer move;

//Запускаем главную функцию игры
void main()
{
// Показываем окно игры
show_game_window("Сбор яиц");
//Задаём поведение звуков так, чтобы если игрок стоит за звуком, звук играет, как обычно. Если же игрок спереди, то тональность звука понижается
sounder.behind_pitch_decrease=3;
//Определяем координаты игрока в пространстве случайным образом
x=random(1, max_x);
y=random(1, max_y);
//Задаём изначальное кол-во яиц
eggs=0;
//Создаём объекты яиц, в количестве 15. Класс для объекта яйцо будет написан ниже
egg[] plant(15);
//Разбрасываем яйца по полю случайным образом
for(int i=0; i plant[i].install(random(1, max_x), random(1, max_y));
//Запускаем главный цикл игры
while(true)
{
// Опрашиваем клавиатуру, и перемещаем игрока, в соответствии с нажатой клавишей, учитывая размеры игрового поля
if(key_down(KEY_LEFT) and move.elapsed>200)
{
if(x>1)
x-=1;
// Воспроизведение звука шагов
sounder.play_stationary("step"+random(1, 3)+".wav", false);
// Перезапуск таймера шагов
move.restart();
}
if(key_down(KEY_UP) and move.elapsed>200)
{
if(y y+=1;
// Воспроизведение звука шагов
sounder.play_stationary("step"+random(1, 3)+".wav", false);
// Перезапуск таймера шагов
move.restart();
}
if(key_down(KEY_RIGHT) and move.elapsed>200)
{
if(x x+=1;
// Воспроизведение звука шагов
sounder.play_stationary("step"+random(1, 3)+".wav", false); // Перезапуск таймера шагов
move.restart();
}
if(key_down(KEY_DOWN) and move.elapsed>200)
{
if(y>1)
y-=1;
// Воспроизведение звука шагов
sounder.play_stationary("step"+random(1, 3)+".wav", false);
// Перезапуск таймера шагов
move.restart();
}
//Создаём условие нажатия на клавишу энтер, чтобы посмотреть набранные яйца
if(key_pressed(KEY_RETURN))
alert("Сообщение", "Вы набрали "+eggs+" яиц");
//Делаем выход из игры по клавише escape
if(key_pressed(KEY_ESCAPE))
{
// Остановка всех звуков и уничтожение объекта sound_pool
sounder.destroy_all();
wait(5);
exit();
}
// Перебираем в цыкле массив с объектами яиц и вызываем для каждого объекта метод обновления
for(int i=0; i plant[i].update(x, y);
//Обновляем слушателя
sounder.update_listener_2d(x, y);
// Устанавливаем итерацию игрового цыкла в милисекундах
wait(5);
}
}

Класс объекта яйцо

class egg
{
//Создаём переменные координат для яйца
int x;
int y;
//Создаём переменную звука для яйца
int slot;

// В этом классе не написан конструктор, но он будет создан поумолчанию.

//Делаем функцию install, с помощью которой можно бросить яйцо на поле
void install(int i_x, int i_y)
{
this.x=i_x;
this.y=i_y;
this.slot=sounder.play_2d("egg.wav", x, y, this.x, this.y, true);
}
//Делаем функцию обработчик, которая будет всегда проверять состояние яиц на поле и игрока. Если координаты игрока равны координатам яйца, то к переменной eggs у игрока прибавляется единица, а яйцо телепортируется в случайно выбранную часть поля
void update(int px, int py)
{
//Проверяем, если координаты игрока равны координатам яйца
if(px==this.x and py==this.y)
{
//Проигрываем звук поднятия яйца
sounder.play_stationary("egg take.wav", false);
//к кол-ву яиц прибавляем единицу
eggs+=1;
//перемещаем яйцо на случайные координаты
this.x=random(1, max_x);
this.y=random(1, max_y);
//обновляем звук яйца, чтобы он прикрепился к новым координатам
sounder.update_sound_2d(this.slot, this.x, this.y);
}
}
}
Скачать архив с исходниками.
Содержание

Поделитесь с друзьями

WordPress Lessons