View Single Post
Sitat av Bolletott Vis innlegg
Derfor tenker jeg noe sånt som en klasse som kan behandle flere oppgaver parallelt, og med forskjellig delay. Derfor funker verken en "handlingskø" eller en global delay, for man kan fort trenge mange delays samtidig.
Vis hele sitatet...
Det var det som var meningen med eksempelet jeg postet over, du bruker klassen til å representere en enkelt ordre, så har du en annen som tar seg av listen over alle.

For å utvide eksempelet litt:

Kode

enum class ItemType { SHOVEL, BUCKET };

class Action {
 private:
  ItemType type;
  const Player& recipient;
  unsigned int remaningDelay;

 public:
  Action(unsigned int delay, ItemType type, const Player& player) : remainingDelay(delay), type(type), recipient(player) {}
  bool Update();
};

bool Action::Update() {
  if (remaingDelay == 0) {
    return true;
  }

  if (--remainingDelay == 0) {
    recipient.GiveItem(item);
    return true;
  }

  return false;
}

class PendingActions {
 public:
  void AddAction(const Action*);
  void Update();

 private:
  std::list<Action*> actions;
};

void PendingActions::AddAction(const Action* action) {
  actions.push_back(action);
}

void PendingActions::Update() {
  for (auto action = actions.begin(); action != list.end();) {
    if (Action.Update()) {
      delete *action;
      action = actions.erase(action);
    } else {
      ++action;
    }
  }
}
Så kunne du brukt pendingActions.AddAction(new Action(3, ItemType::SHOVEL, player)), som da etter 3 updates hadde gitt en 'shovel' til 'player', for så å slette den fra listen.

Koden over kompilerer ganske sikkert ikke; jeg har ikke testet den, og jeg programmerer lite for tiden.

Sitat av Bolletott Vis innlegg
(Forresten, i mitt forsvar: Jeg veit at man starter å telle fra 0 i programmering, men siden dette er objekter som representerer spillere, valgte jeg å begynne på 1 allikevel for Spiller nummer 0 gir ingen mening.)
Vis hele sitatet...
Du kan begynne å telle fra 0 internt, men du trenger ikke vise det til spillerene. Spiller i kaller du bare for i+1 når du printer det.
Sist endret av TanteSpiker; 18. juni 2012 kl. 16:45.