Давайте сделаем рогалик (Суть отдыха)
Отдых, в общей механике игры, используется чтобы дать возможность персонажу исцелиться. В большинстве игр отдых требует некоторых расходов, будь то какой либо ресурс или увеличение возможности появления случайного монстра. В Подземелье Судьбы отдых будет стоить одну единицу маны и будет восстанавливать одну единицу здоровья. Первое что нужно сделать, это обновить список доступных команд, отображаемых на главном экране. Добавим к ним команду «отдыхать», привязанную к клавише «r».
dod.bas
PutText "Commands", row, col, fbYellowBright row += 2 PutText "Move:.Arrows or Numpad", row, col row += 1 PutText "?.....Help", row, col row += 1 PutText "i.....Inventory", row, col row += 1 PutText "x.....Improve Character", row, col row += 2 PutText ">.....Down Level", row, col row += 1 PutText "<.....Up Level", row, col row += 1 PutText "n.....Inspect Tile", row, col row += 1 PutText "s.....Search Area", row, col row += 1 PutText "t.....Target Enemy", row, col row += 1 PutText "c.....Cast Spell", row, col row += 1 PutText "g.....Get Item", row, col row += 1 PutText "p.....Pick Lock", row, col row += 1 PutText "b.....Bash Door", row, col row += 1 PutText "r.....Rest (1 Mana = 1 HP)", row, col
Мы добавляем проверку нажатия клавиши «r» в основной цикл программы.
dod.bas
... 'Отдых персонажа. If ckey = "r" Then RestCharacter DrawMainScreen level.MoveMonsters Endif ...
В коде обработки нажатия клавиши «r» мы вызываем подпрограмму RestCharacter — непосредственно для самого отдыха, перерисовываем экран игры и позволяем выполнить какое либо действия монстрам. Если игрок захочет отдохнуть не далеко от монстра, то это, очевидно, ничем хорошим для персонажа не закончиться.
dod.bas
'Отдых персонажа с конвертированием 1 маны в 1 здоровье. Sub RestCharacter () Dim As Integer cman, chp, thp 'Получим текущие значения маны и здоровья. cman = pchar.CurrMana chp = pchar.CurrHP thp = pchar.MaxHP 'Проверим, необходим ли персонажу отдых. If chp = thp Then PrintMessage pchar.CharName & " doesn't need to rest." Else 'Убедимся что есть мана. If cman = 0 Then PrintMessage pchar.CharName & " doesn't have any mana to spend." Else 'Уменьшим ману и увеличим здоровье. cman -= 1 pchar.CurrMana = cman chp += 1 pchar.CurrHP = chp PrintMessage pchar.CharName & " spent 1 mana for 1 health point." Endif Endif End Sub
Мы получаем текущие значения маны и здоровья персонажа. Необходимо
убедиться что здоровье у персонажа не полное (иначе отдых ему не нужен), а также
в том, что мана не закончилась. Если эти условия соблюдены, то мы вычитаем
единицу из маны и добавляем единицу к текущему здоровью персонажа.
Для того чтобы персонаж мог восстанавливать свой уровень маны, мы добавим предмет для ее восстановления «мана орб».
inv.bi
'ID еды. Enum supplyids supSupplyNone 'Не еда. supHealingHerb 'Лечебная трава, лечит 50% от максимального здоровья. supHunkMeat '25% от максимального здоровья. supBread '10% от максимального здоровья. supManaOrb '10% от максимального кол-ва маны. End Enum
Мы просто добавили еще один id для типа предметов «еда». Также нам нужно обновить подпрограмму их создания.
inv.bi:GenerateSupplies
Case supManaOrb inv.desc = "Mana Orb" inv.supply.noise = 4 inv.icon = Chr(229) inv.iconclr = fbYellowGreen inv.supply.eval = FALSE inv.supply.use = useEatDrink 'Установим магические характеристики. If isMagic = TRUE Then inv.supply.evaldr = RandomRange(currlevel, currlevel * 2) inv.supply.effect = effMaxMana inv.supply.sdesc = "Restore Mana" Else 'Установим секретное описание. inv.supply.sdesc = inv.desc Endif
Если мана орб содержит магию, то он будет восстанавливать ману до максимального значения. Последнее что нам осталось обновить, это реализацию команды «Съесть/Выпить».
dod.bas:ProcessEatDrink
... Elseif inv.supply.id = supManaOrb Then 'Восстанавливает 10% маны. pchar.CurrMana = pchar.CurrMana + (pchar.MaxMana * .1) If pchar.CurrMana > pchar.MaxMana Then pchar.CurrMana = pchar.MaxMana desc2 = " added some mana!" Endif 'Если содержит магию. If (evalstate = TRUE) And (evalDR > 0) Then 'Восстанавливает ману полностью. If pchar.CurrMana = pchar.MaxMana Then desc2 = " restored all your mana!" End If Endif Endif ...
Этот маленький раздел обрабатывает восстановление маны, если персонаж
употребляет мана орб.
Совсем небольшое обновление программы, но оно позволит нашему персонажу прожить немного дольше во враждебном мире Подземелья Судьбы.
Перевод на русский: Fantik
содержание | назад | вперед