Портирование Mobile Basic игры на MIDlet Pascal. Пишем код
от Витаминыч
ПредисловиеЭто был черновик статьи от 2017 года
Рабочий код с той поры уже изменился, т.к. код из единого файла я начал разносить по модулям. Благо, остался репозиторий. Статья будет дополняться. Пока же публикую в том виде, в котором она была в 2017.
- Портирование Mobile Basic игры на MIDlet Pascal. Начало
И снова здравствуйтеС момента написания прошлой статьи я всё думал, как бы поменьше написать текста, но при этом ничего важного (на мой взгляд) не упустить. Ничего не придумал, да и думать лень, потому приступим к написанию кода непосредственно на MIDlet Pascal. Привожу полный листинг на МВ, рекомендую открыть его и просматривать.
LoW.txt
В прошлый раз я хотел дополнить статью фотографиями тех самых распечаток с пометками, но мне было тупо лень искать их я их где-то потерял Так что попробуйте сами представить, что, где и почему. Не стесняйтесь предлагать свои варианты реализации в комментарии, ибо я тот еще архитектор, @Helltar не даст соврать Поехали!
Загрузка ресурсов. Переменные и константыНадеюсь, основы МР вы знаете, ибо я объяснять их не собираюсь (забыл всё, гГ).
Реализуем вспомогательную процедуру - CLS.
И конечно же, я забыл про переменные!
Далее я буду просто приводить участки кода на МВ и МР
Загрузка картинок для сплеш экранов. Здесь все просто. Разве что непонятно, откуда взялись еще файлы - это добавлен еще один splash (мой) и иконка игры (используется на экране 'Об игре').
Константы. Лучше вынести все в файлы ресурсов и циклом считывать в соответствующие массивы. Пока для удобства все строки представил как константы, чтобы не искать текст среди кода.
нет, все это никогда не будет переписано на рфо ява4андроид
Рабочий код с той поры уже изменился, т.к. код из единого файла я начал разносить по модулям. Благо, остался репозиторий. Статья будет дополняться. Пока же публикую в том виде, в котором она была в 2017.
- Портирование Mobile Basic игры на MIDlet Pascal. Начало
И снова здравствуйтеС момента написания прошлой статьи я всё думал, как бы поменьше написать текста, но при этом ничего важного (на мой взгляд) не упустить. Ничего не придумал, да и думать лень, потому приступим к написанию кода непосредственно на MIDlet Pascal. Привожу полный листинг на МВ, рекомендую открыть его и просматривать.
LoW.txt
В прошлый раз я хотел дополнить статью фотографиями тех самых распечаток с пометками, но мне было тупо лень искать их я их где-то потерял Так что попробуйте сами представить, что, где и почему. Не стесняйтесь предлагать свои варианты реализации в комментарии, ибо я тот еще архитектор, @Helltar не даст соврать Поехали!
Загрузка ресурсов. Переменные и константыНадеюсь, основы МР вы знаете, ибо я объяснять их не собираюсь (забыл всё, гГ).
- program LoW;
- var
- scrW, scrH: integer;
- begin
- // super hard code
- end.
- procedure Cls;
- begin
- SetColor(255, 255, 255);
- FillRect(0, 0, scrW, scrH);
- Repaint;
- end;
- var
- // Серебро Медь Доспехи Оружие Ноги Голова
- silverCoins, copperCoins, lvlOfArmor, lvlOfWeapon, lvlOfShoes, lvlOfHealmet: integer;
- // Дерево Железо Еда
- wood, iron, meat: integer;
- // Лвл Опыт След.лвл
- level, exp, nextLvl: integer;
- // Флаги квестов Магические навыки
- bQuest1, bQuest2, bQuest3, bQuest4, bMag1, bMag2, bMag3: integer;
- // DEF= +DOD +DSP +DSL +OB(своя защита)
- totalProtect, bodyProtect, footProtect, headProtect, personalProtect: integer;
- // ATK=SILA +WN(Урон_оружия)
- attack, power, damag, i: integer;
- // Вместо OR$ и т.д. юзается массив
- arShmot: array [0..3] of string;
- // Аналогично, пункты выбора и т.д. (для отрисовки)
- arMenu: array [0..3] of string;
- arRasa: array [0..8] of string;
- arClas: array [0..8] of string;
- arLoca: array [0..2] of string;
- arVrid: array [0..5] of string;
- arHero: array [0..4] of string;
- arTave: array [0..2] of string;
- arTrad: array [0..5] of string;
- arMags: array [0..3] of string;
- arAren: array [0..8] of string;
- arMagic: array [0..3] of string;
- arHara: array [0..9] of string;
- //arVesh: array [0..3] of string;
- arItem: array [0..10] of integer;
- arImage: array [0..2] of image;
- cmdGo, cmdClick: command;
- life, fullLife, mana, fullMana, iLand, iVrid, iHero, itemMenu: integer;
- enemyDamage, enemyFullDamage, enemyLife, enemyFullLife, enemyID, expEnemy, enemyGold: integer;
- enemyName: string;
- scrW, scrH, xPosIc, yPosIc: integer;
- sPreText, sRasa, sClas, sOryzh, sFoot, sHead, sBody: string;
- iTextH, rndDrop: integer;
- rs: recordStore;
- arIndex: array [0..30] of integer;
- 1 GELLOAD "logo","logo2.png"
- 2 DRAWGEL "logo",0,0: SLEEP 3500: CLS : GOTO 10
- procedure ResLoading;
- begin
- for i := 0 to 2 do
- begin
- arImage[i] := loadImage('/' + i + '.png');
- end;
- end;
- const
- MENU = 'Legends of Warriors';
- RASA = 'Выбери расу';
- CLAS = 'Выбери класс';
- LOCA = 'Местность';
- VRID = 'Вридорг';
- HERO = 'Герой';
- TAVE = 'Таверна';
- TRAD = 'Торговец';
- MAGS = 'Магистр';
- AREN = 'Арена';
- MAGI = 'Выбор умения';
- BACK = 'Назад';
- //--------------
- MENU0 = 'Новая игра';
- MENU1 = 'Продолжить';
- MENU2 = 'Об игре';
- MENU3 = 'Выход';
- //--------------
- RASA0 = 'Человек';
- RASA1 = 'Эльф';
- RASA2 = 'Орк';
- RASA3 = 'Мертвец';
- RASA4 = 'Гном';
- RASA5 = 'Мутант';
- RASA6 = 'Северный человек';
- RASA7 = 'Пещерный орк';
- //--------------
- CLAS0 = 'Воин';
- CLAS1 = 'Рыцарь';
- CLAS2 = 'Маг';
- CLAS3 = 'Паладин';
- CLAS4 = 'Мастер';
- CLAS5 = 'Магистр';
- CLAS6 = 'Некромант';
- CLAS7 = 'Красный маг';
- //--------------
- LOCA0 = 'Вридорг';
- LOCA1 = 'Катакомбы';
- LOCA2 = 'Развалины';
- //--------------
- VRID0 = 'Твой герой';
- VRID1 = 'Таверна';
- VRID2 = 'Торговец';
- VRID3 = 'Магистр магии';
- VRID4 = 'Арена';
- //--------------
- HERO0 = 'Характеристики';
- HERO1 = 'Вещи';
- HERO2 = 'Ресурсы';
- HERO3 = 'Спальный мешок';
- //--------------
- TAVE0 = 'Поесть (10 m)';
- TAVE1 = 'Работа';
- //--------------
- TRAD0 = 'Оружие';
- TRAD1 = 'Доспехи';
- TRAD2 = 'Сапоги';
- TRAD3 = 'Шлемы';
- TRAD4 = 'Работа';
- //--------------
- MAGS0 = 'Обмен денег';
- MAGS1 = 'Магия';
- MAGS2 = 'Медитация';
- //--------------
- AREN0 = 'Крыса';
- AREN1 = 'Гоблин';
- AREN2 = 'Скелет';
- AREN3 = 'Огрол';
- AREN4 = 'Вервольф';
- AREN5 = 'Троль';
- AREN6 = 'Великан';
- AREN7 = 'Дракон';
- //--------------
- MAGI0 = 'Фаербол';
- MAGI1 = 'Лечение';
- MAGI2 = 'Проклятие';
- //--------------
- HARA0 = 'Здоровье: ';
- HARA1 = 'Мана: ';
- HARA2 = 'Атака: ';
- HARA3 = 'Защита: ';
- HARA4 = 'Уровень: ';
- HARA5 = 'Опыт: ';
- HARA6 = 'Раса: ';
- HARA7 = 'Серебро: ';
- HARA8 = 'медяки: ';
- HARA9 = 'Класс: ';
- //--------------
- VESH0 = 'Оружие: ';
- VESH1 = 'Броня: ';
- VESH2 = 'Шлем: ';
- VESH3 = 'Обувь: ';
- //--------------
- RESY0 = 'Древесина: ';
- RESY1 = 'Железо: ';
- RESY2 = 'Еда: ';
- // Сообщения НПС, текст
- ABOUT =
- 'Автор Vapigor. Сохранение в спальном мешке.';
- START1 = 'Вы прибыли в Вридорг в поисках работы. Хорошенько осмотритесь.';
- POEL0 = 'Заплатив 10 монет, ты неплохо подкрепился';
- POEL1 = 'Бесплатно не кормлю!';
- NOEDA0 = 'Хь, принеси мне 10 кусков мяса, получишь монет';
- NOEDA1 = 'Спасибо, держи деньги. Принеси еще';
- NOEDA2 = 'Я жду мясо...';
- NOZHE0 =
- 'За 30 слитков железа получишь лучший меч, его нигде не купишь';
- NOZHE1 = 'Всего лишь 30 слитков и меч твой';
- NOZHE2 = 'Как и договаривались, держи меч!';
- NOMAG =
- 'Ты слишком слаб, чтобы изучать магию. Прокачайся';
- SOHR = 'Ты медитируешь';
- SONMSG = 'Ты спишь, жди.';
- NODER0 = 'Гоблин: принеси мне 20 дерева, дам серебро';
- NODER1 = '1 серебр. монета за 20 древесины';
- NODER2 = 'Спасибо, принеси еще, я заплачу';
- MUDR0 =
- 'Мудрец: Я дам тебе сапоги, если отгадаешь загадку';
- MUDR1 = 'Имя захватчика Вридорга в Fantasy Reign 1 от Vapigor?';
- MUDR2 = 'Не угадал, удача прошла мимо';
- MUDR3 =
- 'Ты неплохо знаешь историю Тиверна, держи сапоги';
- MUDR4 = 'Мудрец молчит...';
нет, все это никогда не будет переписано на рфо ява4андроид