Простая игра со стрельбой

В данном уроке мы сделаем очень простую игру со стрельбой с использованием jQuery. Правила у игры очень простые - нужно стрелять в злодеев, а полицейского не трогать. Целиться надо с помощью мышки, а стрелять - левой кнопкой.

HTML
Код HTML содержит 3 основных элемента div: панель кнопок и статистики, основное поле игры и финальное сообщение, которое выводится по завершению игры.

Панель кнопок и статистики
Здесь выводится информация о количестве промахов и удачных выстрелов, а также кнопка для запуска игры.

<div id="stat">
    <span id="hit">0 Hit</span>
    &nbsp;
    <span id="miss">0 Miss</span>
    &nbsp;
    <a id="btnstart" href="javascript://">Play &darr;</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">
   Спасибо за игру. Нажмите &quot;Играть&quot;, чтобы запустить игру снова.
</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");
}

Теги:
игра
Добавлено: 26 Апреля 2018 06:48:58 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...