]> ruin.nu Git - icfp05.git/blobdiff - bot/bot.h
moved abstract base class to it's own subdir
[icfp05.git] / bot / bot.h
diff --git a/bot/bot.h b/bot/bot.h
new file mode 100644 (file)
index 0000000..d07fb06
--- /dev/null
+++ b/bot/bot.h
@@ -0,0 +1,73 @@
+#ifndef __BOT_H__
+#define __BOT_H__
+
+#include <ext/hash_map>
+#include <vector>
+#include <string>
+#include <locale>
+// 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 hash< std::basic_string<CharT, Traits, Alloc> > {
+                       size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
+
+                               const std::collate<CharT>& c = std::use_facet< std::collate<CharT> >(std::locale());
+
+                               return c.hash(s.c_str(), s.c_str() + s.size());
+
+                       }
+
+               };
+
+       template< typename CharT, typename Traits, typename Alloc >
+               struct hash< const std::basic_string<CharT, Traits, Alloc> > { //yes you need this version aswell!
+
+                       size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
+
+                               const std::collate<CharT>& c = std::use_facet< std::collate<CharT> >(std::locale());
+
+                               return c.hash(s.c_str(), s.c_str() + s.size());
+                       }
+
+               };
+};
+
+struct AdjInfo{
+       std::string intersection;
+};
+
+struct Intersection{
+       std::vector<AdjInfo> adjs;
+};
+
+struct Player{
+       std::string type;
+       std::string location;
+};
+
+struct Bank{
+       std::string location;
+       int value;
+};
+
+std::vector<std::string> tokenizeString(std::string input);
+
+class Bot {
+       public:
+               Bot(std::string name, std::string type);
+
+               void play();
+               void buildGraph();
+               void updateWorld();
+               virtual void turn() = 0;
+
+       private:
+       __gnu_cxx::hash_map<std::string, Intersection> _intersections;
+       __gnu_cxx::hash_map<std::string, Player> _players;
+       std::string _name;
+       std::string _type;
+       std::string _position;
+};
+
+
+#endif