Сапер

Рекомендованный уровеньуровень
5+
Лет 10 назад в народе ходила примета: если офисный сотрудник чересчур сосредоточенно смотрит в экран и столь же сосредоточенно периодически кликает мышкой, скорее всего, там открыта игра «Сапер». Напомним тем, кто уже забыл, и расскажем другим, кто в силу возраста эту эпоху пропустил: «Сапер» — одна из самых популярных офисных игр, которая поставлялась вместе с Microsoft Windows. И даже сегодня, если вы сидите за компьютером с операционной системой этого семейства, то «Сапер» либо уже там установлен (просто наберите в поиске ОС слово «Сапер» или «Minesweeper»), либо его можно загрузить бесплатно из Microsoft Store. Многие Linux-сборки, например KDE и GNOME, также обзавелись похожими играми. В отличие от большинства других «убивалок времени», в этой игре отлично соблюдён баланс ходов логических и ходов наудачу, что делает «Сапера» одновременно очень увлекательной и… чуть-чуть менее бессмысленной, чем другие игры этого класса. Итак, у нас есть поле, разделённое на квадраты. Какие-то из них «заминированы», но сколько таковых и где они, мы не в курсе. Наша цель — открыть все незаминированные квадраты и не подорваться. Вы открываете квадрат левой кнопкой мыши, и если под ней мины нет, то появится число, означающее количество мин, расположенных по соседству с открытой ячейкой. Теперь нужно немного посчитать и предположить, какие ячейки можно открывать, а какие следует пометить, как заминированные. И так до победы или подрыва. В Windows разработчики встроили эту игрушку для того, чтобы люди учились управляться с мышкой (да, были времена, когда у компьютера её не было, приходилось довольствоваться только клавиатурой). Но на самом деле история «Сапера» ещё более древняя, чем история Microsoft, и её предки были доступны ещё на мейнфреймах в шестидесятых годах прошлого столетия… Впрочем, речь сейчас не об этом, а о том, чтобы создать собственную версию «Сапера»! Правила у нашей «головоломки с риском» будут точь-в-точь такими, как описано выше. Мы на JavaRush уже разделили эту непростую задачу на подзадачи и будем подсказывать вам, что делать. Дерзайте.
Комментарии (663)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
unite
Уровень 23
Expert
2 марта, 08:38
Метод onMouseLeftClick(int, int) должен вызывать метод restart() и ничего не делать, если игра остановлена. Мені здається тут помилка на 15 рівні. Тому що як раз якщо гра зупиненя треба виклаикати estart() , якщо не зупинена то openTile()
Anonymous #3177672
Уровень 30
28 января, 17:02
Хорошая задача, интересная логика, но один момент "не зашел". Зачем объект-клетку с координатами (x,y) сохранять в ячейку матрицы с индексами [y],[x]? Ведь логичнее в [x],[y], это понятней! На начальных этапах задачи валидатор не принимает код, если сохранять в ячейку [x],[y]. Ладно бы игровое поле и матрица были прямоугольными, так здесь они квадратные! А потом пишешь обработку кликов мыши, запускаешь и удивляешься, почему клетки открываются в самых неожиданных местах🤯
Евгений JackSun
Уровень 28
Expert
21 февраля, 12:55
Суть в том, что координатная сетка игрового поля и массива разные и получается, что в массиве хранится зеркально-отражённое по диагонали игровое поле. Просто распиши индексы ячеек на листочке и увидишь сам. Этот вопрос ещё раз поднимется в игре 2048.
Ivan Team Lead в Яндекс
20 января, 16:35
На 15 уровне последнее условие непонятно сформулировано, надо было "Метод onMouseLeftClick(int, int) должен вызывать метод restart() если игра остановлена"
Viktor Ustenko
Уровень 17
Expert
8 января, 20:35
Підкажіть чому в мене в класі MinesweeperGame змінився код який я писав на якийсь інший? Коли я перейшов на інший рівень
fitinconatct
Уровень 22
15 января, 18:39
перейди на вкладку "популярные" возможно там ответ (пост про обнуление).
Евгений JackSun
Уровень 28
Expert
21 февраля, 12:58
Тебе добавили дополнительный метод. А т.к. ты всё равно делал всё по инструкции, то тебе выдали авторский код, который делает то же самое (+ доп.метод)
Михаил Романец Аналитик в ПервыйБИТ
5 января, 16:42
Использую macOS, openjdk19, javafx-sdk-19. Выполнил уже все действия по инструкции (добавление lib, edit configurations, откатывался до jdk8), также искал инфу по интернету - ничего не помогает, либо в финале данная ошибка при openjdk19, javafx-sdk-19 (см. скрины). Кто смог на macOS настроить javaFX помогите пж. Отмечу, что если создавать отдельный проект javaFX, то всё работает корректно.
Евгений JackSun
Уровень 28
Expert
16 февраля, 11:44
В играх вместо метода main используется метод initialize
28 декабря 2022, 16:53
Ребят, как заменить или убрать "мультяшную" рамку ????
Алексей
Уровень 26
24 января, 19:00
Нашел решение ?
25 января, 07:45
да))
Алексей
Уровень 26
25 января, 18:57
Не томи, делись инфой )
26 января, 10:25
Вот эту картинку надо менять на нужную тебе
Алексей
Уровень 26
28 января, 14:31
Спасибо
Anonymous #3101171
Уровень 1
24 декабря 2022, 17:27
не выполняется 3ий пункт, в чем причина?
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(gameField[i][j].x, gameField[i][j].y, Color.GRAY);
            }
        }
    }
Elbek Backend Developer в VENKON GROUP
27 декабря 2022, 06:34
у меня тоже самое
Denys Sukhoivan
Уровень 22
Expert
23 декабря 2022, 11:12
Всем привет, не могу запустить игру. Выдает инфу что типо не может найти. Помогите Братья и Сестры!
Евгений JackSun
Уровень 28
Expert
16 февраля, 10:58
ответы в 20м уровнев последнем уроке
Максим
Уровень 28
14 ноября 2022, 13:59
Заходите посмотреть на мою версию игры Сапёр . Будет приятно ваше мнение
BenderRodriges42
Уровень 4
18 декабря 2022, 09:53
ccыль пустая
EmilyKlard
Уровень 37
4 ноября 2022, 09:24
Не могу обновить условие в IDEA, как это сделать?