Сапер

Рекомендованный уровеньУровень
5+
Лет 10 назад в народе ходила примета: если офисный сотрудник чересчур сосредоточенно смотрит в экран и столь же сосредоточенно периодически кликает мышкой, скорее всего, там открыта игра «Сапер». Напомним тем, кто уже забыл, и расскажем другим, кто в силу возраста эту эпоху пропустил: «Сапер» — одна из самых популярных офисных игр, которая поставлялась вместе с Microsoft Windows. И даже сегодня, если вы сидите за компьютером с операционной системой этого семейства, то «Сапер» либо уже там установлен (просто наберите в поиске ОС слово «Сапер» или «Minesweeper»), либо его можно загрузить бесплатно из Microsoft Store. Многие Linux-сборки, например KDE и GNOME, также обзавелись похожими играми. В отличие от большинства других «убивалок времени», в этой игре отлично соблюдён баланс ходов логических и ходов наудачу, что делает «Сапера» одновременно очень увлекательной и… чуть-чуть менее бессмысленной, чем другие игры этого класса. Итак, у нас есть поле, разделённое на квадраты. Какие-то из них «заминированы», но сколько таковых и где они, мы не в курсе. Наша цель — открыть все незаминированные квадраты и не подорваться. Вы открываете квадрат левой кнопкой мыши, и если под ней мины нет, то появится число, означающее количество мин, расположенных по соседству с открытой ячейкой. Теперь нужно немного посчитать и предположить, какие ячейки можно открывать, а какие следует пометить, как заминированные. И так до победы или подрыва. В Windows разработчики встроили эту игрушку для того, чтобы люди учились управляться с мышкой (да, были времена, когда у компьютера её не было, приходилось довольствоваться только клавиатурой). Но на самом деле история «Сапера» ещё более древняя, чем история Microsoft, и её предки были доступны ещё на мейнфреймах в шестидесятых годах прошлого столетия… Впрочем, речь сейчас не об этом, а о том, чтобы создать собственную версию «Сапера»! Правила у нашей «головоломки с риском» будут точь-в-точь такими, как описано выше. Мы на JavaRush уже разделили эту непростую задачу на подзадачи и будем подсказывать вам, что делать. Дерзайте.
Комментарии (154)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Yuri Serebryakov22 уровень
2 часа назад
Что-то я не могу въехать что я делаю не так - http://prntscr.com/pwhghl. https://pastebin.com/3sbT1i1h
Александр Гуляев22 уровень, Москва
час назад
gameField не должен быть static
Олег13 уровень
5 часов назад
не пойму на 6 шагу в задание написано, что появился метод getNeighbors, только я не вижу чтобы он появился? или его нужно самому написать а еще почему переменная countMinesOnField работает как статическая, хотя создана без этого модификатора, как это требовалось в задании
Xokyopo1 уровень, Ухта
2 ноября, 12:57
Хер с ним уже на Swinge запилил...
Xokyopo1 уровень, Ухта
29 октября, 17:40
Что ни у кого нет такой ошибки что ли?
Ivan Gantimurov8 уровень, Новосибирск
7 октября, 08:31
Написал игру, в IDEA всё работает норм, опубликовал на сайте, игрушка работает некорректно в полном смысле этого слова. В чём дело может быть, понять не могу?
Иван Зубов31 уровень, Москва
7 октября, 11:53
а что пишет в ошибке?
Ivan Gantimurov8 уровень, Новосибирск
8 октября, 11:44
При нажатии на ячейку левой кнопкой мыши открываются все ячейки в право до конца поля или если попадается мина на данной строке и игра естественно завершается проигрышом игрока. В открывшихся ячейках не отображается количество соседей мин. Повторюсь, у меня на компе на IDEA через мой плагин игра ведёт себя корректно, всё работает как и должно, но она же загруженная (опубликованная ) на сайте работает так как я описал выше.Да и ещё, ячейки поля вообще не отображаются пока поле игры не развернёшь.
Олег13 уровень
8 часов назад
а каким образом вы наследуете класс от com.javarush.engine.cell.* как вообще работать с пакетами с javarush, я так понимаю, из нужно каким-то образом загрузить на локальную машину
Олег13 уровень
8 часов назад
разобрался)
Sergey20 уровень, Нижний Новгород
6 октября, 18:17
Уфф осилил всю за 5 часов...
Рита10 уровень, Санкт-Петербург
3 октября, 13:24
В Intellij IDEA нет поля у меня, хотя валидацию проходит. На самом сайте все норм. Подскажите, пожалуйста, как сделать что в Idea появилось поле.
kayrat0 уровень
1 октября, 14:23
whow i can go to clac??
Yerbol Sultanbayev9 уровень, Алматы
27 октября, 19:11
для начала не выпендриваться на паршивом английском, мистер Кайрат :)
30 октября, 13:16
Алматы знает толк ;) Я с Алматы тоже)
Yerbol Sultanbayev9 уровень, Алматы
30 октября, 15:13
Круто! Удачи в обучении!
Андрей Святогоров38 уровень, Москва
22 сентября, 19:36
Разработчики, вы угараете? Какая разница в том, в какой последовательности заполняется поле? По колонкам, по строкам, сверху вниз, снизу вверх? Только не надо мне рассказывать, про то, что в некоторых ситуация порядок важен. Как порядок заполнения, влияет на собственно само заполнение поля?
Александр32 уровень, Москва
12 сентября, 20:42
В метод createGame() внутри цикла добавляю
boolean isMine = (getRandomNumber(10)==0);
которую потом использую для передачи в конструктор GameObject и для инкремента countMinesOnField пишет "Убедись, что в методе createGame() вызывается метод getRandomNumber() с параметром 10."
Александр32 уровень, Москва
14 сентября, 17:52
В общем, пока я не перенес создание new GameObject[SIDE][SIDE] из метода initialize() в строку объявления переменной, он так и ругался на getRandomNumber() очень логично, черт возьми
Programmist Anton19 уровень, Одесса
19 сентября, 16:01
Обидно, вроде отличный курс, но валидатор постоянно так напрягает..
Greq4 уровень
28 сентября, 05:45
if (getRandomNumber(10) == 0) { isMine = true; countMinesOnField++; } else isMine = false; gameField [i][j] = new GameObject (j, i, isMine);
Александр32 уровень, Москва
28 сентября, 07:46
эт неважно. ругался он на getRandomNumber, но возникала ошибка из-за инициализации GameObject не там, где ожидал валидатор