同じタイプの他のオブジェクトへのポインターのリストを格納するオブジェクト (タイプ Cell) があります (グリッド上の隣接オブジェクト)。
これは 2D グリッドです。視覚的には、以下を参照してください。
xxc
xcc
ccx
真ん中の「c」は生きているセルで、その北東、東、南、南西にあります。隣接リストにはこれらのセルへのポインターがあり、他の方向には Null ポインターがあります。次のようになります: neighbors = {null, pointer, pointer, null, pointer, null, pointer, null) (リストの順序は、North、East、South、West、NorthEast、SouthEast、SouthWest、NorthWest です)。
新しいセルが隣接する位置に移動した場合 (たとえば、このセルの西に移動した場合)、次のようになります。
xxc
ccc
ccx
隣人リストを更新して、西側セルへのポインターを持たせる必要があります。次に、西側セルはすべての隣人を更新して、「こんにちは! 私はここにいます! あなたは私を隣人として持っています」と言う必要があります。したがって、西側のセルは独自のポインターのリストを調べ、それぞれで「私を隣人としてリストを更新してください」と言います。「me」ポインターをそれ自体へのポインターとして渡そうとしています。これがコードです..
int Cell::updateAllNeighbours(){
//Need a pointer to myself...
Cell * temp = &this; //how do I do this???
for (int i=0; i<NUM_NEIGHBOURS; i++){
if (neighbours[i] != NULL) {
if (i==0)
neighbours[i]->updatedNeighbour(2, temp);
else if(i==1)
neighbours[i]->updatedNeighbour(3, temp);
else if(i==2)
neighbours[i]->updatedNeighbour(0, temp);
else if(i==3)
neighbours[i]->updatedNeighbour(1, temp);
else if(i==4)
neighbours[i]->updatedNeighbour(6, temp);
else if(i==5)
neighbours[i]->updatedNeighbour(7, temp);
else if(i==6)
neighbours[i]->updatedNeighbour(4, temp);
else if(i==7)
neighbours[i]->updatedNeighbour(5, temp);
}
}
}
したがって、updatedNeighbour 関数を呼び出して、「x [数値] の位置に、このポインターを隣人リストに入れる必要があります」と言おうとしています。ただし、自分自身にポインターを渡す方法がわかりません。
何かご意見は?すみません、これはとても紛らわしいです...