Одним и существенных моментов экономии бюджета игры про Плюха (про которую писал ранее) было то, что в ней планировалась мини-игра с механикой «Три в ряд». И эта механика была разработана мной задолго до старта работ по Плюху. Очень удачно получилось и то, что саму логику выделил в отдельный модуль и при создании мини-игры мне не пришлось ничего менять, лишь впоследствии добавил немного функциональности.
Сейчас выделил эту механику в отдельный пакет npm (репозиторий), она уже успешно используется в двух местах: для Плюха и для моего варианта, который в вечной разработке. В ней и останется, скорее всего, потому что этих типов игр уже несметное количество.
Интеграция не сложная:
// create engine
const engine = new Engine({
horizontal: HCOUNT,
vertical: VCOUNT,
types: ['red', 'green', 'blue', 'yellow', 'violet']
})
engine.board.forEach((type) => {
// add sprite of type...
})
// recieve pointer event on sprites with indices fromIdx and toIdx
const matches = engine.swap(fromIdx, toIdx)
if (matches.length) {
// processing successed turn
} else {
// cancel turn
}
// in processing of successed turn remove matches and add new random gems
engine.removeAndAdd(matches)
// ...and may calculate scores
engine.calcScores(matches)
Вам потребуется только нарисовать интерфейс и прикрутить взаимодействие, которые никак не зависят от логики игры.
Из особенностей движка можно выделить то, что само поле в нем хранится в одномерном массиве. Почему-то показалось такое решение более интересным в реализации. Плюс совсем чуть-чуть экономит память, что не существенно, конечно же.
В движке можно менять количество "камней" по ширине и высоте, определять их типы.
Из ограничений можно отметить, что поле может быть только правильным прямоугольником. Сложные формы поля не реализованы.
Отправить комментарий