Начальная постановка описана тут
Сам для себя поставил задачу сделать игру в 21(BlackJack) на js. То есть с начала должна составляться колода, после она перемешивается в разный порядок и создается картинка обратной стороны карты к каждому диву, должны выводится очки свои и соперника. После когда на обратную сторону карты в колоде нажимают срабатывает обработчик который вызывает функцию что сменяет класс, ссылку картинки карты и введёт счет, также сверяет счёт, что когда будет ровно 21 то выводит сообщение или когда больше 21 выводит другое сообщение. Когда игрок решит нажать пасс тогда сработает обработчик событий которой будет повешан таймаут каждые 3 секунды на другую функцию и если эта функция набрала ровно 21 то победил соперник и выводится сообщение, но если больше 21 то соперник проиграл. И также хотелось сделать раунды чтобы если кто- то победил очко засчитывалось одному из игроков.
Вот такую кашу заварил )
Сразу отмечу что в описании смешаны подходы к решению (детали реализации) и сама задача. Когда вы будете работать с клиентами или ProjectManager-ами и другими людьми которые вам будут ставить задачи, они почти всегда будут не в состоянии отделить задачу от деталей реализации или лишней информации. Ваш первый шаг - составить описание задачи и подтвердить с теми кто составил начальное описание что ваше описание соответствует их видению. Я так же понимаю, что социально, организационно и по другим причинам этот шаг не всегда происходит. Просто имейте в виду что отделять сигнал от шума вам придется в любом случае.
Мой подход к очищению постановки задачи от делатей реализации:
Реализуем игру blackjack. Играет пользователь против компьютера. Когда идет ход пользователя он может выбрать взять карту или закончить ход. При руке 21 пользователь видит сообщение. При руке более 21 пользователь видет другое сообщение. Когда пользователь пасует, ход передается компьютеру. Когда идет ход компьютера программа по некому алгоритму решает брать игру или заканчивать ход, программа стремится набрать 21 или максимальное число очков при учете вероятностей. Ход компьютера виден пользователю. Когда ход компьютера заканчивается определяется кто выиграл. Ведется общий счет выигрышей-проигрышей. При сбросе все (общий счет, перемешанная колода) начинается заново.
Второй этап это уточнение. Редко когда постановка полная и содержит достаточно информации или вся информация непротиворечива. Читая постановку задачи вы представляете себе конечное решение и перебираете возможные случаи и граничные случаи (чем больше опыта тем этот процесс будет более легким и быстрым), и у вас будут возникать уточняющие вопросы. Из нужно задать-уточнить у постановщика задачи. И тут снова социальные, иерархические, организационные и другие аспекты типа лени могут не дать вам этого сделать. Тогда ответ на вопрос нужно будет придумать самому. Если вы знаете доменную область, то некоторы вопросы не возникнут. Я, например, игру не знаю, поэтому буду уточнять все что не понимаю.
На этом этапе вы наверняка не сможете задать все уточняющие вопросы что не есть критично, а есть данность с которой мы все работаем. Вы будете все лучше и лучше справляться с этим этапом уточнений по ходу получения опыта при выполнении этого шага из задачи в задачу.
Еще интересный аспект уточнений. В зависимости от ответа постановщика задачи решение может расти в сложности и времязатратах. Учитывайте это когда спрашивайте и предлагайте оптимизацию которая устроит постановщийка задачи. Конечно же, в моей практике они всегда ходят самое точное и самое лучшее решение за самые малые ресурсы, но так не бывает и нужны компромиссы. Свой комментарий о влиянии ответа я пишу италиком, решение за @NONLUCIFER как за постановщиком задачи.
Подскажи @NONLUCIFER:
- В каждом раунде всегда ходит первым человек и вторым программа? (решение будет проще если человек ходит всегда первым).
Ответ: В каждом раунде ходит первый человек - Всегда ли раунд заканчивается ходом компьютера? Например когда человек набрал 21 нужно ли запускать ход компьютера или нужно прекращать ход? (решение будет проще если раунды не прерываются)
Ответ: Раунд не всегда будет заканчиваться ходом компьютера, то есть если человек набрал 21 то он выиграл, если человек нажал пасс, значит ход переходит к компьютеру и победа человека зависит от того какую руку набрал компьютер ровно 21 или меньше или больше - Первый раунд начинается с полной колоды. Второй и последущие раунды используют полную колоду или то что осталось после предыдущего раунда? (решение будет сложнее если колода сохраняется между ходами)
Ответ: Первый раунд начинается с полной колоды, последующие раунды тоже с полной колоды - Если второй и последующие раунды используют остаток колоды то что делать когда на ходе колода закончилась?
Ответ: Колода всегда будет обновляться в каждом раунде и будет полная - Есть куча вопросов про логику хода компьютера, но мы пока отложим их потому что они инкапсулированы поэтому могут[quote=“dmitry, post:1, topic:3188, full:true”]
Начальная постановка описана тут
Сам для себя поставил задачу сделать игру в 21(BlackJack) на js. То есть с начала должна составляться колода, после она перемешивается в разный порядок и создается картинка обратной стороны карты к каждому диву, должны выводится очки свои и соперника. После когда на обратную сторону карты в колоде нажимают срабатывает обработчик который вызывает функцию что сменяет класс, ссылку картинки карты и введёт счет, также сверяет счёт, что когда будет ровно 21 то выводит сообщение или когда больше 21 выводит другое сообщение. Когда игрок решит нажать пасс тогда сработает обработчик событий которой будет повешан таймаут каждые 3 секунды на другую функцию и если эта функция набрала ровно 21 то победил соперник и выводится сообщение, но если больше 21 то соперник проиграл. И также хотелось сделать раунды чтобы если кто- то победил очко засчитывалось одному из игроков.
Вот такую кашу заварил )
Сразу отмечу что в описании смешаны подходы к решению (детали реализации) и сама задача. Когда вы будете работать с клиентами или ProjectManager-ами и другими людьми которые вам будут ставить задачи, они почти всегда будут не в состоянии отделить задачу от деталей реализации или лишней информации. Ваш первый шаг - составить описание задачи и подтвердить с теми кто составил начальное описание что ваше описание соответствует их видению. Я так же понимаю, что социально, организационно и по другим причинам этот шаг не всегда происходит. Просто имейте в виду что отделять сигнал от шума вам придется в любом случае.
Мой подход к очищению постановки задачи от делатей реализации:
Реализуем игру blackjack. Играет пользователь против компьютера. Когда идет ход пользователя он может выбрать взять карту или закончить ход. При руке 21 пользователь видит сообщение. При руке более 21 пользователь видет другое сообщение. Когда пользователь пасует, ход передается компьютеру. Когда идет ход компьютера программа по некому алгоритму решает брать игру или заканчивать ход, программа стремится набрать 21 или максимальное число очков при учете вероятностей. Ход компьютера виден пользователю. Когда ход компьютера заканчивается определяется кто выиграл. Ведется общий счет выигрышей-проигрышей. При сбросе все (общий счет, перемешанная колода) начинается заново.
Второй этап это уточнение. Редко когда постановка полная и содержит достаточно информации или вся информация непротиворечива. Читая постановку задачи вы представляете себе конечное решение и перебираете возможные случаи и граничные случаи (чем больше опыта тем этот процесс будет более легким и быстрым), и у вас будут возникать уточняющие вопросы. Из нужно задать-уточнить у постановщика задачи. И тут снова социальные, иерархические, организационные и другие аспекты типа лени могут не дать вам этого сделать. Тогда ответ на вопрос нужно будет придумать самому. Если вы знаете доменную область, то некоторы вопросы не возникнут. Я, например, игру не знаю, поэтому буду уточнять все что не понимаю.
На этом этапе вы наверняка не сможете задать все уточняющие вопросы что не есть критично, а есть данность с которой мы все работаем. Вы будете все лучше и лучше справляться с этим этапом уточнений по ходу получения опыта при выполнении этого шага из задачи в задачу.
Еще интересный аспект уточнений. В зависимости от ответа постановщика задачи решение может расти в сложности и времязатратах. Учитывайте это когда спрашивайте и предлагайте оптимизацию которая устроит постановщийка задачи. Конечно же, в моей практике они всегда ходят самое точное и самое лучшее решение за самые малые ресурсы, но так не бывает и нужны компромиссы. Свой комментарий о влиянии ответа я пишу италиком, решение за @NONLUCIFER как за постановщиком задачи.
Подскажи @NONLUCIFER:
- В каждом раунде всегда ходит первым человек и вторым программа? (решение будет проще если человек ходит всегда первым).
- Всегда ли раунд заканчивается ходом компьютера? Например когда человек набрал 21 нужно ли запускать ход компьютера или нужно прекращать ход? (решение будет проще если раунды не прерываются)
- Первый раунд начинается с полной колоды. Второй и последущие раунды используют полную колоду или то что осталось после предыдущего раунда? (решение будет сложнее если колода сохраняется между ходами)
- Если второй и последующие раунды используют остаток колоды то что делать когда на ходе колода закончилась?
- Есть куча вопросов про логику хода компьютера, но мы пока отложим их потому что они инкапсулированы поэтому могут быть добавлены по ходу программы. Мы сделаем простейшую логику с минимум учетов факторов.
UPD
Чтобы было проще задавать вопросы я сделал скетч (прилагается ниже) и представлял в голове как будет работать программа. Я поленился лезть читать правила игры в интернете и задал возникшие вопросы напрямую.
В зависимости от ответов на вопросы скетч может меняться. А так же на практике у вас уже может быть скетч или дизайн на руках. И очень часто, в зависимости от уровня дизайнера и их желания работать, дизайн может быть недостаточным. Например не давать достаточно информации как выглядит то или иное состояние программы (начальное, конечное). Всегда на практике добивайтесь ясности на ранних этапах разработки решения. Чем позже станет понятно что чего-то не хватает, что-то не учтено что-то нужно переделать, тем сложнее будет внести изменение в код.
[/quote]
быть добавлены по ходу программы. Мы сделаем простейшую логику с минимум учетов факторов.
UPD
Чтобы было проще задавать вопросы я сделал скетч (прилагается ниже) и представлял в голове как будет работать программа. Я поленился лезть читать правила игры в интернете и задал возникшие вопросы напрямую.
В зависимости от ответов на вопросы скетч может меняться. А так же на практике у вас уже может быть скетч или дизайн на руках. И очень часто, в зависимости от уровня дизайнера и их желания работать, дизайн может быть недостаточным. Например не давать достаточно информации как выглядит то или иное состояние программы (начальное, конечное). Всегда на практике добивайтесь ясности на ранних этапах разработки решения. Чем позже станет понятно что чего-то не хватает, что-то не учтено что-то нужно переделать, тем сложнее будет внести изменение в код.
UPD2 @NONLUCIFER ответил (я добавил ответы к вопросам) и приложил изображение интерфейса. Теперь дело за дизайном доменной модели (данных и классов).