Создание игр на javascript

Всем привет! В этом уроке я покажу, как можно создать игру головоломку на javascript!

Игра головоломка на JavaScript!

 

Как и во всех своих уроках по JavaScript в конце будет возможность посмотреть реальный пример, а также скачать его к себе на компьютер!

Итак, давайте начнем!

 

Описание игры

Вы наверняка уже встречались с такими играми, где вам нужно было правильно вставить числа и знаки чтобы получилось верное равенство. Именно такую игру мы сегодня с вами и создадим!

Чтобы все стало понятно, давайте рассмотрим просто пример на картинке:

Игровой интерфейс

Как видите, интерфейс игры состоит из шести квадратных текстовых полей. Некоторые поля уже заполнены (они не активны), а некоторые необходимо заполнить.

В данном случае, для того, чтобы перейти к 4 уровню, поля нужно заполнить так:

4 9 / 7 = 7

То есть необходимо вставить 9 и 7 соответственно порядку полей. Если ввести неправильно, то ничего не произойдет.

На самом деле, бывает, что головоломку можно решить несколькими способами, давайте рассмотрим такой пример:

1 ? ? 2 = 9

её можно решить, как:

1 8 / 2 = 9

или

1 1 - 2 = 9

И то, и то будет правильно.

Никаких кнопок нет, все предельно просто, заполняешь поля правильно – переходишь к следующему уровню, заполняешь неправильно – остаешься на месте и думаешь над головоломкой.

В данном уроке я решил создать 5 уровней, вы же, сможете изменить игру под свои нужды, например, добавив больше уровней.

 

Реализация

Реализовать подобную игру довольно таки несложно. Какие элементы игры нам понадобятся? А понадобятся нам 6 текстовых полей (input) и 1 блок, в который мы будет выводить номер текущего уровня, а также информацию о том, что игрок прошел все уровни и победил.

Давайте рассмотрим HTML верстку:

        <div id="wrap">
                <input class="num" maxlength="1" id="n1">
                <input class="num" maxlength="1" id="n2">
                <input class="num" maxlength="1" id="n3">
                <input class="num" maxlength="1" id="n4">
                <input disabled="disabled" value="=">
                <input class="num" maxlength="1" id="n5">
        </div>
        <div id="level">Уровень: 1</div>

Как видите, у нас есть общий блок с id wrap, в котором и находятся 6 полей. При этом, 5 из 6 полей имеют класс “num” – это необходимо для того, чтобы отличить те поля, которые можно задействовать в игровом процессе от поля, в котором всегда находится знак “=” (равно).

Также, у полей есть такой атрибут, как “maxlength”, он равен 1 и необходим для того, чтобы ограничить количество вводимых символов в поле, то есть в одно поле можно ввести только 1 знак.

После блока с идентификатором “wrap” идет div с id level – в нем будет выводиться информация о текущем уровне, а также о победе игрока. По умолчанию задан первый уровень.

Теперь давайте рассмотрим CSS стили:

#wrap{
    width: 924px;
        height: 150px;
    margin: 0 auto;
}
#wrap input{
    width: 150px;
    height: 150px;
    float: left;
    font-size: 100px;
        text-align: center;
}
#level{
    background: #3c8fb7;
    width: 200px;
    text-align: center;
    margin: 40px auto;
    color: #fff;
    font-size: 26px;
    padding: 6px;
    cursor: default;
}
  • #wrap – стили для общего блока с полями, блоку задана ширина (с учетом рамки каждого из полей), высота, а также, блок выровнен по центру;
  • #wrap input – стили для всех текстовых полей;
  • #level – стили для блока, в котором выводится информация о текущем уровне.

Итак, осталось самое интересное! Давайте рассмотрим и разберем JavaScript (JQuery) код:

$(document).ready(function(){

        var level = 1;
        var maxLevel = 5;
        var n1 = $('#n1');
        var n2 = $('#n2');
        var n3 = $('#n3');
        var n4 = $('#n4');
        var n5 = $('#n5');

        n2.val(4).attr('disabled','disabled');
        n3.val('-').attr('disabled','disabled');
        n4.val(9).attr('disabled','disabled');
        n5.val(5).attr('disabled','disabled');  

        $('#wrap .num').keyup(function (){

                if( eval( n1.val() + n2.val() + n3.val() + n4.val() + '==' + n5.val() ) && n1.val() != '' && n2.val() != '' && n3.val() != '' && n4.val() != '' && n5.val() != '' ){

                        level++;

                        if( level > maxLevel){
                                $('#level').text('Игра окончена, вы победили!');
                        }else{

                                $('#level').text('Уровень: ' + level);

                                if( level == 2 ){
                                        $('#wrap .num').removeAttr('disabled').val('');
                                        n1.val(4).attr('disabled','disabled');
                                        n2.val(5).attr('disabled','disabled');
                                        n5.val(5).attr('disabled','disabled');
                                }
                                if( level == 3 ){
                                        $('#wrap .num').removeAttr('disabled').val('');
                                        n1.val(4).attr('disabled','disabled');
                                        n3.val('/').attr('disabled','disabled');
                                        n5.val(7).attr('disabled','disabled');
                                }
                                if( level == 4 ){
                                        $('#wrap .num').removeAttr('disabled').val('');
                                        n1.val(1).attr('disabled','disabled');
                                        n4.val(2).attr('disabled','disabled');
                                        n5.val(9).attr('disabled','disabled');
                                }
                                if( level == 5 ){
                                        $('#wrap .num').removeAttr('disabled').val('');
                                        n4.val(9).attr('disabled','disabled');
                                        n5.val(9).attr('disabled','disabled');
                                }
                        }
                }
        });
});

Сначала мы объявляем переменные:

  • level – будет хранить текущий уровень;
  • maxLevel – переменная хранит максимальное количество уровней и пригодится нам на этапе определения того, что игрок прошел все уровни;
  • n1 – n5 – переменные для удобного обращения к текстовым полям в дальнейшем.

Далее идут 4 строчки, которыми мы задаем условия для первого уровня:

        n2.val(4).attr('disabled','disabled');
        n3.val('-').attr('disabled','disabled');
        n4.val(9).attr('disabled','disabled');
        n5.val(5).attr('disabled','disabled');

Пример таков:

Первая клетка пустая 4 - 9 = 5

или по-другому:

? 4 - 9 = 5

Например, n2.val(4) означает, что вторую слева клетку мы заполняем четверкой (напомню, клетка со знаком “=” не учитывается), а .attr(‘disabled’,’disabled’) означает, что клетка является неактивной (недоступна для редактирования).

Внимание: числа можно писать без кавычек, а вот все остальные символы необходимо обрамлять кавычками (одинарными или двойными), например:

n3.val('/')

или

n5.val("-")

Далее идет обработка введенной в поля информации, то есть в тот момент, когда вы что-то ввели в какое-то из полей (keyup – нажали и отпустили клавишу).

Здесь мы проверяем равенство левой части (все что до “=”) правой (с помощью функции eval), а также проверяем поля на пустоту, то есть данное условие будет выполнено только тогда, кода все поля, которые можно заполнить, будут заполнены, а также равенство будет верным.

Если это условие сработало, значит игрок дал верный ответ и можно увеличить уровень на единицу операцией level++.

После этого необходимо проверить, а не последний ли это уровень? Если число текущего уровня больше максимального числа уровней, значит игрок прошел все уровни и нужно вывести текст о том, что игра окончена и игрок победил. Если же игра еще не окончено, то выполняем правила для других уровней.

Также, стоит сказать о строке кода:

$('#wrap .num').removeAttr('disabled').val('');

Данной строкой мы делаем все 5 полей (которые можно использовать для заполнения) активными, а также очищаем их содержимое.

Для первого уровня мы такое не делали, так как вначале у нас все поля пустые и активные.

Вот, в принципе и все! Ничего сложного нет.

Для добавления бо́льшего количества уровней просто измените число в переменной maxLevel, а также, в обработку полей, добавьте конструкцию кода вида:

if( level == Номер уровня ){
Правила для уровня;
}

О том, как составлять правила (заполнять поля), я говорил выше.

Теперь можете посмотреть реальный пример игры головоломки, а также скачать её к себе на компьютер (всего 1 файл!).

Посмотреть результат

Скачать

На этом у меня всё, желаю вам удачи, пока!

Если вам нужна помощь в создании какого-либо функционала, сайта, сервиса, тестов или калькуляторов, то готов помочь, подробнее на странице услуг.