Сапер

Рекомендованный уровеньУровень
5+
Лет 10 назад в народе ходила примета: если офисный сотрудник чересчур сосредоточенно смотрит в экран и столь же сосредоточенно периодически кликает мышкой, скорее всего, там открыта игра «Сапер». Напомним тем, кто уже забыл, и расскажем другим, кто в силу возраста эту эпоху пропустил: «Сапер» — одна из самых популярных офисных игр, которая поставлялась вместе с Microsoft Windows. И даже сегодня, если вы сидите за компьютером с операционной системой этого семейства, то «Сапер» либо уже там установлен (просто наберите в поиске ОС слово «Сапер» или «Minesweeper»), либо его можно загрузить бесплатно из Microsoft Store. Многие Linux-сборки, например KDE и GNOME, также обзавелись похожими играми. В отличие от большинства других «убивалок времени», в этой игре отлично соблюдён баланс ходов логических и ходов наудачу, что делает «Сапера» одновременно очень увлекательной и… чуть-чуть менее бессмысленной, чем другие игры этого класса. Итак, у нас есть поле, разделённое на квадраты. Какие-то из них «заминированы», но сколько таковых и где они, мы не в курсе. Наша цель — открыть все незаминированные квадраты и не подорваться. Вы открываете квадрат левой кнопкой мыши, и если под ней мины нет, то появится число, означающее количество мин, расположенных по соседству с открытой ячейкой. Теперь нужно немного посчитать и предположить, какие ячейки можно открывать, а какие следует пометить, как заминированные. И так до победы или подрыва. В Windows разработчики встроили эту игрушку для того, чтобы люди учились управляться с мышкой (да, были времена, когда у компьютера её не было, приходилось довольствоваться только клавиатурой). Но на самом деле история «Сапера» ещё более древняя, чем история Microsoft, и её предки были доступны ещё на мейнфреймах в шестидесятых годах прошлого столетия… Впрочем, речь сейчас не об этом, а о том, чтобы создать собственную версию «Сапера»! Правила у нашей «головоломки с риском» будут точь-в-точь такими, как описано выше. Мы на JavaRush уже разделили эту непростую задачу на подзадачи и будем подсказывать вам, что делать. Дерзайте.
Комментарии (126)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Viktor Gromov11 уровень
10 августа, 14:37
Немного побомблю. Решил денек потратить на это весьма увлекательное дело. Прошел злополучный 7 шаг, из-за которого в прошлый раз я сбросил прогресс (а проблема была в моем непонимании работы с координатами). И теперь я наконец-то могу опубликовать игру! СТОП Публикую я значит игру, мне предлагают в нее поиграть на сайте, а тут все через ****! Во-первых, масштаб. Изначально открывается не все поле, а лишь одна клетка с размером во все поле. Решается масштабированием страницы в браузере (при этом надо просто поменять и вернуть, чтобы баг исправился). Ну ладно, это была бы мелочь, если бы не ВО-ВТОРЫХ. Во-вторых, клетки открываются по диагонали, а не как положено. И тут уже танцы с бубном не помогают. В-третьих, когда открывается по диагонали, ему совершено все равно, мина там или нет. Он открывает, а следующая мина. Что говорите, вы не хотели ее открывать? Извините, но это game over. Исправьте, пожалуйста, ошибки. Рано вы решили убрать надпись "BETA" с этой вкладки.
progr7 уровень
10 августа, 02:49
Как считаете с какого уровня лучше начинать писать игру сапер? я не про доступный уровень. а про тот с которого лучше всего начать?
WantToSleep19 уровень, Москва
понедельник, 12:15
Чувак, c 10ого в самый раз (если вы не изучали никакие ЯП ранее)
Кирилл Анацкий7 уровень, Минск
6 августа, 19:08
Не могу запустить в IDE ( intelij) , плагин работает. Может нужно что-то подкрутить, настроить? У меня запускается Solution (старые задачи/файлы/ классы, не знаю как правильно) Короче я туповат, помогите
Regina40 уровень, Киев
7 августа, 15:07
Обратитесь, пожалуйста, на support@javarush.ru со скринами проблемы.
Антон Силяков12 уровень, Новосибирск
3 августа, 06:51
Игра работает, а что не нравиться проверяющему?
Антон Силяков12 уровень, Новосибирск
2 августа, 12:22
OMG!!! Я вернулся к этому через почти полгода!!! И после трех упорных дней я прошел 6й шаг и перешел на 7-й! УРАААА!
Кирилл Ряжский15 уровень, Москва
18 июля, 08:41
В опубликованные игры невозможно играть, ячейки открываются вверх и влево по диагонали до конца поля, само поле отображается лишь после того, как развернешь на весь экран. Во всех браузерах попробовал. Да и логика из игры не учтена, у меня нельзя первым кликом попасть в мину, а опубликовав, попал. Когда доработают этот момент? Хотелось бы нормально поделиться игрой в соцсетях, а таким стыдно поделиться =(
Михаил Новиков30 уровень, Пермь
22 июля, 11:19
Ранее в комментариях уже было про это, сам тоже столкнулся. У вас метод getNeighbors использует try-catch? Если да, попробуйте убрать try-catch и избежать выхода за пределы массива иным способом (if). Мне помогло. Мой if
if (i!=-1 && j!=-1 && i!=SIDE && j!=SIDE)
Кирилл Ряжский15 уровень, Москва
23 июля, 08:00
Спасибо, попробую, результат сообщу.
Сергей11 уровень, Екатеринбург
10 августа, 17:01
Ого, а может лучше использовать Math.max() и Math.min()?
Anatoly4 уровень
31 мая, 13:50
Правда достаточно 5 уровней Джавараша для начала работы над игрой?
Dabangg2 уровень
21 июня, 15:12
Мне вот со второго доступна, без подписки.
29 мая, 09:55
Здравствуйте! Метод openTile(int, int) должен отрисовывать MINE, если gameObject по текущим координатам является миной. Используй метод setCellValue(int, int, String). Метод openTile(int, int) должен отрисовывать количество соседей-мин, если gameObject по текущим координатам не является миной. Используй метод setCellNumber(int, int, int). Не пойму, что ему не нравится?
private void openTile(int x, int y) {
  gameField[x][y].isOpen = true;
  setCellColor(x, y, Color.GREEN);
  if(gameField[x][y].isMine)
    setCellValue(x, y, MINE);
  else
    setCellNumber(x, y, gameField[x][y].countMineNeighbors);
}
Александр18 уровень, Киев
23 мая, 14:16
Мда. Допилил до 16 лвл, можно публиковать, но багов в игре тьма
Иван2 уровень
19 мая, 12:08
Как сделать чтобы MinesweeperGame чтобы был наследников Game
Антон10 уровень
19 мая, 22:01