Сапер

Рекомендованный уровеньУровень
5+
Лет 10 назад в народе ходила примета: если офисный сотрудник чересчур сосредоточенно смотрит в экран и столь же сосредоточенно периодически кликает мышкой, скорее всего, там открыта игра «Сапер». Напомним тем, кто уже забыл, и расскажем другим, кто в силу возраста эту эпоху пропустил: «Сапер» — одна из самых популярных офисных игр, которая поставлялась вместе с Microsoft Windows. И даже сегодня, если вы сидите за компьютером с операционной системой этого семейства, то «Сапер» либо уже там установлен (просто наберите в поиске ОС слово «Сапер» или «Minesweeper»), либо его можно загрузить бесплатно из Microsoft Store. Многие Linux-сборки, например KDE и GNOME, также обзавелись похожими играми. В отличие от большинства других «убивалок времени», в этой игре отлично соблюдён баланс ходов логических и ходов наудачу, что делает «Сапера» одновременно очень увлекательной и… чуть-чуть менее бессмысленной, чем другие игры этого класса. Итак, у нас есть поле, разделённое на квадраты. Какие-то из них «заминированы», но сколько таковых и где они, мы не в курсе. Наша цель — открыть все незаминированные квадраты и не подорваться. Вы открываете квадрат левой кнопкой мыши, и если под ней мины нет, то появится число, означающее количество мин, расположенных по соседству с открытой ячейкой. Теперь нужно немного посчитать и предположить, какие ячейки можно открывать, а какие следует пометить, как заминированные. И так до победы или подрыва. В Windows разработчики встроили эту игрушку для того, чтобы люди учились управляться с мышкой (да, были времена, когда у компьютера её не было, приходилось довольствоваться только клавиатурой). Но на самом деле история «Сапера» ещё более древняя, чем история Microsoft, и её предки были доступны ещё на мейнфреймах в шестидесятых годах прошлого столетия… Впрочем, речь сейчас не об этом, а о том, чтобы создать собственную версию «Сапера»! Правила у нашей «головоломки с риском» будут точь-в-точь такими, как описано выше. Мы на JavaRush уже разделили эту непростую задачу на подзадачи и будем подсказывать вам, что делать. Дерзайте.
Комментарии (274)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Alek20097723 уровень
25 июня, 01:24
Как правильно установить desktop-game-engine.jar в IDEA?
Антоний Шаламов18 уровень, Хабаровск
четверг, 19:48
File - Project Structure - Libraries - нажать плюсик - JAVA - и выбрать этот .jar ~\IdeaProjects\JavaRushTasks\8.Games\lib\desktop-game-engine.jar Примерно такой адрес должен быть Проверить, подключён ли модуль 8.Games
Alek20097723 уровень
пятница, 01:23
спасибо. уже поставил
Константин Востриков7 уровень, Москва
14 июня, 13:46
то, что в идеа выводится подобный экран, это нормально? Смущает, что на сайте выводится разлинованная область, а в идеа какой-то черный экран
Sankir7 уровень
15 июня, 09:41
угу, нормальная сеточка появится на 5 подуровне, когда ты ее в коде уже "отрисуешь", а пока только размер.
Fischerski15 уровень, Москва
16 июня, 08:37
Сетка есть уже по умолчанию, только она черного цвета и цвет поля тоже черного цвета, соответственно ее и не видно. Чтоб убедиться в этом задайте цвет поля в любой другой цвет.
Z1 уровень
13 июня, 16:51
как игру создать
Антоний Шаламов18 уровень, Хабаровск
14 июня, 13:07
Написать её
Murat Asmanov1 уровень
13 июня, 10:27
Классно, нет, очень КЛАССНО! Всем советую JavaRush!
Fischerski15 уровень, Москва
7 июня, 19:27
Может кто подсказать как вставить свою картинку?
Антоний Шаламов18 уровень, Хабаровск
14 июня, 13:07
Какую и куда?
Fischerski15 уровень, Москва
15 июня, 06:14
Свою нарисованную картинку в клетку вместо флажка и бомбы
Антоний Шаламов18 уровень, Хабаровск
16 июня, 07:19
Нужно погуглить кодировку UTF-16 и выбрать любой значок. Скопировать код значка и поместить её в переменную String MINE или String FLAG. А если нужно прям картинку, тогда необходимо модифицировать сам движок Game.class. Он предоставляет только метод для помещения текста в ячейку
Fischerski15 уровень, Москва
16 июня, 08:33
получается нужно переписать метод setValue (что-то вроде такого, не помню уже точно как назывался этот метод)?
Антоний Шаламов18 уровень, Хабаровск
16 июня, 10:26
Не совсем, движок взаимодействует с библиотекой JavaFx. Я недостаточно разбираюсь, чтобы познать тонкости того, что происходит внутри этого всего, но примерно(я так думаю) там происходит вот что: формируется несколько массивов, равных размеру того, что мы создаём, когда вызываем метод setScreenSize. В одном массиве хранятся значения цвета(из enum Color), в другом хранятся как раз строки(либо пустые, либо содержат то, что мы передаём методом setCellValue(там есть и другой, который устанавливает одновременно и цвет и строку в ячейку)). Т. е., исходя из того, как работает движок, невозможно установить в ячейку свою произвольную картинку, можно только конкретный символ, уже существующий в общепринятой таблице символов. Чтобы можно было установить произвольную картинку, нужно полностью переделывать логику работы движка. А как это сделать, тут уж моих знаний недостаточно, сожалею(((
Fischerski15 уровень, Москва
16 июня, 13:34
На чем еще можно писать подобные игрушки (я имею в виду аналог JavaFx), не в курсе?
Антоний Шаламов18 уровень, Хабаровск
16 июня, 15:50
Не, тут я не помощник.. JavaFX это типа библиотека, облегчающая написание типичных игрушек, как я понимаю. Это зависит от знаний твоих, когда у тебя есть задача и ты используешь удобные тебе инструменты для реализации. Инструментов - много, под разные задачи, тут только опыт поможет, которого у меня практически нет)
Lizaveta:)13 уровень, Киев
19 июня, 05:33
Небольшое уточнение, JavaFX это уже фреймворк, который облегчает создание графического интерфейса, он используеться чаще всего не для типичных игр, а когда нужно создать простой и понятный пользователю интерфейс для десктопного приложения. Для написания игр сществует большое множество библиотек от обработки изображений до каких-то готовых команд, тут уже не знаю даже что конкретно посоветовать)
Кирилл23 уровень, Москва
29 мая, 18:52
Если IDE не видит engine, не импортируются классы: 1) Нажимаем Ctrl + Alt + Shift + S или File -> Project Structure 2) В левой колонке выбираем - Modules, в средней - 8.Games, в правой нажимаем на плюсик -> JARs or directories 3) Выбираем файл JavaRushTasks\8.Games\lib\desktop-game-engine.jar
Ярослав0 уровень
22 мая, 05:49
что то классов нет!
Andrey Khalepov18 уровень, Владивосток
20 мая, 08:06
Не пойму что не нравится валидатору. Подскажите кто знает. Выводил в консоль содержимое массива. Все там проинициализировано. private void createGame() { for (int i = 0; i < SIDE; i++) { for (int j = 0; j < SIDE; j++) { gameField[i][j] = new GameObject(i, j); setCellColor(i, j, Color.ORANGE); } } }
Антоний Шаламов18 уровень, Хабаровск
20 мая, 13:01
У игрового поля и у матрицы системы координат реверсированы относительно друг друга. Попробуйте этот цикл не на квадратной матрице, а на прямоугольной. Почему ошибка?
Alex Go24 уровень, Apatity
20 мая, 17:33
В Вашем случае вот так верно:
gameField[j][i] = new GameObject(i, j);
Andrey M.19 уровень, Санкт-Петербург
15 мая, 11:09
Ребят подскажите, пишу игру в Идеи, но условие получил только первого уровня из 16-ти. Сделал уже 3 уровня на сайте, а как получать новые шаги заданий в идеи?
Ivan8 уровень, Санкт-Петербург
17 мая, 17:31
Нашел решение - оказывается, в IDEA новые условия заданий надо открывать как отдельные новые задачи. Они становятся доступными в общем списке задач.
Andrey M.19 уровень, Санкт-Петербург
18 мая, 08:22
Точняк))) Спасибо Бро! )) 👍
10 мая, 18:52
Igor Tarasov18 уровень, Свободный, Белебей
23 июня, 06:13
поломанный вариант какой то