私はプロトタイプのステートレス ゲーム AI を構築しています。複数のデータ ソースを組み合わせて、2D 正方形グリッド ゲーム ボード内の「最適な」場所を決定する方法があるかどうかに興味があります。
入力例:
- プレイヤー/脅威 (x,y) 座標の配列
- このターン内で可能な移動 (x,y) 座標の配列
- トラップの配列
- 地形ボーナス/ペナルティの配列
- 友好的なユニット/ヒーラーへの近接の配列
たとえば、プレイヤーのグループから最も遠い距離を計算し、そこにモンスターを移動させる私の方法は次のとおりです (重傷の場合)。上記のような配列からのデータを含めることで、これを改善したいと思います。私はこれがそのような方法を本当に肥大化させるのではないかと心配しています -私が言及したようなデータを分析するためのより良い方法はありますか?
-(void)runAway
{
[self debugMessage];
int bestTileIndex = 0;
int maxDistance = 0;
NSMutableArray* playerLocations = [[MapOfTiles sharedInstance] playerLocations];
NSMutableDictionary* validMoveDistanceToEnemy =[[NSMutableDictionary alloc] initWithCapacity:112];
float sum = 0;
//valid move arrays is an array of arrays of tiles at 1, 2, 3,etc moves away from the origin
if(validMoveArrays.count>0)
{
for(NSArray* reachableTiles in validMoveArrays)
{
for(NSNumber* tileNumber in reachableTiles)
{
sum = 0;
for(NSNumber* playerLocation in playerLocations)
{
sum += [self distanceFromTileIndex:tileNumber.intValue toTileIndex:playerLocation.intValue];
}
[validMoveDistanceToEnemy setObject:@(sum) forKey:tileNumber];
}
}
}
DLog(@"validMoveDistanceToEnemy: %@",validMoveDistanceToEnemy);
NSNumber* distanceToEnemy = nil;
for (NSNumber* key in [validMoveDistanceToEnemy allKeys])
{
distanceToEnemy = [validMoveDistanceToEnemy objectForKey:key];
if(distanceToEnemy.intValue >maxDistance)
{
maxDistance = distanceToEnemy.intValue;
bestTileIndex = key.intValue;
}
}
if(bestTileIndex>tileCountTall*tileCountWide)
{
//out of bounds or some other error
[self stationaryAction];
}else
{
//move to safest tile
[self.actor moveToTileIndex:bestTileIndex];
}
}