Это итоговая большая работа по C++ для второго курса студентов Пекинского университета почты и телекоммуникаций xyg, yy и zh.
Представленные ниже классы полностью разъединены и не зависят друг от друга, достаточно включить файл hpp
в свой код. Если кто-то из студентов хочет использовать представленные ниже функции, то можно напрямую через #include "foo.hpp"
включить эти файлы в свой проект.
Например, включение классов Bird
и Controller
:
#include "flappy_bird/Bird.hpp"
Все экземпляры класса Bird
имеют уникальный идентификатор (id
), который нельзя изменить.
Bird bird;
Bird bird(0,0,1,1,'%');
Bird bird = Bird(0,0,1,1,'%');
// Параметры: x,y,w,h,symbol
Интерфейс get_*
предоставляет средства для получения соответствующих свойств экземпляра класса Bird
.
Интерфейс set_*
предоставляет средства для установки соответствующих свойств экземпляра класса Bird
.
Интерфейс operator
предоставляет средства для выполнения операций над свойствами _x
и _y
экземпляра класса Bird
.
Bird bird;
bird.add_y(1); // Опускаемся на 1 клетку
bird.add_y(-1); // Поднимаемся на 1 клетку
bird.add_x(1); // Перемещаемся вперёд на 1 клетку
bird.add_x(-1); // Перемещаемся назад на 1 клетку
Controller controller;
Controller controller('W','A','S','D');
Controller controller = Controller('W','A','S','D');
Если вы хотите использовать экземпляр класса Controller
для управления экземпляром класса Bird
, то необходимо связать их с помощью метода Controller.bind
.
Controller
может быть связан с несколькими экземплярами Bird
.Bird
с одним и тем же экземпляром Controller
, метод bind
вернёт false
, указывая на неудачную попытку связывания.Bird
может быть связан с несколькими экземплярами Controller
.#include <iostream>
Controller ctrl1;
Controller ctrl2;
Bird bird1;
Bird bird2;
// Один экземпляр Controller может быть связан с несколькими экземплярами Bird
ctrl1.bind(bird1);
ctrl1.bind(bird2);
// Один экземпляр Bird может быть связан с несколькими экземплярами Controller
ctrl1.bind(bird1);
ctrl2.bind(bird1);
// Неудачная попытка связать один экземпляр Bird с одним экземпляром Controller несколько раз
// Пример выведет «Ошибка связывания»
if (ctrl1.bind(bird1))
std::cout << «Связывание успешно» << std::endl;
else
std::cout << «Ошибка связывания» << std::endl;
Интерфейс action_*
позволяет вручную запускать действия связанного экземпляра Bird
.
Метод trigger()
отслеживает, нажаты ли клавиши, установленные в экземпляре Controller
, и запускает соответствующие действия.
#include <iostream>
Bird bird1;
Bird bird2;
Controller ctrl('W','J','D','A');
if (control1.bind(test1)) std::cout << bird1.get_id() <<":bind success" << std::endl;
if (control1.bind(test2)) std::cout << bird2.get_id() <<":bind success" << std::endl;
while (1)
{
control1.trigger();
}
Класс Rank
— это контейнерный класс, используемый для хранения рейтингов игроков. Класс Rank
всегда сохраняет упорядоченное состояние (по убыванию). Экземпляры класса Rank
всегда сохраняют данные в исходный файл при уничтожении.
Экземпляр класса Rank
становится упорядоченным перед выполнением конкретных вычислений.
Для создания экземпляра класса Rank
требуется файл JSON с определёнными данными.
Экземпляры класса Rank
сохраняют данные обратно в исходный файл JSON при уничтожении.
При создании экземпляра класса Rank
необходимо указать путь к файлу JSON.
using rank = flappy_bird::Rank;
using element = flappy_bird::element;
rank data("foo.json");
Данные файла JSON, используемые для создания экземпляров класса Rank
, должны соответствовать следующим требованиям:
"data_count" : int
, указывающий количество данных в этом экземпляре класса Rank
."1"
до "$data_count"
объектов, каждый из которых должен иметь элементы "name":string
и "score":int
.Пример допустимого содержимого файла JSON:
{
"data_count": 7,
"1": {
"name": "zzy",
"score": 190
},
"2": {
"name": "xyg",
"score": 100
},
"3": {
"name": "yy",
"score": 90
},
"4": {
"name": "xyg",
"score": 70
},
"5": {
"name": "xyg",
"score": 20
},
"6": {
"name": "crh",
"score": 10
},
"7": {
"name": "xyg",
"score": 10
}
}
Этот метод используется для добавления данных в экземпляр класса Rank
, где данные представлены типом element
.
using rank = flappy_bird::Rank;
using element = flappy_bird::element;
rank data;
// Неявное добавление
data.append({10,"xyg"});
data.append({20,"yy"});
// Явное добавление через тип element
data.append(element({100,"wkh"}));
// Цепочка добавления
data.append({10,"xyg"})
.append({20,"ycy"});
Метод dump
позволяет сериализовать экземпляр класса Rank
в фиксированном формате.
dump
имеет необязательный параметр int count
, который указывает максимальное количество элементов данных для сериализации.Rank
остаются упорядоченными.rank data("foo.json");
cout << data.dump() << endl;
cout << data.dump(5) << endl;
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )