[英]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.