Флажки бы чуть более выразительные, а то красная палочка… ) Но это все мелкие придирки.
>> Так что когда будет время, я могу продолжить про кодинг в GWT
Обязательно продождайте. Лучше всего учиться на примерах таких вот не сложных игрушек, ведь по ним всегда интереснее изучать новые технологии, я это гарантирую. (-:
большое поле (100х100 клеток) на достаточно мощном компе рисуется около 4 минут, при клике на любую клетку всплывает красивое окошечко с ошибками, которое можно передвигать. (FF 3.5.5)
специально проверил с секундомером. FF — 3 минуты, 23 секунды (во время отрисовки кушает 600Мб оперативной памяти) хромимум — рисует всё практически мгновенно.
Ого. Не проверял в FF столь большие поля. Оптимизацию начну именно с алгоритмов, которые кушают так много. В хроме вообще все прекрасно — не стоило в нем отлаживать :)
Да, от этого я не пытался пока избавлятся. При первом клике был бы не такой хороший отклик, т.к. после него генерировалось бы все поле. Т.к. это происходит не быстро, время на начальные издержки решил потратить на время, пока вы тянетесь от кнопки до поля :) На самом деле, в текущем коде добиться такого поведения не сложно — нужно лишь инициализацию запускать после первого клика. Как это делается с запуском таймера.
Вы можете оставить есть, но если первый клик попадает на бомбу, то перегенерировать поле. В таком случае долгий отклик будет лишь в 1 из 10 случаев, что не критично.
Либо генерировать перед началом 2 поля, в таком случае вероятность того что вы тыкните в клетку, которая будет в обеих полях бомбой — 0,1*0,1 = 0,01, что уже совсем ничтожно мало.
Ещё одно дополнение. в классическом сапёре между клетками нет границ. т.е. при нажатии в случайную область поля откроется клетка. а у вас при попадании на границу между клетками ничего не происходит. Это очень важно при установке рекордов.
А сможете сделать многопользовательского сапера? :) Я пробовал несколько лет назад, но из-за кривизны рук забросил.
Идея была в том, чтобы несколько человек в онлайне разминировали одно поле. Команда проигрывает, когда подрывается последний участник. Можно прикрутить рейтинги команд, давать одно и то же поле на прохождение разным командам и т.д.
Ну это лишь способ ведения рейтинга, группирования пользователей. Не вижу в этой задачи чего-либо сложного или интересного. И духа соревнования тут нет. Выигрыш в эту игру во многом зависит не только от внимания, но и от удачи.
Думал сделать виджет для вейва, но одновременная игра двух игроков — тоже сомнительное мероприятие на минном-то поле :)
А вообще, многопользовательские игры — тема для меня очень интересная. Так что если есть какие-либо предложения, с удовольствием выслушаю.
«Дабл-сапер»:
Играют два игрока на большом поле. Каждый игрок может не только разминировать клетки, но и ставить свои мины(!). При этом он видит их положение, аналогично тому как помеченные клетки с минами. Мины можно ставить только на закрытые клетки. Если противник поставил мину, то для соседних отрытых пересчитывается кол-во мин. Это нужно для того, чтобы соперник видел, что картина как-то изменилась и ему нужно подумать над ней еще разок.
Игрок побеждает, если:
— его противник подорвался
— если никто не взорвался, и он открыл больше клеток.
В чем смак игры: с одной стороны идет жесктое соревнование на время — вы на своем поле видите, как ваш противник открывает клетки (дополнительно в углу можно показывать сколько клеток вы отркыли, или же процент). В тоже время спешить нелья — одно неловкое движение и вы проиграли. Нужно очень четко следить за действиями противника — может оказаться так, что он откроет какую-то клетку, рядом с которой лежит «клондайк» — то есть свободная зона, которую вы можете у него перехватить и тем самым урвать у него клетки.
Но помимо этого можно делать «пакости» — поймать противника на невнимательности. Пока не продумал этот момент, но возможно надо ограничить кол-во мин, которые может поставить игрок. Чтобы это не порождало тупиков в игре.
Кстати, не обязательно играть в двоем — можно и большей компанией.
У меня много разных идей :). Если интересно, можно подумать совместно.
У меня как раз было желание сделать что-нибудь на GAE для саморазвития. Правда, я python-ист, с java вообще не работал. Поэтому хотел взять Django для разработки.
Вариант — две команды по несколько игроков (минимум по одному, максимум, например, по 5 в каждой команде) разминируют одно и то же поле. Разминированная часть и отмеченные мины засчитываются в пользу той или другой команды, так можно видеть, кто побеждает, например «23% — 34%, 12мин — 20мин». При этом начальное поле имеет слева и справа пустую область, то есть, одна команда начинает открывать поле с левой стороны, другая с правой, и обе видят в самом начале открытую границу с указанным количеством мин на своей границе.
Действительно, многое зависит от удачи, но есть место и для стратегии: например, слабых игроков в каждой команде можно использовать для проверки спорных мест — «Ваня, проверь вот здесь». Ваня подорвался, значит мина была, но остальная команда продолжает разминирование. :)
Не знаю, как сейчас обстоят дела с оперой и правым кликом, но раньше, с аналогичной задачей написания кроссбраузного сапера, для оперы (7 или 8 была тогда, не помню) я справился так:
Ессно обработка правых кликов должна быть включена:
Открываем маленькое окно (windows.open, width,height=«маленькая цифирь») за пределом видимости экрана (top,left=«большая цифирь»); и тут же скриптом, внутри этого окна, закрываем его. Тогда стандартная менюшка, которая вызывается в опере на правый клик, перебивается этим окном, и не показывается.
К сожалению исходники, за давностью лет, утеряны. Однако, насколько я вспоминаю, решение было не быстрым, но работало.
Ага, с оперой никто не заморачивается. Это мое личное решение проблемы (ему года 4 точно, и действительно долго кумекал, как перебить эту менюшку на правом клике), которое сейчас, как я думаю, может и не сработать из-за блокера всплывающих окон, однако надо проверять.
Сапер на GWT