Как написать морской бой на c
Перейти к содержимому

Как написать морской бой на c

  • автор:

C++ Морской Бой — некоторые моменты

В моей наработке есть поле (двумерный массив) разделенное на 2 части (от 1 до 5 строки вражеская, от 6 и 10 строки моя часть) в котором показываются однопалубные корабли в виде «1» и пустые ячейки в виде «0». Я могу ввести координаты по строке и столбцу и «уничтожить» данные корабли (ввод для меня разрешен от 1 до 5 строк, а для бота от 6 до 10). При уничтожении, их значении меняется на «5» на одну итерацию, чтобы было видно, что по нему стреляли и позже на «0», когда она превратится в пустое место. При уничтожении всех кораблей игра оканчивается и объявляется победа

То с чем я не могу справиться и из-за чего пишу сюда. Требуется, чтобы у каждого (меня и бота) было по 5 штук — 1, 2, 3, 4, 5 — палубных кораблей расставленных по полю 10х10, а не 1 палубных как в данный момент и также, когда бот попадает по моему кораблю, он стрелял на одну ячейку дальше в рандомном направлении, а не в случайную ячейку по всей карте его атаки, как сейчас. Также, не знаю как скрыть поле которое я атакую, чтобы показывались только подбитые мной корабли. Жду советов от знающих. Прошу не кидайте ссылки на чужие проекты, мне нужно объяснить на основе моего кода. Благодарю

Hiko Moff's user avatar

Для того, чтобы вражеские корабли не отображались, пока их не подобьют в функции tableshow() измените код на:

Замените цифру убитых кораблей на -1 для некоторых функций и для вида. В функции main вам нужно добавить несколько переменных:

Далее заменить в ходе бота все x и y на BotX и BotY. После этого добавить следующий код:

Это определит сторону выстрела. Я заметил, что вы неправильно генерируете координаты и показываете их. Массивы начинаются с 0, а значит нам нужно генерировать

И показывать координаты вот так:

Чтобы ИИ не реагировал на убитые корабли добавляем вот такую часть кода в начале промаха:

Записывает промах в одну из сторон и проверяет стрелял ли по всем четырём сторонам бот, а также возвращает координаты на попадание в корабль:

Советую либо переместить в начало после проверки убитого корабля, либо убрать

Как написать морской бой на c

GODOT

  • Базовая отрисовка на WinAPI
  • Генерация расстановки кораблей.
  • Алгоритм добивания корабля.
  • И старт новой игры, клавишей «0»

Everyone’s favourite game which is familiar from childhood. In this variation of the game is played between two robots.

  • Basic drawing on WinAPI
  • Generation ship formations.
  • Algorithm the goal of the ship.
  • And start a new game (key «0»)

This program was compiled with GCC 4.9.2. Compatibility with other compilers are not guaranteed

Name already in use

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

SeaBattle — консольное приложение для игры в морской бой

Проект выполнялся в рамках курсовой работы. Цель проекта — разработка консольного приложения для игры в морской бой. Разработка велась на языке C++ с использованием IDE Visual Studio 2017. Оценка по результатам защиты — «отлично».

Данный репозиторий содержит файл с исходным кодом SeaBattle.cpp и исполняемый файл SeaBattle.exe . Для тестирования приложения Вы можете скачать исполняемый exe -файл и запустить его на своём компьютере (может появиться предупреждение от защитника Windows, но его нужно проигнорировать и всё равно запустить файл).

Скриншоты работы приложения

Далее приведены скриншоты работы приложения.

Начальное окно

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

Окно расстановки кораблей

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

Окно игры

После успешной расстановки кораблей пользователем происходит переход к следующему окну, в котором осуществляется игровой процесс.

Окно по завершении игры

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

Пишем свой Морской Бой , на пути к успешной курсовой. (часть1) ⁠ ⁠

Сегодня хотелось бы посвятить свой пост разработке классической ,уже ставшей символом школьной поры ,игры.
Речь у нас пойдет об игре «Морской бой». Разработку мы будем вести на языке C++ в среде Visual Studio. Сам я люблю писать на C# ,но в ТЗ к моей курсовой были указаны языки C/C++.
Графику прикрутим ближе к концу , так же постараемся реализовать ИИ.
Пост не следует рассматривать как руководство для совсем новичков, я буду стараться разжевывать все что делаю достаточно тщательно ,приводить блок схемы алгоритмов и основные формулы(если будет не лень),но эта серия постов выйдет скорее как дневник разработчика ,который чуть было не завалил сессию 🙂

В постах часто будет рерайт некоторых статей с хабра и других тематических форумов
потому что они написаны достаточно грамотно и смысла их исправлять и коверкать я не вижу

1.Для начала разберемся с основными правилами игры и вообще построим у себя в голове образ будущего творения.
О самой игре говорить много наверно не стоит ,каждый кто учился в школе так или иначе знает правила,но если кратко то : У нас есть 1 корабль который занимает четыре клетки
2 корабля которые занимают три клетки , 3 корабля на две клетки , и 4 лодки размером с одну клетку. корабли должны быть расставлены так чтобы между ними обязательно была одна пустая клетка.
вообще для прототипа игры я сделаю консольную версию приложения ,протестирую на ней механику а потом если успею прикручу графику (это я уже указывал строк на 20 выше)

Чтобы не сильно засыпать вас текстом , прилагаю картинку игрового поля

Пишем свой Морской Бой , на пути к успешной курсовой. (часть1) Игры, Морской бой, C++, Длиннопост

2. Создаем проект приложения win32 на C++ в Visual Studio

Пишем свой Морской Бой , на пути к успешной курсовой. (часть1) Игры, Морской бой, C++, Длиннопост

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

В следующем окне поставим галочку напротив MFC ,на тот случай если все таки дойдем до графического интерфейса 🙂

Пишем свой Морской Бой , на пути к успешной курсовой. (часть1) Игры, Морской бой, C++, Длиннопост

3. Проект создан ,выглядит он вот так(можно кликнуть на картинку и разглядеть получше,сравнить со своим результатом).

Пишем свой Морской Бой , на пути к успешной курсовой. (часть1) Игры, Морской бой, C++, Длиннопост

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

Теперь давайте создадим класс игрока , не будем сильно оригинальничать и назовем его Player, он будет описывать и игрока и компьютер и в нем будут методы расстановки кораблей и стрельбы ,но до стрельбы нужно дожить)

Пишем свой Морской Бой , на пути к успешной курсовой. (часть1) Игры, Морской бой, C++, Длиннопост

После этого у нас появились 2 новых файла в проекте ,они обведены красным

Пишем свой Морской Бой , на пути к успешной курсовой. (часть1) Игры, Морской бой, C++, Длиннопост

идем в главный класс и подключаем нужные нам библиотеки ,это будут clocale, conio.h, stdlib.h, iostream, ctime

пока не паримся для чего они нужны ,позже я обязательно это расскажу

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

Пишем свой Морской Бой , на пути к успешной курсовой. (часть1) Игры, Морской бой, C++, Длиннопост

Далее идем в наш Заголовочный файл и вставляем туды строчку с определением

направления нашего корабля,чтобы мы могли дальше использовать эти данные при обозначении методов класса Player

Пишем свой Морской Бой , на пути к успешной курсовой. (часть1) Игры, Морской бой, C++, Длиннопост

теперь идем в наш Player и создаем там основные методы которые нам пригодятся

Пишем свой Морской Бой , на пути к успешной курсовой. (часть1) Игры, Морской бой, C++, Длиннопост

метод «set» -устанавливает корабль ,от значения переданной ему переменной ,можно догадаться о количестве палуб

метод «ships_init» — собственно инициализирует массив с кораблями

методы «turn» — в зависимости от ссылки отвечают за ход компьютера или игрока

метод «place _ship» — вызывается из метода set и описывает направление и координаты нашего кораблика
далее мы размещаем нужные нам для фунциклирования переменные :

Пишем свой Морской Бой , на пути к успешной курсовой. (часть1) Игры, Морской бой, C++, Длиннопост

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

Принимаю тапочки на кривизну моего кода ,я знаю что могу ошибаться во многих местах и буду крайне благодарен если вы исправите мои недочеты )

5.5K поста 21.2K подписчика

Правила сообщества

ОБЩИЕ ПРАВИЛА:

— Уважайте чужой труд и используйте конструктивную критику

— Не занимайтесь саморекламой, пишите качественные и интересные посты

СТОИТ ПУБЛИКОВАТЬ:

— Посты о Вашей игре с историей её разработки и описанием полученного опыта

— Обучающие материалы, туториалы

— Интервью с опытными разработчиками

— Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
— Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

— Посты, содержащие только вопрос или просьбу помочь
— Посты, содержащие только идею игры

— Посты, единственная цель которых — набор команды для разработки игры

— Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

— Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

— Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.

О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

— Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

— Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

— Cсылка размещается в формате: «Страница игры в Steam: URL»

смысл кода в кострукторе Player()? может это в поля класса нужно написать?

Тоже писал курсовую на тему «Морской бой»на С++ 🙂

Использовал SFML и TGUI. Можно играть как с компьютером, так и с другим игроком по сети, так же звания добавил, для интереса)

Ходил на курсы по c# лет 5 назад. Написал тогда софтину автовыключение пк, если кому нужна — забирайте. Она может запоминать последнее время и сразу запускать его, при запуске программы. Установки не требует. https://yadi.sk/d/z5NbK814uYu36

Иллюстрация к комментарию

Я вчера увидел твой код и чет самому захотелось очередную песочницу заделать.
Только вот классический морской бой двумерный. А я для того, чтобы интереснее писать было, решил написать на шаблонах n-мерный.
Это немного наркомания, я знаю, просто люблю обобщать задачи 🙂

Там тоже явно не законченный проект, на принцип должен быть понятен

а где продолжение.

Меня хотят засудить за пост о тухляке в сети разливаек :(⁠ ⁠

Меня хотят засудить за пост о тухляке в сети разливаек :( Пиво, Суд, Екатеринбург, Негатив, Коммерческая тайна

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

Говорит, что хочет засудить по закону о коммерческой тайне.

К сожалению, кажется, он меня сразу же заблокировал и мое сообщение до него не доходит, поэтому, раз он читает мои посты, продублирую сообщение сюда.

Добрый день, А. А. , не мне вас учить как составлять досудебную претензию. Прошу направить претензию на моë имя с описью вложеного до востребования в отделении Почты России
ул. 8 Марта, 57, 620063. Прошу вложить в конверт, мою копию ГПХ, подписанную Вами и с печатью (Наконец-то я увижу его в таком виде в первый раз) . А также информацию передачи о начале и прекращению договора в СФР, подтверждение уплаты НДФЛ и Страховых взносов (вы же это делали?). В претензии приложить документ с моей подписью, где я уведомлен о коммерческой тайне. Приложить перечень что в компании считается коммерческой тайной.

И купить хотя бы печать, чтобы можно маркировать что коммерческая тайна, а что нет, но это я так. Вы же не упустили этот момент?

Отец в Нью-Гэмпшире (США) пришёл на заседание школьного совета в костюме Юлия Цезаря в знак протеста против гендерной политики учителя⁠ ⁠

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

Отец в Нью-Гэмпшире (США) пришёл на заседание школьного совета в костюме Юлия Цезаря в знак протеста против гендерной политики учителя Гай Юлий Цезарь, Гендерные вопросы, ЛГБТ, США, Школа, Отец

«Ваш долг — действовать в интересах детей. Учить правде, а не лжи. Фактам, а не выдумкам. Биологии, а не социальной повестке. Будучи налогоплательщиками, мы заслуживаем, чтобы наших детей учили тому, за что мы платим. И это не социальная повестка, будь она с правым или левым уклоном», — отметил Гульельмо.

Американцы показали доказательства, что украинцы все таки взорвали Северный поток⁠ ⁠

Американцы показали доказательства, что украинцы все таки взорвали Северный поток

Плохое настроение⁠ ⁠

В студенческие годы я жил в oбщaгe, сосед по комнате был немного дeпpeccивным и былa у него особенная фишкa. Cтoилo eму поругаться co cвoeй дeвушкoй, в учебе где то не успевал или пpocтo не было нacтpoeниe, то он садился и нaчинaл лeпить пeльмeни. B мopoзилкe вceгдa лeжaл гoтoвый фapш, в шкафу у нас всегда был пакет муки, пoэтoму oн включaл ceбe гpуcтную музыку и мог просидеть так больше двух часов за столом. Зa такой один присест мoг cлeпить 300-400 штук, пoтoм когда они замораживались, он раскладывал пo пакетам и oтдaвaл мнe и нашим соседям по этажу. Зoлoтoй был чeлoвeк, вспоминаю его по сей день. Жaль, чтo кoгдa у мoeй жeны плoxoe нacтpoeниe, oнa нe лeпит пeльмeни, a пpocтo пи*дит.

Это гениально я считаю⁠ ⁠

Это гениально я считаю Atomic Heart, Юмор, Близняшки (Atomic Heart), Твикс, Картинка с текстом

Это гениально я считаю Atomic Heart, Юмор, Близняшки (Atomic Heart), Твикс, Картинка с текстом

Константин Плотников, сыгравший Михаила Горшенёва в сериале «Король и Шут», подрабатывает дворником⁠ ⁠

Константин Плотников, сыгравший Михаила Горшенёва в сериале «Король и Шут», подрабатывает дворником Король и Шут, Актеры и актрисы, Российское кино, Михаил Горшенев, Дворник, Из сети, Фотография, Русские сериалы

Костя убирает территорию возле Александро-Невской лавры в Санкт-Петербурге. После премьеры сериала ему даже повысили зарплату.

Купите, твари, наушники⁠ ⁠

Бесит. Прям пичот.
Сколько раз уже сталкиваюсь с таким. Придут, сядут рядом/в комнате/на лавочке/в заведении, достанут телефон, откроют блядский тик-ток, Ютуб, что ещё там есть и, сука, громко смотрят ролики. Особенно это касается коротких роликов, которые на минуту и друг за другом идут подряд. Пять секунд одной громкой хрени, три секунды второй, опять три секунды первой хрени (нахуй ты блядь листал дальше и теперь опять возвращаешься и снова дальше листаешь, у тебя кретин ёбаный что, пальцы не слушаются?). И так короткими звуковыми волнами вся эта блядская музыка/басы/голоса выносят мозг. И что характерно, они даже звук не убавляют. Фильм смотрят- регулируют громче/тише, а тут пол часа телефон орёт разрывается, и сидят как ёбаные зомби, смотрят.
Купите, сука, наушники! Они продаются! Их можно прийти и прям с полки своими двумя руками взять. Боженька дал вам две руки именно для этого, чтобы вы могли ими что-нибудь взять. Так возьмите, блять, наушники и засуньте их себе в блядские уши.
Всё, я ебанулся, пойду водички попью.

Ответ kaegoorn48 в «Ситуации, когда человек строит из себя эксперта, не зная, что вы в этом деле профессионал» корчишь из себя профи⁠ ⁠

Произошло не со мной но при мне. Сварщ ки из жэка варили стояки в соседней квартире, там бабулька-божий одуванчик. Слышу она громко и матерно объясняет слесарям откуда у них руки растут. Что навешали они соплёй и что она сама себе заварит и чтоб они ей при этом не мешали. Мужики не долго ржали, бабуля с15 лет на танковом заводе начала сварщицей, варила броневую сталь и имела собственное клеймо, варила первые магистральные газопроводы. Такие вот у нас бабушки

Считаем бумагу⁠ ⁠

Бумага формата А4 под названием «Снегурочка», от компании Mondi.

Заявлено: 500 шт.

Считаем бумагу Бумага, Длиннопост, Обман, Подсчет, Лига Счетоводов

В стопке 25 листов. Пересчитывал 2 раза.

Считаем бумагу Бумага, Длиннопост, Обман, Подсчет, Лига Счетоводов

Я раньше считал бумагу на регулярной основе и именно у Снегурочки всегда было меньше, чем заявлено (на 10 листов бывало). Кому не лень — посчитайте свою. Это мне так не везёт или они всегда меньше фасуют, чем заявлено и оплачено?

PS: Без рекомендованных тегов не даёт опубликовать а предлагает не то, что нужно.

И жили они долго. ⁠ ⁠

И жили они долго. Юмор, Картинка с текстом, Брак (супружество), Археология, Мумия, Зашакалено

«Мегафон» решил передавать данные клиентов компаниям по выдаче микрозаймов, спрятав галочку «не согласен» в тексте⁠ ⁠

«Мегафон» решил передавать данные клиентов компаниям по выдаче микрозаймов, спрятав галочку «не согласен» в тексте Негатив, Мегафон, Длиннопост, Пользовательское соглашение, Скриншот, Персональные данные

Компания «Мегафон» обновила мобильное приложение и решила передавать персональные данные (ПД) клиентов компаниям по выдаче микрозаймов и кредитов. Разработчики скрыли галочку «не согласен» в тексте нового соглашения. Пользователям нужно пролистать его до самого конца, найти строчку с отказом от услуги и только потом нажать большую зелёную кнопку «согласен».

«Мегафон» решил передавать данные клиентов компаниям по выдаче микрозаймов, спрятав галочку «не согласен» в тексте Негатив, Мегафон, Длиннопост, Пользовательское соглашение, Скриншот, Персональные данные

«Мегафон» решил передавать данные клиентов компаниям по выдаче микрозаймов, спрятав галочку «не согласен» в тексте Негатив, Мегафон, Длиннопост, Пользовательское соглашение, Скриншот, Персональные данные

Примечательно, что кнопка «Соглашаюсь» относится к тому, что «Мегафон» без возможности отказаться от такой опции вводит новую услугу предоставлению ПД абонента сторонним финансовым сервисам.

При выставлении галочки «не согласен» в интерфейсе соглашения большая зелёная кнопка «Соглашаюсь» не пропадает, её все равно нужно нажимать для продолжения работы с приложением. В итоге пользователям непонятно, что после этой процедуры оператор связи с клиента получил — «не согласие», «согласие» или «не согласие и потом согласие».

Ранее у «Мегафона» уже была подобная услуга, а для отказа от неё нужно было выполнить запрос с помощью ussd-команды: *105*1968#.

Оригинал статьи прочёл на Хабре

Строгий контроль⁠ ⁠

Недавно вернулся из Израиля и заметил, что самый строгий контроль безопасности в аэропорту Бен Гурион. Проверяют очень тщательно и очень медленно. Заставляют несколько раз включать и выключать телефон, ноутбук, снимать обувь, открывают сумки, щупают руками. Но мне не повезло больше других. Мои ботинки вызвали какие-то подозрения и они надолго застряли в сканере. Несколько человек с умным видом смотрели на экран, а потом лоток с моей обувью забрал человек в форме, сказав лишь, что требуется дополнительная проверка. Больше свою обувь я так и не увидел. Несколько раз подходил к этим людям в форме, но они ли говорили, что ничего не знают. Пришлось ходить по аэропорту и лететь в Москву в носках.

Талантище⁠ ⁠

В детстве мама давала мне сдачу и я всегда клал её в копилку. Когда мама нашла эту копилку, спросила зачем? Я сказал, что хочу купить ей шубу, которую папа не хотел покупать. Мама расплакалась и на следующий день мне купили велик, на который я кстати и копил. Ведь талант пиздеть у меня был с раннего детства.

Откуда эти люди?⁠ ⁠

Ребят, а кто-нибудь понимает, что на тиндере происходит вообще?

Категория 25-32 почти вся саморазвивается, не сидит на месте, путешествует, постоянно пробует что-то новое, танцует бачату и катается на сноубордах.

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

Филиал профи ру какой-то.

Пакет⁠ ⁠

Полтора года я носил на тренировку все свои гигиенические принадлежности в пакете. Пакет был Вайлдберриз, выданный еще бесплатно вместо с каким-то заказом.
Первые полгода он был по-прежнему яркий и радовал своей сохраняющейся герметичностью. Он был такой один на всю душевую тренировочного зала. Я даже подумывал, что многие мужики мне втайне завидуют — ведь свой пакет я мог увидеть его из далека, он радовал своей плотностью и фактурностью, и из него еще ничего не вываливалось — потому что он был НОВЫЙ.
Спустя первые месяцы, как и преданный ухажер после регистрации брака, пакет начал жухнуть, блекнуть и продырявливаться. Но я стойко носил в нем на тренировку гель и мочалку, несмотря на уже ощутимые дырки, и попытки разным жидкостям, оставшимся после душевой сочиться из него прямо в рюкзак.

Через год он уже капитально подстерся и жена мне сказала, что уже крайне неудобно не то, что ходить с ним, но и брать его. Даже ей и даже ногами.
Я оправдывался бережливостью, заботой о природе, экономией, хотя при этом мог просто заказать на алишечке какой-то хреноты, эквивалентом 1000 таких пакетов.

Короче дожили мы с пакетом до нашего полиэтиленового юбилея совместной жизни в полтора года.
Я до сих пор помню тот день в феврале, когда я складывал в него на балконе гель и мочалку, которые сиюсекундно, не задерживаясь в чреве моего любимого, оказались на полу. Увы. Цветом он уже был похож на бордово-белое месиво из красок и букв. Мне пришлось с ним расстаться, приняв так долго откладываемое мучительное решение.

Первую неделю, как еще чувствующий в себе силы жеребец, я попытался завести роман с новым ярким пакетом Вайлдберриз, выданным мне в феврале еще на бесплатной основе. Но увы, он оказался не из того теста, что мой бывший — непрочность нового партера расстроила меня уже при первом посещении зала.
Я остановился на ноунейме, и вот уже вторую неделю пытаюсь насладится новым полиэтиленовым партнером.

НО вчера я увидел нечто, что повергло меня в шок.
Я увидел образец и эталон полиэтиленовой верности и я не смог пройти мимо.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *