[Из песочницы] Создание игры «Слова из Слова»
Вид игрового поля
Описание игры
Задача игрока — из букв представленного на экране слова составлять другие. Составленное слово должно быть нарицательным именем существительным в единственном числе, уменьшительно-ласкательные формы, а также сокращения не принимаются. Минимальная длина — 3 буквы. За каждое отгаданное слово начисляются очки в зависимости от его длины (базовая ставка за каждую букву, умножаемая на коэффициент). Базовая ставка равняется десяти очкам. Коэффициент рассчитывается следующим образом:
- три буквы — 1;
- от четырех до пяти букв — 1.25;
- от шести до семи букв — 1.5;
- от восьми до девяти букв — 1.75;
- более девяти букв — 2.
На каждом уровне игрок может заработать дополнительные очки, выполняя определенные условия:
- отгадать 40 проц. возможных слов на уровне (1 000 очков);
- отгадать три слова, начинающихся на ту же букву, что и слово уровня (500 очков);
- отгадать все возможные слова на уровне (50 000 очков).
Отгаданные игроком слова отображаются на игровом поле в алфавитном порядки, сгруппированные по количеству букв в слове. Игрок может посмотреть значение каждого, нажав на него. Результаты охраняются каждый раз после верно отгаданного слова.
Использованные техники и приемы
В ходе работы над приложением использовались элементы подхода MVC (model, view, controller). В отдельные компоненты также вынесено управление звуком, обработка результатов игры и общие методы для всего приложения.
GAME = {
"utils":{}, // общие инструменты
"sounds":{}, // обработка звуков
"view":{}, // представление
"controller":{}, // обработка поведения
"model":{}, // основные данные
"results":{} // обработка результатов
}
GAME.init(place) // инициализация приложения
GAME.namespace(ns_string) // создание пространств имен
В процессе разработки ощутил все преимущества использования замыканий и немедленно вызываемых функций. Так, их использование избавило от постоянного поиска элементов на странице посредством getElementById и т.п.
controller.play = (function () {
// блокировка множественного нажатия
var cancelClick = false;
return function (letter) {
if (cancelClick) return;
cancelClick = true;
setTimeout(function () {
cancelClick = false;
}, 200)
//код функции
})()
Этапы выполнения приложения
В процессе инициализации приложения создаются все необходимые html-элементы, формируются объекты-списки для упрощения доступа к ним.
Правила
Необходимо составлять слова из показанного на экране слова. Слово должно быть нарицательным именем существительным в единственном числе. Уменьшительно-ласкательные формы, а также сокращения не принимаются. Минимальная длина слова - 3 буквы.
Управление
Чтобы выбрать букву, кликните мышкой. Повторный клик по последней выбранной букве снимает выделение.
Клавиша Esc отменяет ввод всего слова.
Клавиша Backspace (←) отменяет ввод последней буквы.
Игровые бонусы
Первая звезда - отгадать 40% возможных слов на уровне. Бонус: 1 000 очков.
Вторая звезда - отгадать три слова, начинающихся на ту же букву, что и слово уровня. Бонус: 500 очков.
Третья звезда - отгадать все возможные слова на уровне. Бонус: 50 000 очков.
Подсказки
Показать определение неотгаданного слова. Стоимость подсказки: 100 очков
Показать неотгаданное слово. Стоимость подсказки: 500 очков.
Элементы интерфейса
Управление звуком.
Вызов игрового меню.
Прогресс на уровне.
Слова из слова
Игрок: 123
Уровень: 1
Очки: 0
Подсказки:
р
о
д
и
н
а
Все информация о прохождении игроком уровня сохраняется в объекте GAME.model.level
level = {
"1":{
"wordForLevel":"родина",
"foundWords":["род","анод","аир"],
"missions": {
"progress":3,
"firstStar":true,
"secondStar":true,
"thirdStar":true
}
}
}
Для того, чтобы как-то сохранять прогресс и не задействовать при этом серверные скрипты и базы данных, был выбран способ сохранения в localStorage браузера. Кроме того, реализовал «таблицу рекордов» для игроков, которые используют это приложение в одном и том же браузере
/**
* Сохранение результатов.
* @method GAME.controller.storeResults
* @param {string} name
* Имя игрока.
*/
controller.storeResults = function (name) {
var results = {
level: GAME.utils.createClone(model.level),
score: model.score
}
results = JSON.stringify(results);
window.localStorage.setItem(name, results);
}
Таким образом, представляю Вам на обсуждения мой проект. Буду рад выслушать конструктивную критику и предложения как в комментариях, так и в личном общении. Если интересуют подробности, с удовольствием расскажу о процессе написания подробнее.
Ссылка на репозиторий GitHub
Комментарии (3)
22 августа 2016 в 16:33
0↑
↓
Такую игру бы на смартфоны, был бы отличный таймкиллер.
22 августа 2016 в 16:42
0↑
↓
Так есть уже. Вовсю играю.22 августа 2016 в 16:44
0↑
↓
Неплохо было бы прикрутить внешний ресурс со словами…