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

Программирование с нуля - это совсем просто! 70) Инфа о герое


Информационный Канал Subscribe.Ru

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

Программирование с нуля - это совсем просто!

70) Инфа о герое

Для начала определим в модуле Map константу, определяющую допустимую близость героя к краям видимого окна:

const SCROLL_DELTA = 3;

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

Вот так запишется модифицировання процедура перемещения героя:

  procedure MoveHero( dx,dy: Integer );
  begin
  if not FreeTile( GameMap[CurMap].Cells[
  Heroes[CurHero].x+dx,Heroes[CurHero].y+dy].Tile ) then
     Exit;

  inc(Heroes[CurHero].x,dx);
  inc(Heroes[CurHero].y,dy);
  SetHeroVisible(CurHero);

  if (abs(Heroes[CurHero].x - GameMap[CurMap].LocalMapLeft) <
  SCROLL_DELTA) or
     (abs(Heroes[CurHero].y - GameMap[CurMap].LocalMapTop) <
  SCROLL_DELTA) then
     ScrollMap;
  end;

Чтобы программаработала, нам осталось реализовать процедуру прокрутки видимой части карты ScrollMap (разместим ее в модуле Map):

  procedure ScrollMap;
  begin
  GameMap[CurMap].LocalMapLeft := Heroes[CurHero].x -
  LOCAL_MAP_WIDTH div 2;
  GameMap[CurMap].LocalMapTop := Heroes[CurHero].y -
  LOCAL_MAP_HEIGHT div 2;
  end;

Здесь происходит изменение значения переменных LocalMapLeft/LocalMapTop, определяющих текущие координаты видимого окна.

Теперь программа ожила. Можно перемещать героя по доступному миру и бродить в запутанных лабиринтах между деревьями и камнями. Правда, никакие сведения о самом герое нам пока недоступны - точнее, они невидимы для пользователя. Вывод важнейшей информции о герое - обязаельное требование хороших игр. Поэтому введем в модуле LowLevel процедуру ShowHeroInfo, которую будем вызывать в конце процедуры ShowGame. Что нас может интересовать? Прежде всего уровень здоровья и опыта, а также текущие координаты на карте. На первых порах такой информации будет вполне достаточно.

Запрограммируем ShowHeroInfo следующим способом:

  procedure ShowHeroInfo(HeroNum: Integer);
  begin
  TextColor( LightGray );
  GoToXY(40, 2);
  Write(STR_HERO_HP,Heroes[HeroNum].HP, ' / ' ,Heroes[HeroNum].MaxHP);
  GoToXY(40, 3);
  Write(STR_HERO_XY,Heroes[HeroNum].x, ' , ' ,Heroes[HeroNum].y);
  end;

Здесь мы приблизились к задаче выделения строковых констант, которые можно быстро заменять, переводя на другие языки. Соообщения типа STR_HERO_HP могут содержать строки типа "Здоровье:", однако они должны быть разделены по разным национальным языкам, а также кодировкам. Все строковые константы мы будем хранить в модуле Texts, который также должен обязательно включать настройки условной компиляции {$I DEFINES.INC}.

  {$I DEFINES.INC}

  unit Texts;

  interface

  {$IFDEF RUSDOS_GAME}

  const STR_HERO_HP = ' Здор/Макс.Здор: ' ;
          STR_HERO_XY = ' Координаты: ' ;

  {$ENDIF}

  implementation

  end.

Сами строковые константы естественно должны быть выполнены в ДОС-овской кодировке. Теперь экран игры станет более дружелюбным.

Далее - Программируем монстров.

Исходный код текущей версии:

http://russianenterprisesolutions.com/sbo/download/1995.zip 3985 байтов


О программировании с нуля..

Чувствую, что надо заводить FAQ :) Письма от вас с вопросами по поводу обучения программированию проходят постоянно.

Напоминаю, что наша рассылка заработала год назад. С тех пор несколько сотен человек мне удалось обучить программированию лично - в переписке, ну и какое-то число обучилось, видимо, в стелз-режиме (не сказав и слова благодарности :). Ну и далеко уже с тех пор мы ушли, повторять этот курс снова смысла не имеет, так как основная масса подписалась в начале курса и те, кто хотел, уже давно все, что могли, из него вынесли. А кто не хотел, то и повторять для них бесполезно.

Основная проблема, конечно, связана с тем, что по мере усложнения заданий их проверка и какие-либо рекомендации занимают даже в пересчете на одного занимающегося уже заметное время. А когда каждый день приходят десятки писем?

Вот если бы каждый занимающийся перечислял бы мне например доллар в месяц, тогда бы эта схема была бы более-менее работоспособна (сколько букв "б" в этом предложении?).
Но ведь каждый рассуждает так - "пусть платят другие, а вот именно МНЕ - дозволено исключение, мне повезет и так, на халяву, и поэтому я буду ждать и посмотрю, как другие будут платить". Ну и не работают в итоге такие схемы вообще, а ведь потенциально могли бы очень много хороших изменений в жизни произвести.

Инструкция.

КАК заниматься по нашему курсу обучению программированию с нуля без меня :)

Читаете рассылку, начиная с первого выпуска, и делаете задания. Это очевидно.

Проблемы начинаются, когда что-то не получается. Решение здесь такое:

а) Смотрите вперед несколько выпусков - обычно сложные для понимания места вызывали много писем, и потом проблема рассматривалась более подробно.
б) Если ответа в рассылке нету, обращаетесь на сайат http://srt.starinet.com/begin/ , в форум. Ждете несколько дней и получаете ответ.
в) Если опять не поняли - спрашиваете повторно, уточняете свой вопрос. Так ТРИ раза минимум.
г) Все равно не поняли :) Возможно, проблема в том, что ваш интеллект просто не тренирован :) Если в школе вы ленились логически думать, а задачи по математике списывали у соседа (хотя уровень десятого класса - это простейшие АЗЫ логического мышления), то непонимание программирования связано только с неразвитостью соответстсующих областей вашего мозга. Тренировка, тренировка и еще раз тренировка. Берете учебник по алгебре - и вперед.
д) Если предыдущие пункты не сработали, пишете мне.

Что в письме НАДО указать. Ни при каких условиях в переписку по базовому курсу я не вступаю, если это НАДО вы не выполнили.

0) В заголовке письма пишете: "Вопрос по базовому курсу программирования"

В теле письма, вежливо и уважительно :) , указываете:
а) Как вас зовут (не кличку!), сколько вам лет и чем вы занимаетесь.
б) Выпуск, в котором вы что-то не поняли, и какие выпуски вы смотрели, чтобы найти продолжение.
в) Ссылку на ваш вопрос в форуме, где вы просили помощи не менее ТРЕХ раз.
г) Содержание непонятого вами выпуска - точно указываете строчку и слово, на котором ваше понимание остановилось.
И что конкретно в этом предложении вы не понимаете.

Это важно! Если вы пропускаете какое-то слово, без понимания, его смысла, то дальше это непонимание лишь накопится.

Если вы выполняете эти действия, то я ГАРАНТИРУЮ, что вы обучитесь программированию. То есть если вы хотите учиться, длительно и напряженно :) , на протяжении многих месяцев, каждый день по нескольку часов - то и учитесь на доброе здоровье. Но если говорить человеку - возьми две спички и сложи с тремя, и получишь пять - а он отвечает "пытаюсь, не могу" - тут я бессилен :)

Остается тогда, как единственный выход - развитие ума с, фактически, нуля :) - учебник по алгебре - а еще лучше - Сканави :-)


(c) 2004-2005 Сергей Бобровский bobrovsky@russianenterprisesolutions.com

Школа программирования с нуля
Все предыдущие выпуски базового курса тут:
http://russianenterprisesolutions.com/sbo/

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


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.prognull
Отписаться
Вспомнить пароль

В избранное