Как-то совсем незаметно мы дошли до такого уровня, когда можно не только тяжело работать, изучая программирование, но и играть в него. Начнем мы с замечательного сайта codinGame.
На этом сайте нам предложат игры и головоломки, решать которые необходимо на одном из языков программирования. Мы будем их решать на С или С++ на Ваш выбор.
Onboarding
Начнём с первой и очень простой игры-головоломки «Onboarding».
Выбираем Single Game -> Onboarding -> C++. Проходим небольшой инструктаж (в дальнейшем его можно будет пропускать).
В игре Вы будете управлять лазерной пушкой, которая пытается защитить себя от надвигающихся врагов. Не пугайтесь. Враги больше всего напоминают комаров.
Игровой цикл
Бесконечно (до конца игры) повторяемый игровой цикл состоит из любого количества кода, который читает входной поток и выводит команду в выходной поток.
Вход
В первой строке входного потока нам сообщают количество врагов (int n).
Следующие n строк содержат имя врага и расстояние до него.
Выход
В выходной поток необходимо вывести одну строку — имя врага, которого Вы приказываете уничтожить (перевод строки обязателен).
Пример 1
В начале игры нам сразу предлагают испытать готовый пример программы управления пушкой. Но я буду всё показывать постепенно.
1 2 3 4 5 6 7 8 9 10 |
#include <iostream> using namespace std; int main() { // цикл игры while (1) { cout << "HotDroid" << endl; // Имя цели } } |
Всё, что делает наша программа, это при каждой возможности приказывает стрелять во врага, которого зовут HotDroid. Даже если его нет. Для вывода (строка 8) используется не совсем привычная конструкция, но смысл ее весьма прозрачен — вывести что-либо в стандартный поток вывода.
Запускаем программу на первом тесте. Оказывается она довольно долго сопротивляется. Пока не остаётся враг с неизвестным нам именем. Он-то и разрушает нашу пушку.
Можем перейти в режим отладки (крошечная кнопка Debug вверху игрового окна, где происходит бой). В этом режиме можно прогонять программу шаг за шагом в любом направлении и рассматривать происходящее.
Пример 2
Теперь рассмотрим пример в котором читаются входные «разведданные» о противнике
В строке 12 мы читаем в переменную count число врагов, обнаруженных на этом шаге игрового цикла. В строке 17 читаем имя и расстояние до очередного противника.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; int main() { while (1) { // цикл игры int count; // Количество врагов на этом шаге cin >> n; // Ввод числа врагов из входного потока for (int i = 0; i < n; i++) { // Цикл чтения данных о противнике string enemy; // Имя врага int dist; // Расстояние до него // Ввод имени очередного врага и расстояния до него cin >> enemy >> dist; cin.ignore(); } cout << "HotDroid" << endl; // Имя цели } } |
И, наконец, в 19 строке, не обращая внимание на разветданные, приказываем стрелять в того же HotDroid.
Программа также бездарно проваливает первый тест.
Самое время поразмышлять и модифицировать программу для прохождения первого теста.
Не знаю как Ваша программа, но моя не проходит второй тест «Imminent danger». Наша тактика стрельбы в последнего врага из списка позволяет быстрому дроиду подобраться к нам слишком близко.
Что же делать? Вывод очевиден — нужно уничтожать самого близкого к вам врага. Вот для чего нам сообщают о расстояниях до противников.
Попробуем?
Если у Вас все получилось, можете попробовать другие игры этого или других сайтов и рассказать о них в рубрике «Игры программистов». Конечно, за дополнительные баллы в нашей таблице успеваемости. Но ведь не это главное, правда?
На этом сайте в ближайшее время будет проходить конкурс программистов. Посмотрите, возможно Вы сможете принять в нём участие. Если, конечно, научитесь писать программы, решающие подобные головоломки. Все участники конкурса после его окончания получат дополнительные баллы в соответствии с местом в рейтинговой таблице. Хотя опыт показывает, что чем выше вы в турнирной таблице, тем меньше вас беспокоят эти самые баллы.
Желаю успехов!
P.S. Хочу поблагодарить одного знакомого программиста за информацию об этом интересном сайте.
Другие игры программистов
- ASCII ART <br />Опубликовал 16/04/2017Вадим Гордийчук
Task In stations and airports you often see this type of screen: Have you ever asked yourself how it might be possible ...
- Chuck Norris <br />Опубликовал 11/05/2017Антон Куперман
A task from codingame.com Task Binary with 0 and 1 is good, but binary with only 0, or almost, is even better! Originally, ...
- Conway Sequence <br />Опубликовал 15/10/2014Іванов Вячеслав Володимирович
Conway Sequence Conway Sequence — седьмая по счету игра уровня сложности medium, основанная на свойствах последовательности Конвея (правильнее было бы назвать ...
- Heat Detector <br />Опубликовал 16/10/2014Вустянюк Ігор Дмитрович
Задача Речь пойдёт о первой задаче уровня Medium на сайте codingame.com. По сюжету Бэтмен должен отыскать бомбу в многоэтажном доме. Ему ...
- Horse-racing Duals <br />Опубликовал 16/10/2014Вустянюк Ігор Дмитрович
Задача Рассмотрим последнюю задачу уровня Easy с сайта codingame.com. Некоторое количество лошадей участвует в скачках и у каждой есть некая характеристика, ...
- Puzzle — Temperatures <br />Опубликовал 15/10/2014Ілларіонова Марія Валеріївна
Задача взята с этого сайта. В этой задаче необходимо проанализировать значения температуры, дабы найти ближайшее к нулю. Ввод: Строка 1: , количество значений ...
- Ragnarök — Power of Thor <br />Опубликовал 12/10/2014Байков Дмитро
Четвертая по счету игра на сайте называется Ragnarök — Power of Thor, где нам посчастливилось быть Великим Воином Тором. Тору необходимо самым ...
- Ragnarök — Power of Thor <br />Опубликовал 14/10/2014Вустянюк Ігор Дмитрович
Задача Есть Тор. А у Тора был источник силы. Больше нет. Тор движется по прямоугольному полю и ему известны его координаты и ...
- Skynet — The Chasm <br />Опубликовал 12/10/2014Байков Дмитро
Вторая по счету игра на сайте называется Skynet — The Chasm. В игре мы будем управлять мотоциклистом, который изо всех сил ...
- Skynet: The Chasm <br />Опубликовал 13/10/2014Іванов Вячеслав Володимирович
Вторая по списку игра на сайте codingame.com проверяет умение примата пользоваться условными операторами, интуицией и программой по физике за десятый ...
- Skynet: the Virus <br />Опубликовал 14/10/2014Бронфен-Бова Роман
SKYNET FINALE — LEVEL 1 Los Angeles 2029 — Resistance HQ — Review of facts: В минувшую субботу, сотни отважных бойцов рисковали ...
- Temperatures <br />Опубликовал 14/10/2014Вустянюк Ігор Дмитрович
Задача взята с сайта codingame.com Задача. Задан набор целых чисел (значения температуры за различные моменты времени). Нужно вывести из них ...
- The Descent <br />Опубликовал 14/10/2014Вустянюк Ігор Дмитрович
Задача Мы летим на падающем космическом корабле над горами. Наша задача — запрограммировать пушки корабля так, чтобы уничтожить горы, тем самым не ...
- There is no Spoon — Episode 1 <br />Опубликовал 15/04/2017Вадим Гордийчук
Task The Goal The game is played on a rectangular grid with a given size. Some cells contain power nodes. The rest ...
- Разбор Proggy-Buggy Contest <br />Опубликовал 16/12/2015Вустянюк Ігор Дмитрович
5 декабря компанией DataArt проводилась международная юмористическая олимпиада по программированию Proggy-Buggy Contest. Задачи на ней не были сложными, но решать их нужно ...
Еще один сайт на данную тему, но с более ограниченным выбором языков, но не скажу что менее интересный — http://codecombat.com/
В том-то и сложность. Мы изучаем языки С и С++. Там их нет.