Как-то совсем незаметно мы дошли до такого уровня, когда можно не только тяжело работать, изучая программирование, но и играть в него. Начнем мы с замечательного сайта 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
Опубликовал 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
Опубликовал 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
Опубликовал 15/10/2014Іванов Вячеслав ВолодимировичConway Sequence Conway Sequence — седьмая по счету игра уровня сложности medium, основанная на свойствах последовательности Конвея (правильнее было бы назвать ...
- Heat Detector
Опубликовал 16/10/2014Вустянюк Ігор ДмитровичЗадача Речь пойдёт о первой задаче уровня Medium на сайте codingame.com. По сюжету Бэтмен должен отыскать бомбу в многоэтажном доме. Ему ...
- Horse-racing Duals
Опубликовал 16/10/2014Вустянюк Ігор ДмитровичЗадача Рассмотрим последнюю задачу уровня Easy с сайта codingame.com. Некоторое количество лошадей участвует в скачках и у каждой есть некая характеристика, ...
- Puzzle — Temperatures
Опубликовал 15/10/2014Ілларіонова Марія ВалеріївнаЗадача взята с этого сайта. В этой задаче необходимо проанализировать значения температуры, дабы найти ближайшее к нулю. Ввод: Строка 1: , количество значений ...
- Ragnarök — Power of Thor
Опубликовал 12/10/2014Байков ДмитроЧетвертая по счету игра на сайте называется Ragnarök — Power of Thor, где нам посчастливилось быть Великим Воином Тором. Тору необходимо самым ...
- Ragnarök — Power of Thor
Опубликовал 14/10/2014Вустянюк Ігор ДмитровичЗадача Есть Тор. А у Тора был источник силы. Больше нет. Тор движется по прямоугольному полю и ему известны его координаты и ...
- Skynet — The Chasm
Опубликовал 12/10/2014Байков ДмитроВторая по счету игра на сайте называется Skynet — The Chasm. В игре мы будем управлять мотоциклистом, который изо всех сил ...
- Skynet: The Chasm
Опубликовал 13/10/2014Іванов Вячеслав ВолодимировичВторая по списку игра на сайте codingame.com проверяет умение примата пользоваться условными операторами, интуицией и программой по физике за десятый ...
- Skynet: the Virus
Опубликовал 14/10/2014Бронфен-Бова РоманSKYNET FINALE — LEVEL 1 Los Angeles 2029 — Resistance HQ — Review of facts: В минувшую субботу, сотни отважных бойцов рисковали ...
- Temperatures
Опубликовал 14/10/2014Вустянюк Ігор ДмитровичЗадача взята с сайта codingame.com Задача. Задан набор целых чисел (значения температуры за различные моменты времени). Нужно вывести из них ...
- The Descent
Опубликовал 14/10/2014Вустянюк Ігор ДмитровичЗадача Мы летим на падающем космическом корабле над горами. Наша задача — запрограммировать пушки корабля так, чтобы уничтожить горы, тем самым не ...
- There is no Spoon — Episode 1
Опубликовал 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
Опубликовал 16/12/2015Вустянюк Ігор Дмитрович5 декабря компанией DataArt проводилась международная юмористическая олимпиада по программированию Proggy-Buggy Contest. Задачи на ней не были сложными, но решать их нужно ...
Еще один сайт на данную тему, но с более ограниченным выбором языков, но не скажу что менее интересный — http://codecombat.com/
В том-то и сложность. Мы изучаем языки С и С++. Там их нет.