]> ruin.nu Git - icfp05.git/blobdiff - bot/bot.h
some restructuring
[icfp05.git] / bot / bot.h
index d07fb06e829dbb395105873333f75cb86023f58e..731a106a4a1dbcc847ee41f2fd65da03c1ac96dd 100644 (file)
--- a/bot/bot.h
+++ b/bot/bot.h
@@ -2,9 +2,10 @@
 #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 >
@@ -32,16 +33,19 @@ namespace __gnu_cxx {
                };
 };
 
-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;
 };
 
@@ -50,24 +54,63 @@ struct Bank{
        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(){};
+
+               virtual void play();
 
-               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, bool reverse = false);
 
-       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);
+       int operator()(const SPInfo* node) const;
+};
+
+struct FindPlayer : SPGoal{
+       int _limit;
+       const __gnu_cxx::hash_map<std::string, Player>& _players;
+       PlayerType _type;
+       FindPlayer(const __gnu_cxx::hash_map<std::string, Player>& players, PlayerType type, int limit = 0);
+       int operator()(const SPInfo* node) const;
+};
 
 #endif