Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Дурак Навсегда! (https://javascript.ru/forum/project/76404-durak-navsegda.html)

VооDоо 13.01.2019 15:18

RX200,
Спасибо за подробные подсказки! Наконец-то, до меня начинает доходить, что MVC - это не паттерн как таковой, а абстрактная "идеологическая" структура и каждый ее реализует как-то по своему. Обидно, конечно... Создавая эту тему, я надеялся, что существует какой-то паттерн или подход универсальный на все случаи жизни. Чтобы изучив его структуру, можно было спокойно писать любые приложения. Похоже, что структуру программы приходится каждый раз строить с нуля используя какие-то абстрактные подходы типа MVC и более мелкие уже паттерны проектирования.

Как я понял MVC, это что-то вроде такого:

var game = {};

/* MODEL */
game.model = {

    // хранилище данных
    cards: ['card1', 'card2', 'card3'],

    // извлечь данные из хранилища
    go: function() {
        return game.model.cards[0];
    },

    // записать данные в хранилище
    save: function(card) {
        game.model.cards.push(card);
    }
}


/* VIEW */
game.view = {

    // отобразить данные в интерфейсе
    show: function(card) {
        desk.innerHTML = card;
    },

    // забрать данные из интерфейса
    get: function() {
        return desk.innerHTML;
    }

}

/* CONTROLLER */
game.controller = {

    // взять данные у VIEW и отправить в MODEL
    add: function() {
        game.model.save(game.view.get());
    },

    // взять данные у MODEL и отправить VIEW
    show: function() {
        game.view.show(game.model.go());
    }

}


Лично мне в этой структуре не хватает еще блока с логикой. Похоже, MVC об этом ничего не говорит и оставляет на откуп программиста. Изобразил, в чем суть конечного автомата (за каждой стрелкой еще стоит условие перехода из одного состояния в другое):



К сожалению, бот и юзер слишком разные сущности, чтобы делать их одним классом... не смотря на кажущуюся одинаковость.

RX200 14.01.2019 03:06

Цитата:

Сообщение от VооDоо
К сожалению, бот и юзер слишком разные сущности, чтобы делать их одним классом...

У вас как я понял, сам бот является игроком-ботом, я бы так не стал делать, как мне кажется это сложно, если например игроков 4 или 6, по этому я бы сделал, игроки это игроки, а бот всегда один, это бот, создаем класс Player на основании его создаем например четыре игрока, игрок хранит в себе свои карты, и например имя, простенький такой объект, программа знает что если например ход первого игрока, который пусть будет пользователь, то тут визуализируем ситуацию, а пользователь пусть думает, далее если ход например игрока 2,3,4 то мы сообщаем боту, ситуацию а он оценивает ситуацию со стороны игрока которого мы ему указали и возвращает оптимальное действие, причем он может и со стороны игрока пользователя(человека) оценивать но в таком случае ответы бота мы можем использовать например как подсказки реальному игроку. Так же мы можем обойтись вообще без бота если игра например между людьми в сети. Так что то что вы сказали, "К сожалению, бот и юзер слишком разные сущности" наоборот это хорошо что разные они совсем разные, даже и близко не наследуются от одного класса, задача объекта игрока хранить его карты и имя может ещё какие параметры, а задача бота думать, При таком разделении бота и игроков, на совсем разные сущности проще написать код, можно сначала написать игру вообще без бота, просто переключая пользователя с одного игрока на другого, как бы игра с самим собой, а уже потом отдельно написать бота, который по сути будет переключатся между игроками и сообщать оптимальный ход, только в отличие от пользователя человека он не будет запоминать карты игрока за которого принимал решение на предыдущем ходу.

void() 14.01.2019 12:53

Бот вообще может и не нужен даже в этой игре.

VооDоо 14.01.2019 13:19

Цитата:

Сообщение от RX200 (Сообщение 501973)
можно сначала написать игру вообще без бота, просто переключая пользователя с одного игрока на другого, как бы игра с самим собой

Да, это очень хорошая мысль, спасибо! От простого к сложному проще писать. Так наверно и буду делать.

Но вообще, дело не в том - сложно или просто. "Дурака" можно написать в виде бета-версии за несколько часов... Вопрос в том, как писать правильно приложение. Ибо если я сейчас сяду и напишу "как знаю", получится наверно не оч. круто - типа спагетти код. Ну, представьте, как на jQuery пишут. Вот типа того.

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

Кто какие книги может посоветовать для моего случая? :)

SuperZen 14.01.2019 13:50

книжки:
https://addyosmani.com/resources/ess...patterns/book/

http://2ality.com/ - тут в основном про современный js

еще варик через event emitter https://nodejs.org/api/events.html

VооDоо 14.01.2019 14:02

SuperZen,
Спасибо! Буду читать, ибо другого выхода не вижу)

olgusha 18.05.2019 15:49

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

SuperZen 23.07.2019 21:05

Цитата:

Сообщение от Русский (Сообщение 510533)
Порядочные мужики пишут на чистом JS.

Риальные пацаны пищют ) на ассемблере

SuperZen 24.07.2019 08:25

Цитата:

Сообщение от Русский (Сообщение 510583)
Вот, допустим, такой, более приближенный к реальному положению вещей образ.

Если что-то допускать, то можно стать хозяином вселенной, причем, сразу )

очевидно, что не все с тобой согласны )... какова, вообще, цель твоих высеров))?

SuperZen 24.07.2019 12:53

Цитата:

Сообщение от Русский (Сообщение 510598)
Конечно, хреньворкщики не согласны, не каждому хочется ассоциировать себя с этой обезьяной, увязшей в болоте по своей природной тупости.

велкам: https://javascript.ru/forum/project/...i-kritiku.html


Часовой пояс GMT +3, время: 05:01.