#define __BOT_H__
#include <ext/hash_map>
-#include <vector>
+#include <list>
#include <string>
#include <locale>
+#include <map>
// These are needed to be able to use std::string as key in a hash_map.
namespace __gnu_cxx {
template< typename CharT, typename Traits, typename Alloc >
};
};
-struct AdjInfo{
- std::string intersection;
-};
+enum StreetType{foot, car, both};
+enum PlayerType{robber, cop_foot, cop_car};
+enum IntersectionType{hq, bank, robber_start, ordinary};
struct Intersection{
- std::vector<AdjInfo> adjs;
+ __gnu_cxx::hash_map<std::string,StreetType> connections;
+ IntersectionType type;
+ int x;
+ int y;
};
struct Player{
- std::string type;
+ PlayerType type;
std::string location;
};
int value;
};
-std::vector<std::string> tokenizeString(std::string input);
+template<class T>
+T value(std::string input);
+
+struct SPInfo{
+ std::string name;
+ bool settled;
+ SPInfo* parent;
+ int cost;
+};
+
+
+struct SPGoal{
+ virtual ~SPGoal(){}
+ virtual int operator()(const SPInfo* node) const = 0;
+};
class Bot {
public:
- Bot(std::string name, std::string type);
+ Bot(const std::string& name, PlayerType type);
+ virtual ~Bot(){};
- void play();
+ virtual void play();
+
+ protected:
void buildGraph();
void updateWorld();
- virtual void turn() = 0;
+ virtual std::string turn() = 0;
+ void move(std::string location);
+ void getPlayers();
+ std::list<std::string> shortestPath(const std::string& from, PlayerType type, const SPGoal& goal);
- private:
__gnu_cxx::hash_map<std::string, Intersection> _intersections;
__gnu_cxx::hash_map<std::string, Player> _players;
+ __gnu_cxx::hash_map<std::string, int> _banks;
+ std::map<int, std::string> _evidence;
+ std::map<PlayerType, std::string> _playerTypeNames;
+ std::map<std::string, PlayerType> _playerTypes;
std::string _name;
- std::string _type;
- std::string _position;
+ PlayerType _type;
+ std::string _location;
+ int _world;
+ int _robbed;
+ int _smell;
};
+struct SimpleSPGoal : public SPGoal{
+ std::string _to;
+ SimpleSPGoal(std::string to):_to(to){};
+ ~SimpleSPGoal(){}
+ int operator()(const SPInfo* node) const{
+ if (node->name == _to)
+ return 1;
+ return 0;
+ }
+};
#endif