Программирование с нуля - это совсем просто! 149) Программирование ролевой игры: Квесты-5
Школа программирования
149) Программирование ролевой игры: Квесты-5
Последний выпуск по этой теме был N 144.
Следующий этап, после того, как монстр уничтожен - возвращение к мирному персонажу, отчет и получение приза. Для этого необходимо отследить в процедуре CallQuest, является ли текущее обращение одного персонажа к другому запросом нового квеста, или же попыткой сообщить, что задание выполнено.
{ ----------------- } procedure CallQuest(hn, mn: Integer); var i,n: Integer; begin
n := 0; for i := 1 to MaxQuests do if Quests[i].MainInd = mn then begin if QuestFinished(i) then ShowInfo(STR_QFIN) else ShowInfo(STR_QIS);
Exit end;
...
Текстовая константа:
STR_QFIN = ' Квест выполнен! ' ;
Функция QuestFinished выполнит проверку завершенности i-го квеста, выдаст премию, после чего квест будет удален. Отметим, что в такой схеме премию получит не обязательно тот персонаж, который выполнял задание, а тот, который сообщил об этом. Такую особенность можно отнести к оригинальной идее игры (как говорят программисты, "это не баг, а фича") - появляется возможность "прокачки" конкретного героя, а остальные будут работать на него без наград.
{ ----------------- } function QuestFinished(i: Integer): Boolean; var n: Integer; begin
QuestFinished := false;
case Quests[i].QType of
qKillTarget: begin if Monsters[ Quests[i].TargetId ].HP <= 0 then begin
QuestFinished := true;
Quests[i].MainInd := 0;
Quests[i].TargetId := 0;
n := GetMoneyNo(Heroes[CurHero]); if n > 0 then
inc( Heroes[CurHero].Items[n].Ints[intMoney],
Quests[i].Money )
else if n < 0 then begin
Heroes[CurHero].Items[-n] := ItemTypes[8];
Heroes[CurHero].Items[-n].Ints[intMoney] :=
Quests[i].Money; end;
IncXP( Heroes[CurHero],Quests[i].XP ); end; end;
end;
Пока в ней анализируется лишь один тип квеста - уничтожение монстров. Если целевой монстр уничтожен, то герою просто добавляются деньги и опыт, а соответствующий элемент Quests "обнуляется" - в поля, которые мы используем как признаки свободного квеста, запишем нули.
Еще одна важная вещь - это возможность удаления какого-то ранее принятого квеста. Ведь это может произойти вследствие случайного столкновения с мирным персонажем, или окажется, что некоторый квест выполнить сложно или невозможно (монстр находится в ловушке между непроходимыми тайлами).
Пусть некоторый квест будет удален, если игрок в процедуре ShowJournal просто введет его номер. Если же указан ноль, то процедура закрывается.
{ ----------------- } procedure ShowJournal; var i,n: Integer;
s: string; begin while true do begin
ClrScr;
GoToXY(1,2); for i := 1 to MaxQuests do if Quests[i].MainInd>0 then begin
WriteLn(i, ' ) ' ,GenerateQuestDescr(i)); end;
ReadLn(n);
if n in [1..MaxQuests] then begin
Quests[n].MainInd := 0;
Quests[n].TargetId := 0; end else Exit end;
Бесконечный цикл введен здесь для того, чтобы после удаления квеста экран не закрывался, а перерисовывался с новыми значениями (точнее, без удаленных квестов).
Далее - реализуем квест с доставкой предмета.
Исходный код текущей версии для Turbo Pascal (всегда проверен и работоспособен, главный файл - main.pas):
Все эти учебные курсы рассчитаны не только на разработчиков, но и на всех тех, кто хочет стать ИТ-менеджером. Для этого как минимум нужно иметь общее представление о современных технологиях разработки и их истории и владеть соответствующей терминологией.
В книгах описаны десятки технологий, каждой из которых посвящены отдельные книги. Таким образом, купив один учебный курс, вы существенно сэкономите :) В книгах полностью описаны:
- Delphi (версия 2006, полностью совместимая с Turbo Delphi) для обеих платформ - Win32 и .NET;
- C# (новый язык Microsoft, на котором базируется платформа .NET и все новые версии Windows);
- C++ для платформы Win32.
Охвачены также темы работы с файлами на этих платформах, создания файл-серверных, клиент-серверных, распределенных приложений, веб-программ (Indy, ASP.NET, веб-сервисы). Описаны языки SQL и OCL. Немало глав посвящены истории программирования и различных технологий. Особое внимание уделено созданию программ с помощью технологии ECO и языка моделирования UML - программы фактически рисуются, и теперь даже для создания корпоративных приложений и их переноса в Интернет не обязательно знать программирование!
Отдельная часть отведена технологиям организации групповой работы, управления требованиями, контроля версий, локализации и тестирования.
Тут подробнее про книги.