Мой текущий проект - попытаться перенести популярную карточную игру Mao в сетевую игру (многопользовательскую), где компьютером будет «Великий мастер». Он будет отслеживать правила, колоду, игроков и т. Д. Мао, однако, не имеет официального правила; вместо этого игроки составляют правила. Так что мой класс правило, таким образом, имеет очень простую настройку свойств, так что код может быть сгенерирован с помощью класса RuleHandler (чей экземпляр запускается в отдельном потоке) от нескольких свойств:Зависимость Противоречие в генераторе кода
- спускового крючка (либо карту (если это помещается на груде) или Text/Action)
- Необязательные условными (т.е. если не полная колода, то ...)
- 6 (в основном) основные действия по любой из переменных в игре:
- Удалить эту переменную (Как удалить карту или удалить плеер)
'del({variable})'
- Установить переменную на значение (например, установки порядка игрок (целое число), отрицательное (который будет в обратном порядке))
'{variable} = {value}'
- " Замените две переменные (a, b = b, a; такие как переключение руки или на палубу и ворс
'{variable1}, {variable2} = {variable2}, {variable1}'
(на самом деле просто фантазииSet
действие)
- „двух игроков New“, что делает новый объект (например, новая карта)
'{list}.append({class}({parametres}))'
(Делает новый объект с использованием параметров класса и добавляет его в соответствующий список (карты сваи или загорания, новое правило к RuleHandler и т.д.))
- вызова, который просто вызывает код другого создания правила
'self.rules.get({rule})rule'
(правила является словарем с ключом, являющимся объектом правила, которое содержит всю информацию и значения являются сгенерированным кодом послеcompile
-ный его)
- Say, что делает игрок сказать что-то
- Не просто один лайнер, и переступает это класс оценок (соединения игроков ссылки и чат)
- Удалить эту переменную (Как удалить карту или удалить плеер)
Последний из них самый сложный и с которым я столкнулся. Например, общее правило в Мао заключается в том, что если кто-то подает «7» любого иска, они должны сказать: «Имейте хороший день». Если следующий игрок ставит «7», тогда они должны сказать: «У меня очень хороший день». «Очень» продолжают добавлять до тех пор, пока кто-то не поставит «7», где они должны сказать «Большое спасибо», где число «очень» - это число «очень» в последнем «Имейте очень приятное» день '+ 1, а также набирать это количество карт в качестве наказания. В то время как сложное правило, большинство из которых легко могут быть достигнуты с помощью временных переменных и журнала того, что было последним. Тем не менее, код, который гарантирует, что игрок говорит, что правильная фраза - это то, что спотыкается со мной.Остальные действия принимают участие за кулисами и не требуют ввода пользователем. Ожидание ввода пользователя является частью задания кода сервера и не должно быть частью класса RuleHandler.
Что мне нужно сделать, чтобы убедиться, что действие Say
простое и не выходит за пределы свойства Single-Responsibility Object-Orientated Programming?
Если я правильно вас понимаю, вы можете решить проблему в игре. Например. семь играется и «очень» упоминается один раз в действии «say». Возможными следующими действиями являются еще 7 + очень * 2 или любая другая карта + очень * 2. Если эти два параметра не выбраны, проигрыватель не выполнил это правило. – Glaslos
О, так что у RuleHandler может быть метод ожидания, который принимает очередь в качестве аргумента и через некоторое время истечет время ожидания, если правильная фраза не будет добавлена вовремя? – Timidger
Почему тайм-аут? Должен ли быть всегда следующий игрок, совершающий поворот? Я имею в виду, что тайм-аут в очереди мультиплеер всегда имеет смысл, но разве это не другая проблема? – Glaslos