Найти тему
Bednyakov

Python с нуля. Я создал RPG?

Язык программирования Python я изучаю уже часов 40-50. Это очень мало, но моя жизнь почти поделилась пополам относительно тех знаний, которые я получил за это время. Если раньше я, являясь жестким гуманитарием, слабо себе представлял процесс программирования, и не понимал даже как включить интерпретатор, чтобы начать хоть что-то писать, то теперь я уже могу сваять более менее интересную программу из собственной головы. Это ли не чудо?

Хотя в объективной реальности мой уровень программирования ниже нуля километров на 10, но ту небольшую часть усвоенного мной волшебства кодирования я решил проверить при создании интерактивной игры с элементами соревновательности. И вполне возможно, что мой опыт пригодится другим ламерам, поэтому процесс я описываю здесь.

Условия игры такие:

  • Персонаж игрока будет обладать параметрами.
  • Параметры будут зависеть от выбора игрока.
  • С помощью этих параметров будут уничтожаться враги.
  • Игра будет содержать список рекордов.

Писать код, по классике, начинаем с комментариев, после чего импортируем модуль рандома. Он нам пригодится для создания врагов.

-2

Далее объявляем несколько переменных:

  • name- будет содержать пустой список, в который попадет введенное игроком имя.
  • heroes- тоже будет содержать пустой список, который будет наполняться именами чемпионов.
  • mana- будет содержать количество очков магии игрока. По умолчанию ноль.
  • stan- будет содержать количество очков физической силы игрока. По умолчанию тоже ноль.
  • start - это переменная, которая будет отвечать за продолжение цикла, внутри которого находится основная программа. Т.е. игра будет повторена либо окончена, в зависимости от значения этой переменной.
-3

Теперь создаем первый цикл, который будет крутить по кругу нашу игру, пока значение start не будет равно "ничему". Значение этой переменной будет присваиваться в зависимости от выбора игрока в конце игры (начать заново или выйти).

-4

Как видите, после объявления цикла и внутри него добавлены еще несколько переменных:

  • points- очки, которые будут предоставлены игроку для распределения между маной и стаминой. Их определенное количество- 50.
  • schet- это счетчик побежденных врагов.
  • health- количество очков жизни персонажа. Их будет 100.

Дальнейшие несколько строк будут спрашивать у игрока имя и знакомить с лором игры.

-5

А сейчас будем удивлять игрока графикой и подарим ему 50 "небесных очков".

-6

Напоминаю, рисунок из псевдографики у вас не получится, если вы не сделаете строку многострочной с помощью тройных кавычек.

И важный момент. Вы же не думаете, что мы сейчас напишем Skirym или Diablo? Если нет, то продолжаем.

Далее, внутри того же цикла, происходит процесс распределения очков между маной и стаминой. Игрок сам указывает, сколько очков добавить к мане. Если введенное число равно или меньше 50 (if mana <= points), из points это число вычитается. А если игрок пытается обмануть систему, вводя некорректные числа, просто обнуляем ему значение маны. Остаток очков в points присваивается стамине (stan).

-7

Теперь, внутри того же цикла, объявляем новый цикл while, который будет генерировать битвы пока health игрока выше нуля.

-8

Следующей строчкой после объявления цикла выводим на экран игрока значения его характеристик: жизни, маны, стамины. Так же объявляем две переменные, которые будут содержать случайные числа в диапазоне от 0 до 25. Эти переменные будут представлять значения маны и стамины врага.

Если значение маны игрока выше (if mana > man1), то из нее будет вычтено значение вражеской маны. Если же у врага маны оказалось больше, это значение будет вычтено из health. Аналогичным образом будет происходить и со стаминой. В случае, если игроку хватило своего набора очков, враг считается поверженным.

При этом счетчик schet прибавляет к себе единичку, игрок получает сообщение, какого по счету врага он уничтожил, а цикл повторяется вновь.

-9

Рано или поздно health игрока иссякнет и в этом случае вложенный цикл оборвется. Дальше история может пойти по двум направлениям:

  1. Если игрок победил хотя бы трех врагов, его имя попадает в список героев, вместе с результатом, так как значения "имя" и "счет" присвоит новая переменная her, после чего методом append их добавит в список heroes. А игрок получает сообщение о своем величии, результате и отсортированный по величине счета список уже сыгравших героев (но не более 5 имен). В этот же момент у игрока запрашивается значение переменной start. Если игрок не введет никакого значения, а просто нажмет Enter, тогда первый цикл прервется и игра остановится. Если же переменная получит какое-либо значение, игра начнется вновь с самого начала.
  2. Но если игрок, по воле великого рандома, не смог одолеть даже трех врагов, он получает уведомление о собственной никчемности и программа останавливается.
-10

Вот собственно и всё. Осталось передать код QA тестировщикам на поиск багов и можно выгружать в Steam. Жаль, что я немного опоздал. Вот написал бы её немного раньше, лет на 50, игра точно бы произвела фурор. Сейчас же велика вероятность, что шедевр останется недооцененным.

Кстати, можете дописать к игре свои моды, если будет желание. Никаких претензий по авторским правам не будет, обещаю. Файл с кодом уже лежит в телеграм.

Пример работы программы
Пример работы программы