12 октября 2025 г.

Механика игры Три в ряд

Одним и существенных моментов экономии бюджета игры про Плюха (про которую писал ранее) было то, что в ней планировалась мини-игра с механикой «Три в ряд». И эта механика была разработана мной задолго до старта работ по Плюху. Очень удачно получилось и то, что саму логику выделил в отдельный модуль и при создании мини-игры мне не пришлось ничего менять, лишь впоследствии добавил немного функциональности.

Сейчас выделил эту механику в отдельный пакет 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)

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

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

В движке можно менять количество "камней" по ширине и высоте, определять их типы.

Из ограничений можно отметить, что поле может быть только правильным прямоугольником. Сложные формы поля не реализованы.

Комментариев нет...

Отправить комментарий