Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 2

Необходимо написать программу-игру, в которой ведьмак пытается убить грифона

20.03.2022, 09:25. Показов 2564. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Я недавно начал изучать JS и столкнулся с вот такой задачей, в ней у меня не получается реализовать метод changeHP. А из за него не получатся до конца решить задачу. Если не трудно помогите пожалуйста



JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Исходные данные
 
const Griffin = {
   hp: 2000,      // Жизненная энергия
   defense: 120,  // Защита
   str: 150,      // Сила
   weapon: 0      // Оружие
};
 
 
const Witcher = {
   hp: 1000,
   defense: 100,
   str: 120,
   weapon: 250,
};

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

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


Указания:

Игровой цикл реализуется с помощью бесконечного цикла.
Сообщения, выводимые в консоль, должны быть максимально информативны. Они могут содержать в себе информацию о том, сколько осталось 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.
Случайные сообщения Лютика:
Хватит валять дурака, пора уже тушить пожар в этой программе.
Говорят, грифон никогда не наступит на лежащего ведьмака.
Когда скромняга бард, отдыхал от дел, с Геральтом из Ривии, он песню эту пел...
Трус умирает сто раз. Мужественный человек – лишь однажды.
Людям для жизни необходимы три вещи: еда, питье и сплетни.



Вот мой код:
В нём скорей всего много ошибок, но я только начал изучать JS, по этому прошу отнестись с пониманием.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<script>
        const phrases = ['Хватит валять дурака, пора уже тушить пожар в этой программе', 'Говорят, грифон никогда не наступит на лежащего ведьмака.', 'Когда скромняга бард, отдыхал от дел, с Геральтом из Ривии, он песню эту пел.', 'Трус умирает сто раз. Мужественный человек – лишь однажды.', 'Людям для жизни необходимы три вещи: еда, питье и сплетни.'];
        let impactProbability = max => Math.floor(Math.random() * max + 1);
 
        const Griffin = {
            hp: 2000,     // Жизненная энергия
            defense: 120,  // Защита
            str: 150,     // Сила
            weapon: 0,    // Оружие
            changeHP: function(damage) {
                let damageDone = this.hp - damage;
                return damageDone;
            },
            griffinAttack: function() {
                let hit = impactProbability(100);
                if (hit <= 50) {
                    let damage = (this.str + this.weapon - Witcher.defense);
                    console.log('Грифон попал по ведьмаку и нанёс ' + damage + ' урона');
                    console.log('У ведьмака осталось ' + this.changeHP(damage)  + ' hp');
                } else {
                    console.log('Грифон взлетел и не стал атаковать ведьмака');
                }
            },
            getStatus: function() {
                console.log('У грифона ' + this.changeHP.damageDone + ' hp');
            },
        };
        const Witcher = {
            hp: 1000,
            defense: 100,
            str: 120,
            weapon: 250,
            changeHP: function(damage) {
                let damageDone = (this.hp - damage);
                return damageDone;
            },
            getStatus: function() {
                console.log('У ведьмака ' + this.changeHP() + ' hp');
            },
            witcherAttack: function() {
                let hit = impactProbability(100);
                if (hit <= 75) {
                    let damage = (this.str + this.weapon + Griffin.defense);
                    console.log('Ведьмак попал по грифону и нанёс ' + damage + ' урона');
                    console.log('У грифона осталось ' + this.changeHP(damage) + ' hp');
                } else {
                    console.log('Ведьмак не попал по грифону!');
                }
            },
            listenLyutik: function() {
                let phrase = phrases[Math.floor(Math.random() * phrases.length)];
                console.log(phrase);
            },
            getIgniDamage: function(max, min) {
                max = 200;
                min = 150;
                let igniDamage = Math.floor(Math.random() * (max - min) + min);
                console.log('Знак игни нанёс ' + igniDamage + ' урона грифону');
            },
        };
        while (true) {
            const answer = parseInt(prompt('Ваш ход: ' + '\n' + '1. Атаковать' + '\n' + '2. Использовать "Игни"' + '\n' + '3. Слушать Лютика' + '\n' + '4. Убежать' + '\n' + '5. Узнать сколько hp у ведьмака' + '\n' + '6. Узнать сколько hp у грифона'));
            if (answer === 1) {
                Witcher.witcherAttack();
                Griffin.griffinAttack();
                console.log('============');
            } else if (answer === 2) {
                Witcher.getIgniDamage();
                Griffin.griffinAttack();
                console.log('============');
            } else if (answer === 3) {
                Witcher.listenLyutik();
                Griffin.griffinAttack();
                console.log('============');
            } else if (answer === 4) {
                console.log('Ведьмак убежал');
                break;
            } else if (answer === 5) {
                Witcher.getStatus();
            } else if (answer === 6) {
                Griffin.getStatus();
            }
            if (Witcher.hp > 0) {
                continue;
            } else if (Griffin.hp > 0) {
                continue;
            }
            if (Witcher.hp === 0) {
                console.log('Ведьмак убит.');
                break;
            }
            if (Griffin.hp === 0) {
                console.log('Грифон убит.');
                break;
            }
            break;
        };
    </script>
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.03.2022, 09:25
Ответы с готовыми решениями:

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

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

Написать программу в которой необходимо определить каких битов больше в двоичном представлении целого значения
Написать програму в которой необходимо определить каких битов (0 или 1) больше в двоичном представлении определенного целого значения А. ...

2
 Аватар для NTHing
1782 / 963 / 388
Регистрация: 26.11.2014
Сообщений: 1,966
Записей в блоге: 1
20.03.2022, 14:34
Лучший ответ Сообщение было отмечено Danchik_2002 как решение

Решение

Так лучше..?
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
const phrases = ['Хватит валять дурака, пора уже тушить пожар в этой программе', 'Говорят, грифон никогда не наступит на лежащего ведьмака.', 'Когда скромняга бард, отдыхал от дел, с Геральтом из Ривии, он песню эту пел.', 'Трус умирает сто раз. Мужественный человек – лишь однажды.', 'Людям для жизни необходимы три вещи: еда, питье и сплетни.'];
let impactProbability = max => Math.floor(Math.random() * max + 1);
 
const Griffin = {
    hp: 2000,     // Жизненная энергия
    defense: 120,  // Защита
    str: 150,     // Сила
    weapon: 0,    // Оружие
    changeHP: function () {
        let damageDone = this.hp - this.griffinAttack();
        return damageDone;
    },
    griffinAttack: function () {
        let damage = (this.str + this.weapon - Witcher.defense);
        let hit = impactProbability(100);
        if (hit <= 50) {
            console.log('Грифон попал по ведьмаку и нанёс ' + damage + ' урона');
            console.log('У ведьмака осталось ' + this.changeHP(damage) + ' hp');
        } else {
            console.log('Грифон взлетел и не стал атаковать ведьмака');
        }
        return damage;
    },
    getStatus: function () {
        console.log('У грифона ' + this.changeHP() + ' hp');
    },
};
const Witcher = {
    hp: 1000,
    defense: 100,
    str: 120,
    weapon: 250,
    changeHP: function () {
        let damageDone = (this.hp - this.witcherAttack());
        return damageDone;
    },
    getStatus: function () {
        console.log('У ведьмака ' + this.changeHP() + ' hp');
    },
    witcherAttack: function () {
        let hit = impactProbability(100);
        let damage = (this.str + this.weapon + Griffin.defense);
        if (hit <= 75) {
            console.log('Ведьмак попал по грифону и нанёс ' + damage + ' урона');
            console.log('У грифона осталось ' + this.changeHP(damage) + ' hp');
        } else {
            console.log('Ведьмак не попал по грифону!');
        }
        return damage;
    },
    listenLyutik: function () {
        let phrase = phrases[Math.floor(Math.random() * phrases.length)];
        console.log(phrase);
    },
    getIgniDamage: function (max, min) {
        max = 200;
        min = 150;
        let igniDamage = Math.floor(Math.random() * (max - min) + min);
        console.log('Знак игни нанёс ' + igniDamage + ' урона грифону');
    },
};
while (true) {
    const answer = parseInt(prompt('Ваш ход: ' + '\n' + '1. Атаковать' + '\n' + '2. Использовать "Игни"' + '\n' + '3. Слушать Лютика' + '\n' + '4. Убежать' + '\n' + '5. Узнать сколько hp у ведьмака' + '\n' + '6. Узнать сколько hp у грифона'));
    if (answer === 1) {
        Witcher.witcherAttack();
        Griffin.griffinAttack();
        console.log('============');
    } else if (answer === 2) {
        Witcher.getIgniDamage();
        Griffin.griffinAttack();
        console.log('============');
    } else if (answer === 3) {
        Witcher.listenLyutik();
        Griffin.griffinAttack();
        console.log('============');
    } else if (answer === 4) {
        console.log('Ведьмак убежал');
        break;
    } else if (answer === 5) {
        Witcher.getStatus();
    } else if (answer === 6) {
        Griffin.getStatus();
    }
    if (Witcher.hp > 0) {
        continue;
    } else if (Griffin.hp > 0) {
        continue;
    }
    if (Witcher.hp === 0) {
        console.log('Ведьмак убит.');
        break;
    }
    if (Griffin.hp === 0) {
        console.log('Грифон убит.');
        break;
    }
    break;
};
0
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 2
20.03.2022, 15:44  [ТС]
Спасибо большое!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2022, 15:44
Помогаю со студенческими работами здесь

Написать игру “Угадай число!”. Компьютер загадывает число в определенном диапазоне, а пользователь пытается его угадать
помогите решить Написать игру “Угадай число!”. Компьютер загадывает число в определенном диапазоне, а пользователь пытается его...

Написать игру в которой имитируется бросание кубиков
Этап первый Написать игру в которой имитируется бросание кубиков игроком. Игра должна представлять собой консольное приложение. В игре 2...

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

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

написать на Pascal игру, в которой есть кораблики, соревнующиеся между собой
:idea: Привета! Задача формулировалась преподом довольно размыто, поэтому может присутствовать некоторая вольность в выполнении, что не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru