我正在使用C++递归地制作一个六边形网格(使用多重链接列表样式).我已经将它设置为轻松创建相邻的图块,但因为我正在递归地执行它,所以我只能为给定的图块创建所有6个邻居.显然,这会导致重复的瓷砖被创建,我试图以某种方式摆脱它们.因为我正在使用类,检查空指针似乎不起作用.它要么无法从我的Tile类转换为int,要么以某种方式转换它但没有正确地执行它.我在创建时明确地将所有指针设置为NULL,当我检查它是否仍然存在时,它表示即使我从未触及它,因为初始化.有没有一种特定的方式我应该这样做?没有某种类型的NULL,我甚至无法遍历网格
这是我的一些相关代码.是的,我知道这很令人尴尬.
Tile类头:
class Tile
{
public:
Tile(void);
Tile(char *Filename);
~Tile(void);
void show(void);
bool LoadGLTextures();
void makeDisplayList();
void BindTexture();
void setFilename(char *newName);
char Filename[100];
GLuint texture[2];
GLuint displayList;
Tile *neighbor[6];
float xPos, yPos,zPos;
};`
Run Code Online (Sandbox Code Playgroud)
平铺初始化:
Tile::Tile(void)
{
xPos=0.0f;
yPos=0.0f;
zPos=0.0f;
glEnable(GL_DEPTH_TEST);
strcpy(Filename, strcpy(Filename, "Data/BlueTile.bmp"));
if(!BuildTexture(Filename, texture[0]))
MessageBox(NULL,"Texture failed to load!","Crap!",MB_OK|MB_ICONASTERISK);
for(int x=0;x<6;x++)
{
neighbor[x]=NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
创建相邻的瓷砖:
void MakeNeighbors(Tile *InputTile, int stacks)
{
for(int x=0;x<6;x++)
{
InputTile->neighbor[x]=new Tile();
InputTile->neighbor[x]->xPos=0.0f;
InputTile->neighbor[x]->yPos=0.0f;
InputTile->zPos=float(stacks);
}
if(stacks)
{
for(int x=0;x<6;x++)
MakeNeighbors(InputTile->neighbor[x],stacks-1);
}
}
Run Code Online (Sandbox Code Playgroud)
最后,遍历网格: …