Camp 418

Telegram

Базовый NodeJS - Подготовительный этап

Вступление. К прочтению обязательно.

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

"Самостоятельная подготовка" не значит, что вы обязаны делать задания молча стиснув зубы и ни у кого не спрашивая совета. Мы с радостью ответим на все вопросы в чате, более того, чтобы стать лучше, нам нужны ваши вопросы.

Если

  • что-то непонятно в процессе изучения
  • что-то кажется слишком сложным
  • что-то хотелось бы добавить или наоборот убрать

Не раздумывая пишите в чат. Этим вы сильно поможете нам, а также тем, кто обучается вместе с вами и тем, кто будет обучаться после вас.


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

Проект 1. Быки и коровы

Компьютер загадывает число из нескольких различающихся цифр (от 3 до 6). Игроку дается несколько попыток на то, чтобы угадать это число.

После каждой попытки компьютер сообщает количество совпавших цифр стоящих не на своих местах, а также количество правильных цифр на своих местах.

Например загаданное число: 56478 предположение игрока: 52976

ответ: совпавших цифр не на своих местах - 1 (6), цифр на своих местах - 2 (5 и 7)

игра ведется до окончания количества ходов либо до отгадывания

Кстати, в Fallout 3, Fallout New Vegas и Fallout 4 для взлома терминалов используется очень похожая мини игра.

Теория для проекта

Поначалу проект может показать сложным, или даже неподъемным, но мы гарантируем, что после изучения следующей информации вы сможете его осилить

Проект 2. RPG баттл

Боевой маг Евстафий сражается с лютым монстром. Монстр описывается таким объектом:

const monster = {
maxHealth: 10,
name: "Лютый",
moves: [
{
"name": "Удар когтистой лапой",
"physicalDmg": 3, // физический урон
"magicDmg": 0, // магический урон
"physicArmorPercents": 20, // физическая броня
"magicArmorPercents": 20, // магическая броня
"cooldown": 0 // ходов на восстановление
},
{
"name": "Огненное дыхание",
"physicalDmg": 0,
"magicDmg": 4,
"physicArmorPercents": 0,
"magicArmorPercents": 0,
"cooldown": 3
},
{
"name": "Удар хвостом",
"physicalDmg": 2,
"magicDmg": 0,
"physicArmorPercents": 50,
"magicArmorPercents": 0,
"cooldown": 2
},
]
}

Боевой маг Евстафий способен на следующее:

moves: [
{
"name": "Удар боевым кадилом",
"physicalDmg": 2,
"magicDmg": 0,
"physicArmorPercents": 0,
"magicArmorPercents": 50,
"cooldown": 0
},
{
"name": "Вертушка левой пяткой",
"physicalDmg": 4,
"magicDmg": 0,
"physicArmorPercents": 0,
"magicArmorPercents": 0,
"cooldown": 4
},
{
"name": "Каноничный фаербол",
"physicalDmg": 0,
"magicDmg": 5,
"physicArmorPercents": 0,
"magicArmorPercents": 0,
"cooldown": 3
},
{
"name": "Магический блок",
"physicalDmg": 0,
"magicDmg": 0,
"physicArmorPercents": 100,
"magicArmorPercents": 100,
"cooldown": 4
},
]

Бой идет по ходам. Каждый ход компьютер (Лютый) случайно выбирает одно из доступных действий и сообщает, что он собирается делать. В ответ на это игрок (Евстафий) должен выбрать свое действие.

После происходит взаимное нанесение урона. Магическая броня блокирует магический урон, физическая броня блокирует физический урон.

После совершения действия, оно не может быть повторно выбрано в течение cooldown ходов

Бой идет до победы одного из противников.

Перед началом боя игрок выбирает сложность (начальное здоровье Евстафия)

Теория для проекта

Проект 3. Викторина

В папке лежит некоторое количество файлов. Каждый файл состоит из следующих строк

текст вопроса
номер правильного ответа
ответ 1
ответ 2
...
ответ n

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

Теория для проекта

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