コード例 #1
0
    protected PaddleActionState addActionState(GameObjectState objState)
    {
        double[]  stateVals = objState.getStateVals();
        GameState state     = new GameState(stateVals);

        state.voxelize();

        PaddleActionState actionState = new PaddleActionState(state);

        actionState.addAction(new PaddleAttackAction("Attack", 0.5));
        actionState.addAction(new PaddleDefendAction("Defend", 0.5));
        actionState.addAction(new PaddleStopAction("Stop", 0.5));

        actionStateMap.Add(state.getVoxel(), actionState);

        return(actionState);
    }
コード例 #2
0
    // Get a sorted list of the best Actions for a given State. If the State is not in the map, then add it.
    public override List <Tuple <double, GameAction, ActionState> > getBestActions(GameObjectState currState)
    {
        List <NodeDistance <KDTreeNode <PaddleActionState> > > actionStates = actionStateMap.Nearest(currState.getStateVals(), GameState.voxel_radius);

        List <Tuple <double, GameAction, ActionState> > bestActions = new List <Tuple <double, GameAction, ActionState> >();

        if (actionStates.Count < 1)
        {
            PaddleActionState newState = addActionState(currState);
            bestActions.AddRange(newState.getWeightedActions());
        }
        else
        {
            foreach (var actionState in actionStates)
            {
                bestActions.AddRange(actionState.Node.Value.getWeightedActions());
            }
        }

        bestActions.Sort(
            delegate(Tuple <double, GameAction, ActionState> a1, Tuple <double, GameAction, ActionState> a2)
        {
            if (a1 == null && a2 == null)
            {
                return(0);
            }
            else if (a1 == null)
            {
                return(1);
            }
            else if (a2 == null)
            {
                return(-1);
            }
            return(a2.Item1.CompareTo(a1.Item1));
        }
            );


        return(bestActions);
    }