Как стать автором
Обновить

Комментарии 43

Флажки бы чуть более выразительные, а то красная палочка… ) Но это все мелкие придирки.

>> Так что когда будет время, я могу продолжить про кодинг в GWT

Обязательно продождайте. Лучше всего учиться на примерах таких вот не сложных игрушек, ведь по ним всегда интереснее изучать новые технологии, я это гарантирую. (-:
Именно поэтому и написал. Практика — самое лучший способ изучить новую технологию.
большое поле (100х100 клеток) на достаточно мощном компе рисуется около 4 минут, при клике на любую клетку всплывает красивое окошечко с ошибками, которое можно передвигать. (FF 3.5.5)
Может все же 4 секнуды? У меня так вообще 2 на довольно среднем компе. Браузер Chromium.

Про ошибку подтверждаю:
Maximum call stack size excedded
Type: stack_overflow"

Еще надо бы сделать так, что при щелчке на поля из «Custom:» радиобокс сложности автоматом переключался на «Custom»
специально проверил с секундомером. FF — 3 минуты, 23 секунды (во время отрисовки кушает 600Мб оперативной памяти) хромимум — рисует всё практически мгновенно.
Ого. Не проверял в FF столь большие поля. Оптимизацию начну именно с алгоритмов, которые кушают так много. В хроме вообще все прекрасно — не стоило в нем отлаживать :)
Есть небольшая недоработка — у вас можно попасть на мину первым же кликом.

В оригинальном же сапере положение мин рассчитываются после первого клика и таким образом, что бы на нажатой клетке мин не было.
Да, от этого я не пытался пока избавлятся. При первом клике был бы не такой хороший отклик, т.к. после него генерировалось бы все поле. Т.к. это происходит не быстро, время на начальные издержки решил потратить на время, пока вы тянетесь от кнопки до поля :) На самом деле, в текущем коде добиться такого поведения не сложно — нужно лишь инициализацию запускать после первого клика. Как это делается с запуском таймера.
Вы можете оставить есть, но если первый клик попадает на бомбу, то перегенерировать поле. В таком случае долгий отклик будет лишь в 1 из 10 случаев, что не критично.

Либо генерировать перед началом 2 поля, в таком случае вероятность того что вы тыкните в клетку, которая будет в обеих полях бомбой — 0,1*0,1 = 0,01, что уже совсем ничтожно мало.
А как насчет того чтобы просто убрать мину если пользователь попал в нее и поставить в любом другом месте?
Дык а циферки-то, говорящие сколько мин рядом, пересчитать тоже надо.
Все правильно. В статье я написал, что циферки считаются после того, как игрок кликнул на поле. Так что этот вариант очень даже хороший.
Тогда да, извиняюсь что не заметил.
возможность быстро открывать поля должна быть по нажатию двух кнопок, средняя — колесо. неудобно )

Либо я еще не проснулся, либо вы меня обманываете.
Не приложилось
Только щас понял, что красная мина — не самый лучший способ показывать отсутствие этой мины. Я вас не обманываю :)
/me долго смотрел на картинку и так и не понял в чем проблема :)
В том, что если там где красный квадратик есть мина то сапер неправильно считает цифры — т.е. количество мин, соседних с ячейкой с цифрой.
В том-то и дело, что красным отмечается место, где _нет_ мины, т.е. где флажок был поставлен ошибочно.
Да… неоднозначно.
Может просто зачеркивать его <s>?
а. просто я сначала попробовал и когда уже смотрел на картинку, понимал, что мины там нет на самом деле :)
Ещё одно дополнение. в классическом сапёре между клетками нет границ. т.е. при нажатии в случайную область поля откроется клетка. а у вас при попадании на границу между клетками ничего не происходит. Это очень важно при установке рекордов.
Согласен, над этим работаю. Почему-то сразу не получилось уничтожить границы через CSS свойство border-collapse: collapse. Надо будет разобраться.


Извините, но играть довольно тяжело и необычно…
Могу предложить генерировать поле, после первого нажатия. Мой самый первый клик попал на мину, да я неудачник, но всё же =)
Во время тестирования я себя ощущал полнейшим неудачником — на поле из 100 клеток с 3 минами в первый же клик я попадался на мину :)
Мне кажется это удача)) у меня так никогда не получалось…
А сможете сделать многопользовательского сапера? :) Я пробовал несколько лет назад, но из-за кривизны рук забросил.

Идея была в том, чтобы несколько человек в онлайне разминировали одно поле. Команда проигрывает, когда подрывается последний участник. Можно прикрутить рейтинги команд, давать одно и то же поле на прохождение разным командам и т.д.
Ну это лишь способ ведения рейтинга, группирования пользователей. Не вижу в этой задачи чего-либо сложного или интересного. И духа соревнования тут нет. Выигрыш в эту игру во многом зависит не только от внимания, но и от удачи.

Думал сделать виджет для вейва, но одновременная игра двух игроков — тоже сомнительное мероприятие на минном-то поле :)

А вообще, многопользовательские игры — тема для меня очень интересная. Так что если есть какие-либо предложения, с удовольствием выслушаю.
«Дабл-сапер»:
Играют два игрока на большом поле. Каждый игрок может не только разминировать клетки, но и ставить свои мины(!). При этом он видит их положение, аналогично тому как помеченные клетки с минами. Мины можно ставить только на закрытые клетки. Если противник поставил мину, то для соседних отрытых пересчитывается кол-во мин. Это нужно для того, чтобы соперник видел, что картина как-то изменилась и ему нужно подумать над ней еще разок.
Игрок побеждает, если:
— его противник подорвался
— если никто не взорвался, и он открыл больше клеток.

В чем смак игры: с одной стороны идет жесктое соревнование на время — вы на своем поле видите, как ваш противник открывает клетки (дополнительно в углу можно показывать сколько клеток вы отркыли, или же процент). В тоже время спешить нелья — одно неловкое движение и вы проиграли. Нужно очень четко следить за действиями противника — может оказаться так, что он откроет какую-то клетку, рядом с которой лежит «клондайк» — то есть свободная зона, которую вы можете у него перехватить и тем самым урвать у него клетки.
Но помимо этого можно делать «пакости» — поймать противника на невнимательности. Пока не продумал этот момент, но возможно надо ограничить кол-во мин, которые может поставить игрок. Чтобы это не порождало тупиков в игре.

Кстати, не обязательно играть в двоем — можно и большей компанией.
Очень интересные идеи. Спасибо. Обязательно подумаю над этим. Вы аж зажгли во мне интерес в развитии идеи :)
У меня много разных идей :). Если интересно, можно подумать совместно.
У меня как раз было желание сделать что-нибудь на GAE для саморазвития. Правда, я python-ист, с java вообще не работал. Поэтому хотел взять Django для разработки.
Вы можете попробовать GWT-подобные решения или порты типа pyjamas.
Спасибо за наводку на «пижамас» :)
Оно еще и с GAE может работать.
Вариант — две команды по несколько игроков (минимум по одному, максимум, например, по 5 в каждой команде) разминируют одно и то же поле. Разминированная часть и отмеченные мины засчитываются в пользу той или другой команды, так можно видеть, кто побеждает, например «23% — 34%, 12мин — 20мин». При этом начальное поле имеет слева и справа пустую область, то есть, одна команда начинает открывать поле с левой стороны, другая с правой, и обе видят в самом начале открытую границу с указанным количеством мин на своей границе.

Действительно, многое зависит от удачи, но есть место и для стратегии: например, слабых игроков в каждой команде можно использовать для проверки спорных мест — «Ваня, проверь вот здесь». Ваня подорвался, значит мина была, но остальная команда продолжает разминирование. :)
Командная стратегия: «Мы закидаем их трупами» :)
Классная статья! Вроде для того, чтобы выиграть нужно открыть все пустые поля, а не только пометить все мины.
Не знаю, как сейчас обстоят дела с оперой и правым кликом, но раньше, с аналогичной задачей написания кроссбраузного сапера, для оперы (7 или 8 была тогда, не помню) я справился так:

Ессно обработка правых кликов должна быть включена:
Открываем маленькое окно (windows.open, width,height=«маленькая цифирь») за пределом видимости экрана (top,left=«большая цифирь»); и тут же скриптом, внутри этого окна, закрываем его. Тогда стандартная менюшка, которая вызывается в опере на правый клик, перебивается этим окном, и не показывается.

К сожалению исходники, за давностью лет, утеряны. Однако, насколько я вспоминаю, решение было не быстрым, но работало.
Спасибо, буду думать. Покликал оперой сайты типа гугладоков, ассемблу и прочее… Нигде правый клик не работает
Ага, с оперой никто не заморачивается. Это мое личное решение проблемы (ему года 4 точно, и действительно долго кумекал, как перебить эту менюшку на правом клике), которое сейчас, как я думаю, может и не сработать из-за блокера всплывающих окон, однако надо проверять.
Я тут, конечно, мимоходом. Для каждого поля у вас свой хэндлер создается?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации