Простая игра со стрельбой
В данном уроке мы сделаем очень простую игру со стрельбой с использованием jQuery. Правила у игры очень простые - нужно стрелять в злодеев, а полицейского не трогать. Целиться надо с помощью мышки, а стрелять - левой кнопкой.
HTML
Код HTML содержит 3 основных элемента div
: панель кнопок и статистики, основное поле игры и финальное сообщение, которое выводится по завершению игры.
Панель кнопок и статистики
Здесь выводится информация о количестве промахов и удачных выстрелов, а также кнопка для запуска игры.
<div id="stat"> <span id="hit">0 Hit</span> <span id="miss">0 Miss</span> <a id="btnstart" href="javascript://">Play ↓</a> </div>
Основное поле игры
Здесь размещаются персонажи игры - три плохиша и один кибальчиш.
<div id="container"> <div id="char1" class="character enemy1"></div> <div id="char2" class="character enemy2"></div> <div id="char3" class="character enemy3"></div> <div id="char4" class="character ally"></div> </div>
Финальное сообщение
Выводится только по завершению игры, в остальное время - скрыто.
<div id="message"> Спасибо за игру. Нажмите "Играть", чтобы запустить игру снова. </div>
JQuery
Логика игры предельно проста. В начале игры все персонажи скрыты и размещаются в случайном порядке в внутри контейнера. Из всех персонажей только один будет показан в случайном порядке.
Когда игра запускается, она будет длиться 30 секунд. Все состояния переводятся в значения по умолчанию. Когда игрок попадает в плохиша, запускается эффект взрыва. Если попасть в кибальчиша, то будет запущен эффект горизонтального отскока. Все используемые эффекты реализованы в библиотеке jQuery UI.
var miss = 0; var hit = 0; $(document).ready(function() { var play; $("#btnstart").click(function(){ startplay(); }); function startplay() { $("#message").fadeOut('slow'); $(".character").fadeOut('slow'); $("#miss").html("0 мимо"); $("#hit").html("0 в цель"); miss = 0; hit = 0; $("#btnstart").css("color", "#e3e3e3"); $("#btnstart").unbind("click"); play = setInterval(scramble, 1800); setTimeout(function() { clearInterval(play); $("#btnstart").css("color", "#333333"); $("#btnstart").bind("click", startplay); // Выводим финальное сообщение var containerPos = $('#container').offset(); $("#message").animate({ top: containerPos.top, left: containerPos.left }, 'fast', function() { setTimeout(function() { $("#message").fadeIn('slow'); $(".character").fadeIn('slow'); }, 500); }); }, 30000); } $(".character").click(function() { if ($(this).hasClass("ally")) { $(this).effect("bounce", { times: 2, direction: 'left' }, 300); $(this).slideUp("fast"); miss++; $("#miss").html(miss + " мимо"); } else { $(this).effect("explode", 500); hit++; $("#hit").html(hit + " в цель"); } }); }); function randomFromTo(from, to){ return Math.floor(Math.random() * (to - from + 1) + from); } function scramble() { var children = $('#container').children(); var randomId = randomFromTo(1, children.length); moveRandom('char'+randomId); setTimeout(function(){ $("#char"+randomId).slideDown('fast'); }, 500); setTimeout(function() { $("#char"+randomId).slideUp('fast'); }, 1500); } function moveRandom(id) { /* Получаем положение контейнера и размер * -- метод доступа: cPos.top и cPos.left */ var cPos = $('#container').offset(); var cHeight = $('#container').height(); var cWidth = $('#container').width(); // Получаем отступы прямоугольника (предполагаем, что все отступы равны) var pad = parseInt($('#container').css('padding-top').replace('px', '')); // Получаем размер перемещаемого прямоугольника var bHeight = $('#'+id).height(); var bWidth = $('#'+id).width(); // Устанавливаем максимум для положения maxY = cPos.top + cHeight - bHeight - pad; maxX = cPos.left + cWidth - bWidth - pad; // Устанавливаем минимум для положение minY = cPos.top + pad; minX = cPos.left + pad; // Устанавливаем новое положение newY = randomFromTo(minY, maxY); newX = randomFromTo(minX, maxX); $('#'+id).animate({ top: newY, left: newX }, 'slow', function() { }); }
CSS
Используемый для игры код CSS. Для фона задействован шаблон, для каждого из четырёх персонажей используется свое изображение, а курсор мыши устанавливается в виде прицела.
body { cursor: url('img/target.gif'); background: #ffffff url("img/trentanove.gif") repeat top right; } #container { background: #ffffff url("img/trentaquattro.gif") repeat top right; margin: 0 auto; border: 5px solid #999999; width: 600px; height: 350px; padding: 20px 50px; cursor: url("img/target.gif"), pointer; -webkit-border-radius: .5em; -moz-border-radius: .5em; border-radius: .5em; } #message { background: #999999; margin: 0 auto; border: 5px solid #999999; width: 600px; height: 350px; padding: 20px 50px; -webkit-border-radius: .5em; -moz-border-radius: .5em; border-radius: .5em; position: absolute; opacity: 0.8; filter:alpha(opacity=80); text-align: center; font-size: 28px; color: #000000; display: none; } .character { border: 2px solid #f3f3f3; width: 95px; height: 95px; position: absolute; display: none; -webkit-border-radius: .5em; -moz-border-radius: .5em; border-radius: .5em; cursor: url('img/target.gif'), pointer; } .character:hover { opacity: 0.6; filter:alpha(opacity=60); } .enemy1 { background: url("img/enemy1.jpg"); } .enemy2 { background: url("img/enemy2.jpg"); } .enemy3 { background: url("img/enemy3.jpg"); } .ally { background: url("img/ally.jpg"); }
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/IU3gHQFWFJU/lessons.php
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-09-30 » Как быстро запустить Laravel на Windows
- 2024-09-25 » Next.js
- 2024-09-05 » OpenAI рассказал, как запретить ChatGPT использовать содержимое сайта для обучения
- 2024-08-28 » Чек-лист: как увеличить конверсию интернет-магазина на примере спортпита
- 2024-08-01 » WebSocket
- 2024-07-26 » Интеграция с Яндекс Еда
- 2024-07-26 » Интеграция с Эквайринг
- 2024-07-26 » Интеграция с СДЕК
- 2024-07-26 » Интеграция с Битрикс-24
- 2024-07-26 » Интеграция с Travelline
- 2024-07-26 » Интеграция с Iiko
- 2024-07-26 » Интеграция с Delivery Club
- 2024-07-26 » Интеграция с CRM
- 2024-07-26 » Интеграция с 1C-Бухгалтерия
- 2024-07-24 » Что такое сторителлинг: техники и примеры
- 2024-07-17 » Ошибка 404: что это такое и как ее использовать для бизнеса
- 2024-07-03 » Размещайте прайс-листы на FarPost.ru и продавайте товары быстро и выгодно
- 2024-07-01 » Профилирование кода в PHP
- 2024-06-28 » Изучаем ABC/XYZ-анализ: что это такое и какие решения с помощью него принимают
- 2024-06-17 » Зачем вам знать потребности клиента
- 2024-06-11 » Что нового в работе Яндекс Метрики: полный обзор обновления
- 2024-06-11 » Поведенческие факторы ранжирования в Яндексе
- 2024-06-11 » Скорость загрузки сайта: почему это важно и как влияет на ранжирование
- 2024-05-27 » Подборка сервисов для расшифровки аудио в текст
- 2024-05-27 » PostgreSQL 16. Изоляция транзакций. Часть 2
- 2024-05-06 » Как настраивать конверсионные стратегии: работа над ошибками
- 2024-04-22 » Комментирование кода и генерация документации в PHP
- 2024-04-22 » SEO в России и на Западе: в чем основные отличия
- 2024-04-22 » SEO для международного масштабирования
- 2024-04-22 » Как использовать XML-карты для продвижения сайта
Самый лучший человек тот, который живет преимущественно своими мыслями и чужими чувствами, самый худший сорт человека - который живет чужими мыслями и своими чувствами. Из различных сочетаний этих четырех основ, мотивов деятельности - все различие людей. Люди, живущие только своими чувствами, - это звери. Толстой Лев Николаевич - (1828-1910) - великий русский писатель. Его творчество оказало огромное влияние на мировую литературу |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.