Сапер
Рекомендованный уровеньУровень
5+
Лет 10 назад в народе ходила примета: если офисный сотрудник чересчур сосредоточенно смотрит в экран и столь же сосредоточенно периодически кликает мышкой, скорее всего, там открыта игра «Сапер». Напомним тем, кто уже забыл, и расскажем другим, кто в силу возраста эту эпоху пропустил: «Сапер» — одна из самых популярных офисных игр, которая поставлялась вместе с Microsoft Windows. И даже сегодня, если вы сидите за компьютером с операционной системой этого семейства, то «Сапер» либо уже там установлен (просто наберите в поиске ОС слово «Сапер» или «Minesweeper»), либо его можно загрузить бесплатно из Microsoft Store. Многие Linux-сборки, например KDE и GNOME, также обзавелись похожими играми. В отличие от большинства других «убивалок времени», в этой игре отлично соблюдён баланс ходов логических и ходов наудачу, что делает «Сапера» одновременно очень увлекательной и… чуть-чуть менее бессмысленной, чем другие игры этого класса. Итак, у нас есть поле, разделённое на квадраты. Какие-то из них «заминированы», но сколько таковых и где они, мы не в курсе. Наша цель — открыть все незаминированные квадраты и не подорваться. Вы открываете квадрат левой кнопкой мыши, и если под ней мины нет, то появится число, означающее количество мин, расположенных по соседству с открытой ячейкой. Теперь нужно немного посчитать и предположить, какие ячейки можно открывать, а какие следует пометить, как заминированные. И так до победы или подрыва. В Windows разработчики встроили эту игрушку для того, чтобы люди учились управляться с мышкой (да, были времена, когда у компьютера её не было, приходилось довольствоваться только клавиатурой). Но на самом деле история «Сапера» ещё более древняя, чем история Microsoft, и её предки были доступны ещё на мейнфреймах в шестидесятых годах прошлого столетия… Впрочем, речь сейчас не об этом, а о том, чтобы создать собственную версию «Сапера»! Правила у нашей «головоломки с риском» будут точь-в-точь такими, как описано выше. Мы на JavaRush уже разделили эту непростую задачу на подзадачи и будем подсказывать вам, что делать. Дерзайте.
Комментарии (60)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
Сергей24 уровень, Санкт-Петербург
позавчера, 12:50
Версия игры с возможностью рестарта, заработком жизни за 1000 очков и отслеживанием количества оставшихся флагов: https://javarush.ru/projects/apps/823
Алексей4 уровень, Ульяновск
среда, 12:46
В подзадаче 4/16 "...для каждой ячейки массива gameField нужно вызвать метод setCellColor(int, int, Color)" , в классе Game Object нужно создать метод setCellColor? Откуда его взять?
Divertitto40 уровень
среда, 14:50
Он находится в классе Game, родителе класса MinesweeperGame
IU-Kob11 уровень, Санкт-Петербург
9 декабря, 07:42
Здравствуйте. Подскажите пожалуйста работает ли данный квест без подписки?
9 декабря, 11:24
Добрый день! Да, вы можете решать задачи из данного раздела без подписки.
Владислав10 уровень
9 декабря, 19:01
Я дико извиняюсь, но вы не подскажите, как проходить данные квесты? Не вижу никаких уроков?
8 декабря, 09:32
Ну и второе: А нельзя было сделать крестик для закрытия окна игры? Так раздражает каждый раз его через Alt+F4 закрывать....
Divertitto40 уровень
8 декабря, 10:52
Можешь в идее остановить процесс
8 декабря, 12:46
Могу, но все равно не удобно... Крестик на окне был бы привычнее )
8 декабря, 09:29
Может, конечно, я не прав, но эта история с массивами: "Координаты поля в привычном нам виде (х,у), координаты объектов - в перевернутом (у,х)." Работает она только с таким эмулятором и при условии квадратности поля. Достаточно сделать поле прямоугольным, как в обычном сапере, все сразу полетит в ArrayIndexOutOfBoundsException. Может, создатели прокомментируют как то, зачем было сделано именно так?
Divertitto40 уровень
8 декабря, 10:55
Вот здесь ты найдешь ответ 4. Массивы
8 декабря, 12:45
Я не нашел ответа на вопрос почему я не могу использовать прямоугольное поле ((( Ибо для этого придется в голове инвертировать...
Pavlo Plynko40 уровень, Киев
9 декабря, 14:37
Прямоугольное поле тоже можно использовать. Если уточнишь вопрос - постараюсь ответить.
Pavlo Plynko40 уровень, Киев
9 декабря, 14:42
Вот пример прямоугольного поля: https://javarush.ru/projects/apps/26 Все работает без ArrayIndexOutOfBoundsException.
9 декабря, 18:54
Змейку сам не писал, никак не смогу прокомментировать, про квадратное поле было про сапера. Там объект класса с координатами (x,y) хранит признак для точки (y,x), а объект класса с координатами (y,x) хранит признак для точки (x,y), исходя из задания.
Pavlo Plynko40 уровень, Киев
9 декабря, 19:32
Вродь нету в сапере такого. Изначальная фраза: "Координаты поля в привычном нам виде (х,у), координаты объектов - в перевернутом (у,х)." - неверна. Здесь: gameField[y][x] - x и y это не координаты объектов, а индексы двумерного массива. А вот и прямоуголный сапер: https://javarush.ru/projects/apps/869
понедельник, 10:03
Не нашел исходного кода. Переписать так. чтобы было прямоугольное поле,конечно. можно. Но при попытке последовательно сдать этот код валидатору он его не примет, как раз из-за проблем с обработкой массивов. Хотя, пожалуй, я слишком много требую от такой системы.
Pavlo Plynko40 уровень, Киев
понедельник, 10:52
Примет.
Иван22 уровень, Санкт-Петербург
8 декабря, 08:23
Error: Could not find or load main class com.javarush.games.minesweeper.MinesweeperGame Caused by: java.lang.NoClassDefFoundError: javafx/application/Application JavaFx есть, Ubuntu 18
Divertitto40 уровень
8 декабря, 10:55
У тебя java 11?
Иван22 уровень, Санкт-Петербург
8 декабря, 11:08
10-ая openjdk 10.0.2 2018-07-17 OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4) OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4, mixed mode)
Илья М22 уровень, Москва
9 декабря, 15:27
https://javarush.ru/help/13363
Иван22 уровень, Санкт-Петербург
понедельник, 13:56
Не помогло
Илья М22 уровень, Москва
четверг, 11:07
там помимо добавления файла fx из идеи. Нужно дописать параметры запуска. Гуглил это, не помню точно где. Но в итоге всё работает.
Pavlo Plynko40 уровень, Киев
5 декабря, 15:08
Nick14 уровень
5 декабря, 09:32
Прикольно находиться в первых рядах, кто опробовал задачки =)
Riccio13 уровень, Москва
4 декабря, 15:27
Координаты поля в привычном нам виде (х,у), координаты объектов - в перевернутом (у,х).
gameField[x][y] = new GameObject(y, x);
Divertitto40 уровень
5 декабря, 07:45
В точности, да наоборот
Серёга18 уровень
4 декабря, 11:07
Прошёл 8/16. Ни одной ошибки от валидатора. Не понимаю что не так...


У меня у одного так? Делаю в браузере.
Divertitto40 уровень
4 декабря, 11:55
Создавай топик в хелпе, посмотрим
Nick14 уровень
5 декабря, 09:30
как говорил Том из Том и Джери... "Не верьте им!" Поэтому я всегда проверяю сначала на общий результат, пишу вывод на экран, а потом еще через дебагер смотрю ожидаемые значения. А лучше через unit test прогонять, так сказать делать по человечески =)
Серёга18 уровень
9 декабря, 17:46
Мой сапёр. Наслаждайтесь игрой :)