diff options
-rw-r--r-- | main.cpp | 10 | ||||
-rw-r--r-- | world.cpp | 9 | ||||
-rw-r--r-- | world.h | 2 |
3 files changed, 11 insertions, 10 deletions
@@ -5,7 +5,7 @@ #include <unordered_map> #include <unistd.h> #include <cstdlib> -#include <array> +#include <tuple> #include <cctype> #include <cassert> #include <sys/time.h> @@ -219,7 +219,7 @@ int main(int argc,char **argv){ vector<Team> teams; bool opt_pos = false; - vector<pair<int,int>> positions; + vector<tuple<int,int,int>> positions; int k = 1; // Increase past options; @@ -233,14 +233,14 @@ int main(int argc,char **argv){ assert(f); teams.push_back(assemble(preprocess(f))); if(opt_pos) { - positions.emplace_back((int)strtol(argv[i+1],NULL,10), (int)strtol(argv[i+2],NULL,10)); // TODO: check if i>argc - i += 2; + positions.emplace_back((int)strtol(argv[i+1],NULL,10), (int)strtol(argv[i+2],NULL,10), (int)strtol(argv[i+3],NULL,10)); // TODO: check if i>argc + i += 3; } } for(int i=0; i<(int)teams.size(); i++) { const Team &t = teams[i]; - Robot &r = opt_pos ? world.create(&t,2,t.banks.size(),false, positions[i].first, positions[i].second) + Robot &r = opt_pos ? world.create(&t,2,t.banks.size(),false, get<0>(positions[i]), get<1>(positions[i]), get<2>(positions[i])) : world.create(&t,2,t.banks.size(),false); for(int i=0;i<(int)t.banks.size();i++){ @@ -232,17 +232,18 @@ World::~World(){ } Robot& World::create(const Team *team,int iset,int nbanks,bool mobile){ - int x,y; + int x,y,heading; while(true){ x=rand()%SIZE; y=rand()%SIZE; if(!board[y][x])break; } + heading = rand()%4; - return create(team, iset, nbanks, mobile, x, y); + return create(team, iset, nbanks, mobile, x, y, heading); } -Robot& World::create(const Team *team,int iset,int nbanks,bool mobile,int x,int y){ +Robot& World::create(const Team *team,int iset,int nbanks,bool mobile,int x,int y,int heading){ x = (x%SIZE + SIZE)%SIZE; // Negative values are wrapped y = (y%SIZE + SIZE)%SIZE; assert(!board[y][x]); @@ -251,7 +252,7 @@ Robot& World::create(const Team *team,int iset,int nbanks,bool mobile,int x,int board[y][x]->banks.resize(nbanks); board[y][x]->iset=iset; board[y][x]->mobile=mobile; - board[y][x]->heading=rand()%4; + board[y][x]->heading=heading%4; return *board[y][x]; } @@ -94,7 +94,7 @@ public: ~World(); Robot& create(const Team *team,int iset,int nbanks,bool mobile); - Robot& create(const Team *team,int iset,int nbanks,bool mobile,int x,int y); + Robot& create(const Team *team,int iset,int nbanks,bool mobile,int x,int y,int heading); Robot& createInFront(const Robot *caller,const Team *team,int iset,int nbanks,bool mobile); void tick(); |