私はゲーム サーバーを開発しており、現在、エリア内で観客を獲得できるようにする必要があります。ライブサーバーではなくローカル。
これは私の GetSpectators 関数です:
public void GetSpectators(ref HashSet<Player> Players, Coordinate_t coordinate, bool MultiFloor = false)
{
for (int x = coordinate.X - 11; x != coordinate.X + 11; x++)
{
for (int y = coordinate.Y - 11; y != coordinate.Y + 11; y++)
{
if (MultiFloor)
{
for (int z = coordinate.Z - 2; z != coordinate.Z + 2; z++)
{
Tile tile = GetTile(x, y, z);
if (tile != null)
{
foreach (Player p in tile.Creatures)
{
Players.Add(p);
}
}
}
}
else
{
Tile tile = GetTile(x, y, coordinate.Z);
if (tile != null)
{
foreach (Player p in tile.Creatures)
{
Players.Add(p);
}
}
}
}
}
}
クラス Tile を持つこの他のディクショナリを保持するこのクラス Map があります。各タイルは X、Y、および Z 座標で表され、各タイルは Player と呼ばれるこのクラスのリストを保持します。一部のタイルにはプレーヤーが含まれないものもあります。
私は良い方法が必要であり、醜いものではありません。
たとえば、半径 11 内の x=100、y=100、z=7 内のすべてのプレイヤー。