0

我正在构建一个原型无状态游戏 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];
    }


}
4

1 回答 1

3

这不是 Objective C 问题,而是算法/AI 问题。

这是一个深刻而复杂的课题。

一种方法是为游戏中每个图块的不同优缺点分配不同的权重,然后根据这些加权值的总和得出每个图块的总合意度得分。

您还可以求解联立方程组以找到理想的解。

我建议买一本关于游戏 AI 的书。当我查看大型书店的技术部分时,我已经看到了很多(比如美国现在已经不复存在的 Borders)

于 2013-12-17T01:01:24.907 回答