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

Создание ролевой компьютерной игры 50) Переносим в Windows


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

50) Программирование ролевой игры: Продолжаем перенос в Windows

Теперь, когда пустая форма у нас запускается и весь код компилируется без проблем, возьмемся непосредственно за игровую логику.

Добавим на форму меню с одним главным разделом "Игра". В нем реализуем также всего два пункта - "Новая" (назовем этот пункт NewGameItem) и "Выход". Обработку выбора пункта "Выход" можно создать сразу, выполнив в нем, например, единственную команду закрытия формы Close, а что делать при запуске нового сеанса игры?

  // -----
  procedure TGameForm.NewGameItemClick(Sender: TObject);
  begin

  end; //

Посмотрим в исходный код модуля Main. Первые три процедуры и вспомогательные вызовы случайного генератора наверняка можно сразу вставить в данный обработчик (не забыв подключить нужные модули):

  implementation uses Map, LowLevel, Hero, Game, Monster, Combat, Magik,
  Quest;

  {$R *.dfm}

  // -----
  procedure TGameForm.NewGameItemClick(Sender: TObject);
  begin
  RealTimeFlag:= false;
  Randomize;

  MapGeneration(1);
  GenerateMonsters;
  InitHeroes;
  end; //

Кроме того, введем переменную IsGame, которая исходно, в момент создания формы, будет иметь значение false, а как только выполнится процесс начала новой игры, примет значение true. Зачем это нужно, будет ясно далее, пока лишь отметим, что так как генерация карты после открытия окна формы еще не выполнена, то любая попытка ее отобразить (а такое отображение Windows обычно делает автоматически) приведет к сбоям. Это нам и надо блокировать.

Добавим в текущий класс формы две новые переменнуе - RealTimeFlag и IsGame:

  type
    TGameForm = class(TForm)
      MainMenu1: TMainMenu;
      MainItem: TMenuItem;
      NewGameItem: TMenuItem;
      ExitGameItem: TMenuItem;
      procedure ExitGameItemClick(Sender: TObject);
      procedure NewGameItemClick(Sender: TObject);
    private
      { private declarations }
    public
      { public declarations }
      IsGame, RealTimeFlag: Boolean;
    end;

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

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

  // -----
  procedure TGameForm.FormCreate(Sender: TObject);
  begin
   IsGame:=false;
  end; //

Запустим программу и убедимся, что... она вылетает с ошибкой :) Оказывается, не инициализируется поле HeroClass в процедуре InitHero:

   ...
   MaxHP := HPLevel_Table[HeroClass,Level];

Надо этот код дополнить командой:

  ...
   HeroClass := classWarrior; // инициализируем поле HeroClass
   MaxHP := HPLevel_Table[HeroClass,Level];
   

Кстати, в этом коде, судя по всему, недоработка - выходит, что у нас всегда напарники по команде будут воинами. Можете этот момент улучшить самостоятельно.

Теперь предварительные шаги по формированию игрового мира и вызов пункта меню "Новая" выполняются корректно.

Теперь нам нужна процедура GenerateHero (генерация параметров героя-играющего) у нас реализована в модуле LowLevel и поэтому требует ручного перепрограммирования. В ней последовательно происходит выбор различных параметров и настроек героя, которые мы вполне можем представить в виде последовательных модальных окон, в каждом из которых предлагаются варианты выбора. Этим займемся в следующий раз.

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


(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-программирование


В избранное