Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 13.01.2019, 14:18
Аватар для VооDоо
Интересующийся
Отправить личное сообщение для VооDоо Посмотреть профиль Найти все сообщения от VооDоо
 
Регистрация: 09.01.2019
Сообщений: 14

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 об этом ничего не говорит и оставляет на откуп программиста. Изобразил, в чем суть конечного автомата (за каждой стрелкой еще стоит условие перехода из одного состояния в другое):



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

Последний раз редактировалось VооDоо, 13.01.2019 в 14:41.
Ответить с цитированием
  #12 (permalink)  
Старый 14.01.2019, 02:06
Аспирант
Отправить личное сообщение для RX200 Посмотреть профиль Найти все сообщения от RX200
 
Регистрация: 06.02.2011
Сообщений: 44

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

Последний раз редактировалось RX200, 14.01.2019 в 02:09.
Ответить с цитированием
  #13 (permalink)  
Старый 14.01.2019, 11:53
Аватар для void()
Профессор
Отправить личное сообщение для void() Посмотреть профиль Найти все сообщения от void()
 
Регистрация: 11.08.2017
Сообщений: 203

Бот вообще может и не нужен даже в этой игре.
Ответить с цитированием
  #14 (permalink)  
Старый 14.01.2019, 12:19
Аватар для VооDоо
Интересующийся
Отправить личное сообщение для VооDоо Посмотреть профиль Найти все сообщения от VооDоо
 
Регистрация: 09.01.2019
Сообщений: 14

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

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

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

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

Последний раз редактировалось VооDоо, 14.01.2019 в 13:03.
Ответить с цитированием
  #15 (permalink)  
Старый 14.01.2019, 12:50
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 350

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

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

еще варик через event emitter https://nodejs.org/api/events.html
Ответить с цитированием
  #16 (permalink)  
Старый 14.01.2019, 13:02
Аватар для VооDоо
Интересующийся
Отправить личное сообщение для VооDоо Посмотреть профиль Найти все сообщения от VооDоо
 
Регистрация: 09.01.2019
Сообщений: 14

SuperZen,
Спасибо! Буду читать, ибо другого выхода не вижу)
Ответить с цитированием
  #17 (permalink)  
Старый 18.05.2019, 15:49
Новичок на форуме
Отправить личное сообщение для olgusha Посмотреть профиль Найти все сообщения от olgusha
 
Регистрация: 18.05.2019
Сообщений: 2

Подход хороший. На мой взгляд, использовать глобальные переменные и работать с ними разными функциями очень выгодно.
Ответить с цитированием
  #18 (permalink)  
Старый 08.07.2019, 04:31
Интересующийся
Отправить личное сообщение для p.rishard Посмотреть профиль Найти все сообщения от p.rishard
 
Регистрация: 21.04.2018
Сообщений: 11

Сообщение от VооDоо Посмотреть сообщение
SuperZen,
Спасибо! Буду читать, ибо другого выхода не вижу)
Что-нибудь получилось? расскажите, интересно.
Некоторое время назад написал по приколу что-то вроде детерминированного покера, github, там же и ссылка на демку. В контексте постижения MVC вы напрасно, имхо, пренебрегаете фреймворками, они здорово дрессируют. И "врубают" в себя.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как спрятать элемент навсегда Jolly Общие вопросы Javascript 2 19.10.2018 19:55
как присвоить навсегда значение переменной "а" введенное в input. денис77447327 Элементы интерфейса 1 14.05.2018 10:26
.ajax и load() - конфликт... или я дурак? papochka jQuery 4 16.11.2014 00:40
Много поточный ajax, даже ie 9 дурак bidloCoder Internet Explorer 1 29.07.2011 19:53
Выучить JS раз и навсегда AlexPa Общие вопросы Javascript 16 27.10.2008 12:14