簡體   English   中英

檢查2D數組中的對象是否為空

[英]Check if an object in a 2D array is Null

我有一個二維數組,它應該保存不斷移動的對象。

class ZombieLand : public Singleton<ZombieLand>
{
   DECLARE_SINGLETON(ZombieLand);
public:
    MachineState world [19][19];
    MachineState getWorld()
    {
       std::cout<<"World";
       return world[19][19];
    }
    void setWorld(MachineState & state)
    {
    world [state.x][state.y] = state;

    }
}

我嘗試檢查某個位置是否為空,但“NULL”字不起作用,0也不起作用

switch (state.m_Facing)
{
 case (MachineState::UP):
    if(ZombieLand::get().world[state.x][state.y-1] != NULL )
    {
       state.m_occupied = true;
       break;
    }

我的問題是,我如何檢查我的世界數組的位置是否已經存在一個對象? 先感謝您。

我的MachineState類

struct MachineState
{

template <typename MachineTraits>
friend class Machine;

enum Facing { UP, RIGHT, DOWN, LEFT};
MachineState()
    : m_ProgramCounter(1)
    , m_ActionsTaken(0)
    , m_Facing(UP)
    , m_Test(false)
    , m_Memory(nullptr)
    ,x(0)
    ,y(0)
    ,point1(25, 10)
    ,point2(10, 40)
    ,point3(40, 40)

{ }
  int m_ProgramCounter;
  int m_ActionsTaken;
  Facing m_Facing;
  bool m_Test;
  bool m_occupied;
  int x;
  int y;
  Point point1;
  Point point2;
  Point point3;

  int GetActionsPerTurn() const throw() { return m_ActionsPerTurn; }
  int GetMaxMemory() const throw() {return m_MaxMemory; }
  bool GetInfect() const throw() { return m_InfectOnAttack; }
  void setPoint(Point p1, Point p2, Point p3)
  {
    point1=p1;
    point2=p2;
    point3=p3;
 }

};

你有兩種方式去這里。

第一:在MachineState的構造函數中,你必須設置一個變量,它確定該字段上的內容並添加一個告訴你的函數。 如果返回值為'0',您將知道該字段為空。

第二:聲明一個二維指針數組。

MachineState *world[19][19];
memset(world, 0, sizeof(world));

這個小代碼將所有指針設置為0(NULL),然后您可以檢查。 當然,您需要手動將對象分配給此二維數組。

稍微加一點,你的getWorld()函數看起來很getWorld()

請考慮使用此功能:

MachineState *getField(MachineState state) {
    return world[state.x][state.y];
}

或者,您當然可以使用:

MachineState *getField(int X, int Y) {
    return world[X][Y];
}

后一種功能可以稱為:

MachineState *Field = ZombieLand::getField(state.x, state.y - 1);
if(Field != NULL) state.m_occupied = true;

當然,您需要添加邊界檢查,但這超出了本答案的范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM