Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Создание ролевой компьютерной игры 51) Генерация героя в Windows


Школа программирования

51) Генерация героя в Windows

Очередной шаг - переделка процедуры GenerateHero, которая у нас реализована в модуле LowLevel и поэтому требует ручного перепрограммирования. В ней последовательно происходит выбор различных параметров и настроек героя, которые мы вполне можем представить в виде последовательных модальных окон, в каждом из которых предлагаются варианты выбора. Поступим так с расой и классом героя - создадим в рамках текущего проекта новую форму RCForm и разместим на ней две группы переключателей TRadioGroup (раса, RaceGroup и класс, ClassGroup), а также поле ввода имени героя nameEdit:

Вызов этой процедуры поместим в процедуру GenerateHero (которую в свою очередь будем вызывать в обработчике меню следом за ранее упомянутым кодом):

  { ----------------- }
  procedure GenerateHero;
  begin
   RCForm.ShowModal;
  end;

К списку используемых модулей в LowLevel подключим модуль формы генерации:

    implementation uses Hero, Game, Tables, Magik, Quest,
    {$IFDEF DOS_GAME}
            CRT,
    {$ENDIF}
    {$IFDEF WIN_GAME}
            RCUnit,
    {$ENDIF}
            Texts;

Так как перечеслимые типы представляют собой фактически целый тип, можем сразу записать прямое отображение выбранных элементов групп переключателей в соответствующие переменные:

  RCForm.ShowModal;
  Heroes[CurHero].Race := RCForm.RaceGroup.ItemIndex+1;
  Heroes[CurHero].HeroClass := RCForm.ClassGroup.ItemIndex+1;
  Heroes[CurHero].Name := RCForm.nameEdit.Text;

Последующий код можно оставить без изменений, из прежней версии данной процедуры, так как других обращений к интерфейсным элементам в нем уже не происходит.

  { ----------------- }
  procedure GenerateHero;
  var i: Integer;
  begin

  RCForm.ShowModal;

  Heroes[CurHero].Race := RCForm.RaceGroup.ItemIndex+1;
  Heroes[CurHero].HeroClass := RCForm.ClassGroup.ItemIndex+1;
  Heroes[CurHero].Name := RCForm.nameEdit.Text;

  for i := chrSTR to chrCHA do
    Heroes[CurHero].Chars[i] :=
        Race_Table[ Heroes[CurHero].Race, i, 1 ] +
        random(Race_Table[ Heroes[CurHero].Race, i, 2 ])+1;

  for i := skillMin to skillMax do
    Heroes[CurHero].Skills[i] :=
        ClassSkill_Table[ i, Heroes[CurHero].HeroClass, 1 ] +
        random(ClassSkill_Table[ i, Heroes[CurHero].HeroClass, 2 ])+1;

  if Heroes[CurHero].HeroClass = classRanger then
     begin
     Heroes[CurHero].Items[1] := ItemTypes[6];
     Heroes[CurHero].Items[1].Ints[intRangedAmmo] := 10;
     end;

  with Heroes[CurHero] do
    begin
    MaxHP := HPLevel_Table[HeroClass,Level];
    HP := MaxHP;
    Mana := ManaLevel_Table[HeroClass,Level];
    MaxMana := Mana;
    Exp := 0;
    MaxExp := ExpLevel_Table[Level];
    VisLong := 2;
    end;

  for i := 2 to MaxHeroes do
    begin
    Heroes[i] := Heroes[1];
    SetHeroVisible(i);
    end;

  SetHeroVisible(CurHero);

  end;

Саму процедуру генерации добавим в обработчик выбора пункта меню "Новая игра":

  // новая игра --
  procedure TGameForm.NewGameItemClick(Sender: TObject);
  begin
   RealTimeFlag:= false;
   Randomize;

   MapGeneration(1);
   GenerateMonsters;
   InitHeroes;
   IsGame:=true;

   GenerateHero;
  end; //

Теперь при выборе соответствующего пункта меню будет появляться диалог первичной генерации.

Далее в управляющем коде процедуры Main следует основной цикл, который начинается с вызова функции ShowGame - ключевой в процессе отображения карты на экран. Но на самом деле она будет работать автоматически, а нам потребуется лишь запрограммировать несколько низкоуревневых процедур модуля LowLevel, занимающихся выводом и отображением конкретных ячеек игрового поля. Этим займемся в следующий раз.

Текущий исходный код проекта (для Дельфи 7), всегда проверен и работоспособен:
d050707.zip , 22 kb

Кроме того, подкорректированы мелкие ошибочки для текстовой версии, ее исходники:
050707.zip , 19285 b


(c) 2004-2007 Сергей Бобровский : bo собака russianenterprisesolutions.com

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/

Неофициальный сайт поддержки (со срочными вопросами - сюда):
www.prog-begin.net.ru.


Мои книги (учебные курсы) "Технологии Delphi / C++ / C#. Разработка приложений для бизнеса".
http://shop.piter.com/display.phtml?a_id=17681&web_ok=all

Все эти учебные курсы рассчитаны не только на разработчиков, но и на всех тех, кто хочет стать ИТ-менеджером. Для этого как минимум нужно иметь общее представление о современных технологиях разработки и их истории и владеть соответствующей терминологией. Именно это мои книги и дают.
В учебных курсах описаны десятки технологий, каждой из которых посвящены отдельные книги. Таким образом, купив один учебный курс, вы существенно сэкономите :) В книгах полностью описаны:
- Delphi (версия 2006, полностью совместимая с Delphi 2005/2006/2007 и Turbo Delphi) для обеих платформ - Win32 и .NET;
- C# (новый язык Microsoft, на котором базируется платформа .NET и все новые версии Windows);
- C++ для платформы Win32.
Охвачены также темы работы с файлами на этих платформах, создания файл-серверных, клиент-серверных, распределенных приложений, веб-программ (Indy, ASP.NET, веб-сервисы). Описаны языки SQL и OCL. Немало глав посвящены истории программирования и различных технологий. Особое внимание уделено созданию программ с помощью технологии ECO и языка моделирования UML - программы фактически рисуются, и теперь даже для создания корпоративных приложений и их переноса в Интернет не обязательно знать программирование!
Отдельная часть отведена технологиям организации групповой работы, управления требованиями, контроля версий, локализации и тестирования.
Тут подробнее про книги.

Мои книги, которые пока доступны в продаже:


Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное