You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

28 KiB

Задания на лабораторные работы №2-3

Задание на лабораторную работу №2

Требуется разработать приложение или программный комплекс, обменивающийся данными по сети в формате JSON, XML или Protocol Buffers.

Задание на лабораторную работу №3

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

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

Варианты задания

Функциональность приложения
0 Система мгновенного обмена сообщениями между двумя пользователями.
1 Сетевая игра «Данетки» для двух игроков. Первый игрок загадывает слово, а второй пытается угадать, задавая первому игроку вопросы, ответами на которые могут быть только «да» или «нет».
2 Система обмена файлами между двумя пользователями. Система должна позволять двум пользователям, физически находящимся за разными вычислительными устройствами, обмениваться файлами по сети.
3 Сетевая игра «Крестики-нолики» для двух игроков. Два игрока по очереди ставят в пустые клетки поля символы, причём первый игрок ставит крестики, а второй нолики. Игрок выигрывает, если три клетки по горизонтали, по вертикали или по диагонали становятся заполненными его символами.
4 Игра “Который логический час?”. Игроки хранят целочисленное значение времени. Каждый ход игрок отвечает на входящие сообщения если они есть, а затем может спросить у любого другого игрока “Который час?”, либо пропустить ход. Каждое сообщение сопровождается текущим временем с добавлением единицы. Игрок при ответе выбирает максимальное значение между своим временем и временем входного сообщения + 1.
5 Сетевая игра «21» для двух игроков. Игроки ходят по очереди. Каждый ход игроку равновероятно показывается случайное число от 1 до 11. Он может добавить это число к сумме, либо закончить игру. Когда игрок набирает в сумме не менее 21, то игра для него заканчивается автоматически. Когда оба игрока закончили игру, игроки, у которых сумма больше 21, проигрывают, а среди остальных игроков выигрывает тот, у кого сумма больше.
6 Сетевая игра «Стишок» для четырёх игроков. Каждый игрок по очереди пишет строчку общего стиха на основе строчки предыдущего игрока. Остальные строки он не видит. Игроки проходят фиксированное количество итераций, и программа выводит общий стих, который в итоге получился.
7 Сетевая игра «Робот» для двух игроков. Каждый игрок управляет роботом, который обладает некоторым количеством здоровья, энергии и некоторым набором способностей, связанным с нанесением урона роботу другого игрока, с защитой от повреждений, наносимых другим игроком, и с восстановлением энергии. Роботы могут по очереди использовать свои способности, тратя на них энергию. Когда здоровье одного из роботов перестанет быть положительным целыми числом, другой робот выигрывает.
8 Кооперативная игра “Удалённая стыковка”. В игру играют два игрока: один на земле, другой на корабле, стыкующемся с космической станцией в точке лагранжа L1. Оператор на земле получает положение и вращение корабля, лётчик не знает положения, но может управлять кораблём и получать сообщения от оператора. Информация распространяется с задержкой. Игроки выигрывают при совершении успешной стыковки.
9 Сетевая игра «Команда» для двух игроков. Поле 8×8 клеток, на котором все объекты отображаются обоим игрокам. Каждый игрок управляет бойцом, который либо ходит в одном из четырёх направлений, либо стреляет в одном из четырёх направлений. При стрельбе уничтожается первый объект, находящийся в том направлении. Игроки ходят по очереди. На поле случайно генерируются враги. Если враг достигнет клетки с бойцом, то боец погибает. За ход все враги перемещаются на одну клетку в случайном направлении. Цель игроков уничтожить всех врагов. Игроки проигрывают, если оба погибают.
10 Сетевая игра «Поиск вслепую» для трёх игроков. Для каждого игрока генерируется случайное положение на двумерной плоскости так, чтобы они все находились на одинаковом расстоянии от награды. Каждому игроку выводится расстояние до награды на каждом ходу. Ход игрока заключается в выборе угла поворота, по которому игрок передвинется на одну единицу. Выигрывает игрок, который первый окажется от награды на расстоянии, не превышающем 1.
11 Сетевая игра со спичками для двух игроков. Имеется 100 спичек. Игроки ходят по очереди. Каждый игрок за свой ход может убрать от 10 до 20 спичек включительно. Проигрывает игрок, который не может сделать ход.
12 Удалённый интерпретатор интерпретатор арифметических выражений.
13 Сетевая игра «Числовой лабиринт» для двух игроков. Игра начинается с числа 1. Каждый игрок в начале игры получает 5 случайно сгенерированных арифметических операций с 5 случайно сгенерированными целыми числами, которые будут являться правыми операндами соответствующих операций. Игроки ходят по очереди. За свой ход игрок может применить одну из своих операций к текущему числу. Выигрывает игрок, первым получивший число 42.
14 Сетевая игра «Гомоку» для двух игроков. Игроки ходят по очереди. За свой ход игрок может поставить символ своего цвета на свободную клетку поля размером 8×8 клеток. Выигрывает игрок, который поставит непрерывный ряд из пяти своих символов по вертикали, по горизонтали или по диагонали.
15 Сетевая игра «Верю, не верю» для двух игроков. У каждого игрока изначально имеется три карты с надписью 1, две карты с надписью 2 и одна карта с надписью 3. Игроки ходят по очереди. Если ни одной карты не выложено, то игрок может выложить одну из своих карт в закрытую и назвать число от 1 до 3. Если на столе уже лежат некоторые карты, то игрок может поверить в то, что все карты имеют названную изначально надпись и выложить ещё одну карту в закрытую, либо не поверить и проверить последнюю карту, выложенную другим игроком. Если при этом надпись на карте совпадает с заявленной, то проверявший игрок забирает все лежащие на столе карты в руку, в противном случае, их забирает другой игрок. Выигрывает игрок, оставшийся без карт.
16 Сетевая игра «Провинции» для четырёх игроков. На клетчатом поле 8×8 в каждой клетке может находиться произвольное количество воинов противника. Изначально у каждого игрока есть по одному воину в одном из углов поля. Игроки ходят по очереди. В начале хода игрока в каждой клетке поля появляется столько воинов этого игрока, сколько их там уже есть. За свой ход игрок может переместить некоторое количество своих воинов из одной из клеток в соседнюю с ней клетку. Если в одной из клеток оказываются воины обоих игроков, то количество воинов каждого игрока в этой клетке уменьшается на наименьшее из количеств воинов каждого из игроков в этой клетке. Побеждает игрок, уничтоживший всех воинов противника.
17 Сетевая игра «Луноходы» для двух игроков. Каждый игрок управляет луноходом, перемещающимся по шахматной доске 8×8, на которой случайным образом расставлены препятствия. Игроки ходят по очереди. В начале хода игрок равновероятно получает от 1 до 6 очков действия. Перемещения лунохода в соседнюю клетку стоит 1 очко, а выстрел в некотором направлении 3 очка. При выстреле, первый объект, находящийся в заданном направлении от лунохода, уничтожается. Побеждает игрок, уничтоживший луноход противника.
18 Сетевая игра «Камень, ножницы, бумага» для двух игроков. Каждый игрок в тайне от другого выбирает камень, ножницы либо бумагу, после чего определяется победитель. Камень бьёт ножницы, ножницы бьют бумагу, бумага бьёт камень.
19 Сетевая игра «Пушки» для двух игроков. Игроки имеют некоторую координату на числовой прямой. Они по очереди стреляют друг в друга, выбирая угол полёта снаряда. Снаряд летит обладает некоторой массой и притягивается к земле некоторой силой. Выигрывает игрок, попавший снарядом в противника.
20 Сетевая игра «Бойцы» для двух игроков. У каждого игрока есть 8 бойцов, различной силы, измеряющейся целыми числами от 1 до 8. Игроки в тайне друг от друга расставляют бойцов в желаемой последовательности. Когда бойцы разных игроков оказываются друг напротив друга, то боец с меньшей силой уничтожается, и соответствующий игрок зарабатывает 1 очко. Если в такой ситуации силы бойцов одинаковые, то уничтожаются оба бойца, и ни один из игроков не получает очков. Выигрывает игрок, который набрал больше очков, чем другой игрок.
21 Игра “Выбери лидера”. Игроки предлагаю кандидатуру из числа игроков. Голосование должно завершиться за определённое время. Вам мешают постоянные зависания клиентской программы и сбои в сети.
22 Сетевая игра «Звёздное ремесло» для двух игроков. Изначально у каждого игрока есть 0 кристаллов, 5 рабочих и 0 воинов. Игроки ходят одновременно, они не видят количество кристаллов, рабочих и воинов другого игрока. В свой ход игрок может либо потратить некоторое количество имеющихся кристаллов на строительство рабочих или воинов, либо напасть на другого игрока. Производство рабочего стоит 5 кристаллов, а воина 10 кристаллов. В начале хода игрок получает столько кристаллов, сколько у него рабочих. Если один из игроков решил напасть на другого игрока, то он выигрывает, если у него строго больше воинов, чем у другого игрока, и проигрывает в противном случае.
23 Сетевая игра «Запомнить последовательность» для двух игроков. Один игрок выставляет последовательность пяти цветных шариков, а другой игрок должен запомнить последовательность и воспроизвести через пять секунд. Каждый ход игроки меняются ролями. Игрок проигрывает, если воспроизвёл последовательность неправильно.
24 Коллекционная карточная игра. У каждого игрока есть колода карт и несколько карт в руке. Каждый ход игрок набирает карты в руку из своей колоды и может разыгрывать некоторые из них, чтобы уменьшить количество карт в колоде противника. На каждой карте написано, какой эффект она производит. Игра заканчивается, когда один из игроков остался без карт в колоде.
25 Сетевая игра «Города» для двух игроков. Игроки по очереди, не повторяясь, называют города, начинающиеся на букву, на которую закончилось название города, названного другим игроком в прошлый раз. Игрок проигрывает, если не может назвать город, либо назвал город, ранее уже названный одним из игроков.
26 Сетевая игра «Угадай число» для 2-х игроков. Первый игрок загадывает целое число, а второй пытается угадать. Второй игрок может делать предположения о том, какое число загадал первый игрок, а тот отвечает ему, больше его число или меньше, чем предположенное вторым игроком.
27 Сетевая игра «Мафия» для восьми игроков. В начале игры два игрока скрыто от других игроков получают роль мафии. В начале каждого хода игроки голосуют, кто из игроков является мафией, и исключают из игры того игрока, за которого проголосовало больше игроков. В конце каждого хода игроки, получившие роль мафии, скрыто от других игроков голосуют, кого из игроков исключить из игры. Игра заканчивается победой мафии, если в игре остались только игроки, получившие роль мафии, либо победой честных жителей, если все игроки, получившие роль мафии, исключены из игры.
28 Сетевая игра «Пешки» для 2-х игроков. Игра представляет собой модифицированные шахматы, на доске 8×8 клеток расположены по 8 пешек у каждого игрока на втором ряду доски со стороны каждого игрока. Игроки ходят по очереди, перемещая одну из своих фигур по правилам, по которым пешки перемещаются в шахматах. Игрок выигрывает, если уничтожил все пешки противника, либо если своим ходом передвинул пешку к границе поля со стороны противника.
29 Сетевая игра «Кони» для двух игроков. Игра представляет собой модифицированные шахматы, на доске 8×8 клеток расположены по 8 коней у каждого игрока на черных клетках на первых двух рядах доски со стороны каждого игрока. Игроки ходят по очереди, перемещая одну из фигур на 2 клетки в одном направлении и 1 клетку в другом направлении, ортогональным первому. Когда конь перемещается на клетку, занятую конём другого цвета, тот конь уничтожается. Игрок выигрывает, если уничтожает половину фигур другого игрока.
30 Сетевая игра «Дуэль магов» для двух игроков. Каждый игрок изначально имеет 20 очков здоровья и 10 очков магии. Игроки ходят по очереди. В начале хода игрок получает несколько случайно сгенерированных действий, некоторым образом изменяющих очки здоровья и магии игроков. Игрок, очки здоровья которого становятся неположительными, проигрывает.
31 Сетевая игра «Быстрый счёт» для двух игроков. Сервер генерирует некоторое арифметическое выражение, которое показывается игрокам. Игроки должны вычислить значение выражения и ввести ответ. Игрок проигрывает, если ввёл неправильный ответ, либо если его противник ввёл правильный ответ раньше него.
32 Сетевая игра Гранди для двух игроков. Изначально имеется кучка из 10 камней. Игроки ходят по очереди. За свой ход игрок может разделить одну из кучек на две непустые кучки разных размеров. Проигрывает игрок, который не может сделать ход.
33 Игра проблема двух армий. Игроки должны договориться о времени нападения, отправляя гонцов с временем через вражескую территорию. С определённой вероятностью гонца могут перехватить.
34 Игра “Осцилляторы”. Клиентское приложение игрока отправляет сообщения случайному игроку с определённой частотой. Игрок может увеличить или уменьшить частоту на определённый шаг. Игроки выигрывают, когда все осцилляторы синхронизируются.
35 Многопользовательский эхо сервис. Пользователи записывают звук в клиентском приложении и слышат с задержкой звук сразу от всех участников.
36 Игра “Столовая философов”. Существует место в горах, куда съезжаются философы со всего мира поразмышлять. Для размышлений нужна энергия, поэтому философы охотно ходят в столовую с одним круглым столом. Каждый философ берёт с собой одну вилку и кладёт её справа. И каждый раз в меню столовой спагетти, которую можно есть только двумя вилками. Игроки выступают в роли философов и могут взять две вилки в любом порядке. Задача игроков договориться об алгоритме, по которому они будут брать вилки и не умереть с голоду.
37 Игра “На автобусе или пешком?”. Два игрока живут недалеко от работы и могут дойти пешком до неё за одинаковое время. Но на автобусе можно добраться ещё быстрее! Проблема в том, что расписание автобусов меняется каждый день. Выигрывает игрок, который приходил первым большее количество раз.
38 Игра “Крокодил”. Ведущий игрок получает возможность рисовать на видимым всем холсте. В начале игры ему загадывают слово. Другие игроки предлагают свои варианты через чат, с которыми игрок может согласиться или не согласиться. Раунд заканчивается, когда ведущий подтверждает, что слово отгадано.
39 Сетевая игра «Поединок» для двух игроков. У каждого игрока есть 5 героев, каждый из которых обладает тремя случайно сгенерированными положительными целыми числами: силой, ловкостью и интеллектом. Каждый ход игроки одновременно в тайне друг от друга выбирают одного из своих героев, после чего выбранные герои сражаются. Побеждает тот герой, у которого по крайней мере две характеристики превосходят соответствующие характеристики героя противника. При этом проигравший герой уничтожается. Побеждает игрок, уничтоживший всех героев противника.
40 Сетевая игра «Ним» для двух игроков. Вначале случайно генерируется несколько целых положительных чисел. Игроки ходят по очереди. За свой ход игрок может вычесть из одного из положительных чисел некоторое не превосходящее его число. Проигрывает игрок, который не может сделать ход.
41 Многопользовательский текстовый редактор. После подключения к серверу пользователи имеют доступ к одному и тому же тексту. Пользователи могут прочитать текст и внести в него изменения. Изменения произведённые одним пользователем распространяются всем остальным.
42 Сетевая игра «Дилемма заключённого». Двум подключившимся к серверу игрокам предоставляется выбор: сотрудничать или предать. После получения ответов игрокам начисляются очки в соответствии с матрицей выигрышей 20,1],[1,10.