2013-11-26 2 views
3

Итак, я работаю над простой карточной игрой. Сейчас я использую около 4 различных контейнеров Vector<Card> для хранения карт в палубе, руке, InPlay и Discard. Я собирался начать писать код для перемещения карт из InPlay Vector в Vector Discard, когда это необходимо, и я понял, что могу использовать 2 вектора и перечислить набор состояний карты, чтобы различать, где находятся карты в игровом поле.Должен ли я использовать несколько векторов или состояний Enum

Я думал, что-то вроде:

class Card 
{ 
    Enum class CardState 
    { 
     InHand, 
     InPlay, 
     Discarded 
    }; 

    //other card class data 
}; 

тогда я мог бы перебирать один vector<Card> InPlay и проверить против этих флагов. Колода по-прежнему останется собственным контейнером для век.

Будет ли это проще, чем пытаться управлять 3 различными контейнерами на протяжении всей игры?

ответ

3

Добро пожаловать в cpu time vs space space vs code maintenance.

К счастью для вас, проблемы с временем процессора и объемом памяти в этом случае незначительны.

Код обслуживание, однако нет.

Попытка поддерживать три разных «стека» карт - это не лучший способ проделать дизайн. Это даст вам очень, то есть не заметный, рост скорости, но увеличение затрат на обслуживание кода делает его даже не близким к стоимости.

Что вы делаете правильно.

Сохраните перечисление состояний, в которых может находиться карта. Если вам нужен список всех карт в этом состоянии, проведите по вектору, чтобы найти карты в этом состоянии.

+0

Спасибо, Cap'n! В случае, если вы не можете сказать, проект, над которым я работаю, - это простой клон Magic, поэтому у меня есть другая ситуация, о которой мне интересно. Если карта находится в игре, она может иметь несколько состояний в этом состоянии (постукивать, вызывать болезнь и т. Д. Я не использую эти точные состояния, просто примеры). Как бы вы порекомендовали что-то подобное? – Prototype958

+0

Используйте список «currentStates». Например: vector currentStates Вы можете добавить вспомогательные методы, например: bool isInState (состояние CardState) –

3

Если бы я был реализован, я бы предпочел создать объект колоды, объект игрока и создать методы для любых действий, возможных в игре. сделайте немного больше работы в начале, и тогда было бы намного легче справиться.

P.s: структура данных должна быть выбрана тем, какие действия вы делаете с карточками .. например, если в вашей игре у вас есть много запросов «у колоды есть эта карточка?» я бы сказал, используя карту вместо повторения более 50 карт каждый раз ... так что ответ зависит от этого.

+0

Карты - это не то, что я использовал раньше. Я на самом деле начал со списков, но изменил его на векторы, потому что им было легче перебирать и «перемещать» карты от одного к другому. Я бы добавил +1 за то, что вы дали мне кое-что для исследования, но я еще не ударил 15 репутов. Ха-ха, Спасибо, хотя – Prototype958

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