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); }
// 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); }