Язык программирования Python я изучаю уже часов 40-50. Это очень мало, но моя жизнь почти поделилась пополам относительно тех знаний, которые я получил за это время. Если раньше я, являясь жестким гуманитарием, слабо себе представлял процесс программирования, и не понимал даже как включить интерпретатор, чтобы начать хоть что-то писать, то теперь я уже могу сваять более менее интересную программу из собственной головы. Это ли не чудо?
Хотя в объективной реальности мой уровень программирования ниже нуля километров на 10, но ту небольшую часть усвоенного мной волшебства кодирования я решил проверить при создании интерактивной игры с элементами соревновательности. И вполне возможно, что мой опыт пригодится другим ламерам, поэтому процесс я описываю здесь.
Условия игры такие:
- Персонаж игрока будет обладать параметрами.
- Параметры будут зависеть от выбора игрока.
- С помощью этих параметров будут уничтожаться враги.
- Игра будет содержать список рекордов.
Писать код, по классике, начинаем с комментариев, после чего импортируем модуль рандома. Он нам пригодится для создания врагов.
Далее объявляем несколько переменных:
- name- будет содержать пустой список, в который попадет введенное игроком имя.
- heroes- тоже будет содержать пустой список, который будет наполняться именами чемпионов.
- mana- будет содержать количество очков магии игрока. По умолчанию ноль.
- stan- будет содержать количество очков физической силы игрока. По умолчанию тоже ноль.
- start - это переменная, которая будет отвечать за продолжение цикла, внутри которого находится основная программа. Т.е. игра будет повторена либо окончена, в зависимости от значения этой переменной.
Теперь создаем первый цикл, который будет крутить по кругу нашу игру, пока значение start не будет равно "ничему". Значение этой переменной будет присваиваться в зависимости от выбора игрока в конце игры (начать заново или выйти).
Как видите, после объявления цикла и внутри него добавлены еще несколько переменных:
- points- очки, которые будут предоставлены игроку для распределения между маной и стаминой. Их определенное количество- 50.
- schet- это счетчик побежденных врагов.
- health- количество очков жизни персонажа. Их будет 100.
Дальнейшие несколько строк будут спрашивать у игрока имя и знакомить с лором игры.
А сейчас будем удивлять игрока графикой и подарим ему 50 "небесных очков".
Напоминаю, рисунок из псевдографики у вас не получится, если вы не сделаете строку многострочной с помощью тройных кавычек.
И важный момент. Вы же не думаете, что мы сейчас напишем Skirym или Diablo? Если нет, то продолжаем.
Далее, внутри того же цикла, происходит процесс распределения очков между маной и стаминой. Игрок сам указывает, сколько очков добавить к мане. Если введенное число равно или меньше 50 (if mana <= points), из points это число вычитается. А если игрок пытается обмануть систему, вводя некорректные числа, просто обнуляем ему значение маны. Остаток очков в points присваивается стамине (stan).
Теперь, внутри того же цикла, объявляем новый цикл while, который будет генерировать битвы пока health игрока выше нуля.
Следующей строчкой после объявления цикла выводим на экран игрока значения его характеристик: жизни, маны, стамины. Так же объявляем две переменные, которые будут содержать случайные числа в диапазоне от 0 до 25. Эти переменные будут представлять значения маны и стамины врага.
Если значение маны игрока выше (if mana > man1), то из нее будет вычтено значение вражеской маны. Если же у врага маны оказалось больше, это значение будет вычтено из health. Аналогичным образом будет происходить и со стаминой. В случае, если игроку хватило своего набора очков, враг считается поверженным.
При этом счетчик schet прибавляет к себе единичку, игрок получает сообщение, какого по счету врага он уничтожил, а цикл повторяется вновь.
Рано или поздно health игрока иссякнет и в этом случае вложенный цикл оборвется. Дальше история может пойти по двум направлениям:
- Если игрок победил хотя бы трех врагов, его имя попадает в список героев, вместе с результатом, так как значения "имя" и "счет" присвоит новая переменная her, после чего методом append их добавит в список heroes. А игрок получает сообщение о своем величии, результате и отсортированный по величине счета список уже сыгравших героев (но не более 5 имен). В этот же момент у игрока запрашивается значение переменной start. Если игрок не введет никакого значения, а просто нажмет Enter, тогда первый цикл прервется и игра остановится. Если же переменная получит какое-либо значение, игра начнется вновь с самого начала.
- Но если игрок, по воле великого рандома, не смог одолеть даже трех врагов, он получает уведомление о собственной никчемности и программа останавливается.
Вот собственно и всё. Осталось передать код QA тестировщикам на поиск багов и можно выгружать в Steam. Жаль, что я немного опоздал. Вот написал бы её немного раньше, лет на 50, игра точно бы произвела фурор. Сейчас же велика вероятность, что шедевр останется недооцененным.
Кстати, можете дописать к игре свои моды, если будет желание. Никаких претензий по авторским правам не будет, обещаю. Файл с кодом уже лежит в телеграм.