2013-06-09 4 views
1

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

  • спускового крючка (либо карту (если это помещается на груде) или Text/Action)
  • Необязательные условными (т.е. если не полная колода, то ...)
  • 6 (в основном) основные действия по любой из переменных в игре:
    1. Удалить эту переменную (Как удалить карту или удалить плеер)
      • 'del({variable})'
    2. Установить переменную на значение (например, установки порядка игрок (целое число), отрицательное (который будет в обратном порядке))
      • '{variable} = {value}'
    3. " Замените две переменные (a, b = b, a; такие как переключение руки или на палубу и ворс
      • '{variable1}, {variable2} = {variable2}, {variable1}' (на самом деле просто фантазии Set действие)
    4. „двух игроков New“, что делает новый объект (например, новая карта)
      • '{list}.append({class}({parametres}))' (Делает новый объект с использованием параметров класса и добавляет его в соответствующий список (карты сваи или загорания, новое правило к RuleHandler и т.д.))
    5. вызова, который просто вызывает код другого создания правила
      • 'self.rules.get({rule})rule' (правила является словарем с ключом, являющимся объектом правила, которое содержит всю информацию и значения являются сгенерированным кодом после compile -ный его)
    6. Say, что делает игрок сказать что-то
      • Не просто один лайнер, и переступает это класс оценок (соединения игроков ссылки и чат)

Последний из них самый сложный и с которым я столкнулся. Например, общее правило в Мао заключается в том, что если кто-то подает «7» любого иска, они должны сказать: «Имейте хороший день». Если следующий игрок ставит «7», тогда они должны сказать: «У меня очень хороший день». «Очень» продолжают добавлять до тех пор, пока кто-то не поставит «7», где они должны сказать «Большое спасибо», где число «очень» - это число «очень» в последнем «Имейте очень приятное» день '+ 1, а также набирать это количество карт в качестве наказания. В то время как сложное правило, большинство из которых легко могут быть достигнуты с помощью временных переменных и журнала того, что было последним. Тем не менее, код, который гарантирует, что игрок говорит, что правильная фраза - это то, что спотыкается со мной.Остальные действия принимают участие за кулисами и не требуют ввода пользователем. Ожидание ввода пользователя является частью задания кода сервера и не должно быть частью класса RuleHandler.

Что мне нужно сделать, чтобы убедиться, что действие Say простое и не выходит за пределы свойства Single-Responsibility Object-Orientated Programming?

+0

Если я правильно вас понимаю, вы можете решить проблему в игре. Например. семь играется и «очень» упоминается один раз в действии «say». Возможными следующими действиями являются еще 7 + очень * 2 или любая другая карта + очень * 2. Если эти два параметра не выбраны, проигрыватель не выполнил это правило. – Glaslos

+0

О, так что у RuleHandler может быть метод ожидания, который принимает очередь в качестве аргумента и через некоторое время истечет время ожидания, если правильная фраза не будет добавлена ​​вовремя? – Timidger

+0

Почему тайм-аут? Должен ли быть всегда следующий игрок, совершающий поворот? Я имею в виду, что тайм-аут в очереди мультиплеер всегда имеет смысл, но разве это не другая проблема? – Glaslos

ответ

0

Я решил сохранить фразу в очереди, причем каждая фраза проверялась на указанную очередь каждый раз, когда кто-то что-то говорил. I.E: Если кто-то говорит, что «Собака» и «Собака» находятся в очереди, он удаляет его, предоставляя исходный код в правиле, которое ожидало того, что ему нужно продолжить выполнение.

Смежные вопросы