首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用NPC类处理数组数据

用NPC类处理数组数据
EN

Code Review用户
提问于 2012-03-29 15:33:01
回答 1查看 453关注 0票数 6

当有很多需要的数组时,我想知道在RAM/内存中保存的最佳方法(我计划有更多的NPC和其他各种带有文本和项的数组)。我想知道到目前为止我还能改进什么。

代码语言:javascript
复制
  #include <iostream>
  #include <cstring>

  #define NUM_NPC 10       // Number of NPC players

  #define DETAILS_HEARTS 0 // Heart Position
  #define DETAILS_BDMON  1 // Birthday Month Position
  #define DETAILS_BDDAY  2 // Birthday Day Position
  #define DETAILS_GENDER 3 // NPC Gender

  using namespace std;

  class npcPlayers {
     public:
        int getHearts(int playerID);
        int getItem(int playerID, int itemID);
        int getBirthdayMonth(int playerID);
        int getBirthdayDay(int playerID);
        char *getName(int playerID);
        npcPlayers();
     private:
        int npcDetails[NUM_NPC][10];
        char npcNames[NUM_NPC][20];
        int updateHearts(int PlayerID,int value);
  };

  npcPlayers::npcPlayers() {
     npcNames = {"Ace","Amber","Benny","Ethan","Michael","Jay","William","Mia","Chloe","Emily"};
     npcDetails = {
        {0,3,5,0},    // Ace
        {0,9,20,1},   // Amber
        {0,1,10,0},   // Bennny
        {0,12,30,0},  // Ethan
        {0,2,17,0},   // Michael
        {0,6,10,0},   // Jay
        {0,8,9,0},    // William
        {0,4,1,1},    // Mia
        {0,5,13,1},   // Chloe
        {0,8,5,1}     // Emily
     };
  }

  int npcPlayers::getHearts(int playerID) {
     return npcDetails[playerID][DETAILS_HEARTS];
  }
  int npcPlayers::getItem(int playerID, int itemID) {

  }
  int npcPlayers::getBirthdayDay(int playerID) {
     return npcDetails[playerID][DETAILS_BDDAY];
  }
  int npcPlayers::getBirthdayMonth(int playerID) {
     return npcDetails[playerID][DETAILS_BDMON];
  }
  char *npcPlayers::getName(int playerID) {
     return npcNames[playerID];
  }

  int main() {
     npcPlayers npc;
     cout << "Player 1 Details:" << endl;
     cout << "Name: " << npc.getName(1) << endl;
     cout << "Hearts: " << npc.getHearts(1) << endl;
     cout << "Birthday: " << npc.getBirthdayMonth(1) << "/" << npc.getBirthdayDay(1) << endl;
     return 0;
  }
EN

回答 1

Code Review用户

发布于 2012-04-14 16:01:03

  1. C++是静态类型的编程语言。因此,分配类成员的开销非常小。
  2. 使用全局变量不是一个好主意。像NUM_NPC这样的vars使您的应用程序不可伸缩。
  3. 每个域对象(如播放器或项)必须由同名类描述。
代码语言:javascript
复制
#include <iostream>
#include <string>
#include <vector>

typedef int Hearts;
typedef bool Gender;

struct Date
{
      Date(int month,int day) : month(month), day(day) {}
      int month;
      int day;
};

class Item
{
    // TODO: implement
};

class Player
{
public:
      Player(std::string name, Hearts hearts, Date birthday, Gender gender)
            : name(name), hearts(hearts), birthday(birthday), gender(gender) {}

      Hearts getHearts() const
      {
            return hearts;
      }

      const std::vector<Item>& getItems()
      {
            return items;
      }

      Date getBirthday() const
      {
            return birthday;
      }

      std::string getName() const
      {
            return name;
      }
private:
      std::vector<Item> items;
      Hearts hearts;
      Date birthday;
      std::string name;
      Gender gender;
};

int main()
{
      using namespace std;

      vector<Player> players;
      players.push_back(Player("Ace", 0, Date(3,5), 0));
      players.push_back(Player("Amber", 0, Date(9,20), 1));
      players.push_back(Player("Benny", 0, Date(1,10), 0));
      players.push_back(Player("Ethan", 0, Date(12,30), 0));

      Player& p = players[1];
      cout << "Player 1 Details:" << endl;
      cout << "Name: " << p.getName() << endl;
      cout << "Hearts: " << p.getHearts() << endl;
      cout << "Birthday: " << p.getBirthday().month << "/" << p.getBirthday().day << endl;
      cout << "Item count: " << p.getItems().size() << endl;
}
票数 6
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/10460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档