Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ведьмак против Гриффина (https://javascript.ru/forum/misc/82984-vedmak-protiv-griffina.html)

Logitech228 21.08.2021 09:21

Ведьмак против Гриффина
 
Исходные данные:

const Griffin = {

hp: 2000, // Жизненная энергия

defense: 120, // Защита

str: 150, // Сила

weapon: 0 // Оружие

};

const Witcher = {

hp: 1000,

defense: 100,

str: 120,

weapon: 250,

};

Цель задания:

Необходимо написать программу-игру, в которой ведьмак пытается убить грифона и информация о битве выводится в консоль. Исходные данные ведьмака и грифона указаны выше, и их можно изменять по своему желанию для проверки тех или иных ветвлений в программе.

Терминология:

HP - жизненная энергия (Health Points)

Указания:

Игровой цикл реализуется с помощью бесконечного цикла.

Сообщения, выводимые в консоль, должны быть максимально информативны. Они могут содержать в себе информацию о том, сколько осталось HP у грифона, у ведьмака, сколько было нанесено урона, и так далее.
Можно использовать разделители (строки типа "============"), чтоб было понятно, когда закончился один ход и начался следующий.

Уровень 1

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

Алгоритм игры на данном этапе следующий:

Игровой цикл:

Ведьмак пытается попасть по грифону.
Вероятность успеха: 75%.
Если ведьмак попал:

Рассчитывается урон из формулы:
урон = сила ведьмака + оружие ведьмака - защита грифона
У грифона отнимается здоровье, равное нанесенному урону с помощью метода changeHP (см. ниже указания).
Отображается сообщение о нанесенном уроне и оставшейся HP грифона.

Если ведьмак не попал:

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

Если у грифона больше нет жизненной энергии:

Отобразить сообщение, что ведьмак победил.
Выйти из игрового цикла.

Указания:

Для вывода информации о ведьмаке и грифоне, реализовать у них методы getStatus, которые должны возвращать сводную информацию в произвольном виде.
Пример:

> Witcher.getStatus();
< Witcher: 850 HP

> Griffin.getStatus();
< Griffin: 1250 HP

Реализовать метод changeHP у ведьмака и грифона, который будет принимать один аргумент - количество HP, которое нужно отнять. Этот метод надо написать так, чтобы количество HP не могло стать меньше нуля.

Уровень 2

Добавить ход грифона.

Ход грифона производится после хода ведьмака и проверки на то, что у грифона число HP не упало до нуля.

Грифон может делать одно из двух действий (с одинаковым шансом):

Атаковать:

Урон рассчитывается из формулы
урон = сила грифона + оружие грифона - защита ведьмака
Нанесенный урон вычитается из здоровья ведьмака
Вывести сообщение о нанесенном уроне и оставшейся HP ведьмака

Летать:

Вывести сообщение о том, что грифон не стал атаковать ведьмака.

Затем, в основной цикл после действия грифона добавить:

Проверять, если у ведьмака закончилась жизненная энергия:

Вывести сообщение о том, что ведьмак проиграл.
Выйти из игрового цикла

Указания:

Вынести действия ведьмака и грифона в отдельные функции.
Использовать метод changeHP для изменения здоровья ведьмака.
Использовать метод getStatus для отображения здоровья ведьмака.

Уровень 3

Добавить возможность выбирать игроку (с помощью prompt), что ведьмак будет делать:

Атаковать (в этом случае производятся все действия, как и в 1-м уровне задания) (то есть, с 75% шансом он может попасть, а может не попасть, и т.п.)
Использовать знак "Игни". При этом, ведьмак наносит урон грифону, который рассчитывается с помощью метода getIgniDamage (см. ниже). "Промахнуться" при этом нельзя. После вызова метода, нанести полученное значение урона грифону с помощью changeHP, а затем вывести два значения - сколько урона нанесено и информацию о жизненной энергии грифона.
Слушать Лютика. При этом, ведьмак не атакует, а в консоль выводится одно случайное сообщение из массива (см. ниже)
Убежать. При этом игра заканчивается, отобразить в консоли сообщение, а также информацию о жизненной энергии ведьмака и грифона.

Указания:

Выбор действия нужно сделать с помощью prompt, который принимает числовые значения (например, 1 - атаковать, 2 - знак "Игни", и т.п.) Если значение не совпало ни с одним действием, спросить игрока заново.
Во всех случаях, даже если ведьмак выбрал пункт "Слушать Лютика", после действия ведьмака должно происходить действие грифона, как описано во втором уровне этого задания. То есть, вы улучшаете только ход ведьмака, грифон же по-прежнему на каждом ходе действует автоматически.

Создать метод getIgniDamage, который возвращает случайное число от 150 до 200.
Случайные сообщения Лютика:

Хватит валять дурака, пора уже тушить пожар в этой программе.
Говорят, грифон никогда не наступит на лежащего ведьмака.
Когда скромняга бард, отдыхал от дел, с Геральтом из Ривии, он песню эту пел...
Трус умирает сто раз. Мужественный человек – лишь однажды.
Людям для жизни необходимы три вещи: еда, питье и сплетни.

Rise 21.08.2021 10:06

Logitech228,
Не знаешь что такое цикл и консоль или что?


Часовой пояс GMT +3, время: 14:10.