Консольное приложение C # - OO Math / Thought Problem - PullRequest
1 голос
/ 05 июня 2009

Я программирую простое консольное приложение на C #.

Спецификация:

Игра состоит из десяти кадров, которые начинаются с полной стойки из десяти пинов. В каждом кадре у вас есть две доставки вашего мяча, в которых можно сбить как можно больше из десяти кеглей. Если вы сбили все кегли на своем первом шаре, это называется ударом. Счет не добавляется сразу, потому что за удар вы получаете в качестве бонуса значения следующих двух ваших шаров. Например, если вы забили удар в первом кадре, а затем 7 и 1 во втором кадре, вы набрали бы 18 (10 + 7 + 1) для первого кадра и 8 для второго кадра, что составляет в общей сложности 26 после двух кадров. Если вы сбиваете некоторые штыри на первом шаре и сбиваете остальные штифты во втором шаре, это называется запасным. Опять же, счет не добавляется сразу, потому что за запасной вы получаете в качестве бонуса значения вашего следующего мяча. Например, если вы набрали запасной в первом кадре, скажем, 6 и 4, а затем получили 8 и 1 во втором кадре, вы получите 18 (6 + 4 + 8) для первого кадра и 9 для второго кадра, получая в общей сложности 27 после двух кадров.

Я понимаю, как писать код и т. Д. И т. Д. Тем не менее, я просто не могу придумать лучший способ сделать эту систему оценки, и мне нужен совет. Очевидно, для каждого игрока будет создан новый объект, однако я не уверен, как обойти то, что изначально казалось простой проблемой программирования.

Любая помощь будет принята с благодарностью.

Привет

Ответы [ 3 ]

5 голосов
/ 05 июня 2009

В боулинге удары и запасные части называются «метками». Используйте это!

enum Marks { Open, Spare, Strike };

Таким образом, вы можете определить тип отметки на кадр. После того, как мяч брошен, проверьте последние два кадра и обновите их оценки. Затем сложите баллы.

Еще одно примечание: если вы показываете покадровую оценку, не показывайте оценку кадров в строке ударов (например, четыре удара подряд не должны приводить к отображению «30» в кадре 1) , Подождите, пока запасной или открытый, чтобы отобразить итоги. Это неправильная оценка, чтобы делать что-то другое, и это чертовски раздражает меня, когда видеоигры не понимают этого.

4 голосов
/ 05 июня 2009

Что ж, если вам нужна настоящая всесторонняя дискуссия по ООП и TDD для игры в боулинг, я бы предложил прочитать всю эту статью:

http://www.objectmentor.com/resources/articles/xpepisode.htm

В противном случае вы можете просто прокрутить до конца и посмотреть, как они это реализовали.

0 голосов
/ 05 июня 2009

При работе с такими проблемами я нашел использование флагов полезным. Под флагами я подразумеваю небольшие булевы или переменные типа int, которые просто сообщают вам, является ли что-то истинным или ложным. Как в:

bool isStrike;
bool isSpare;

Поместите эти переменные в свой объект, и когда человек получает удар, установите для isStrike значение true.

Когда приходит время для подсчета очков, вы можете изменить свою систему вычислений, установив эти флажки.

if(isStrike)
    // do not calculate the score until the other two bowls are made.
if(isSpare)
    // do not calculate the score until one more bowl is made

Затем вы обновляете переменные счета, чтобы они отражались после этих чаш.

примечание: я не знаю, как ведение счета работает в боулинге, но я думаю, что информация здесь достаточно общая.

...