diff --git a/agent.cc b/agent.cc index de7227f..f9c8eb2 100644 --- a/agent.cc +++ b/agent.cc @@ -13,3 +13,15 @@ agent::put_at(class tile &t) exit(EXIT_FAILURE); } } + +bool +agent::move_dir(int dir_x, int dir_y) +{ + class tile *t2 = &tile->tile_in_dir(dir_x, dir_y); + if (!t2->on_agent_enter(*this)) + return false; + + tile->on_agent_leave(*this); + tile = t2; + return true; +} diff --git a/agent.h b/agent.h index aaf48ca..af68f63 100644 --- a/agent.h +++ b/agent.h @@ -13,6 +13,8 @@ public: put_at(tile_); }; + bool move_dir(int dir_x, int dir_y); + private: /* Just for initial placement. */ void put_at(class tile &tile); diff --git a/main.cc b/main.cc index e9f14fd..12f6ddd 100644 --- a/main.cc +++ b/main.cc @@ -12,5 +12,15 @@ main(int argc, char *argv[]) class agent agent(0, agentpos); map.print_map(); + std::cout << '\n'; + + agent.move_dir(1, 0); + map.print_map(); + std::cout << '\n'; + + agent.move_dir(0, -1); + map.print_map(); + std::cout << '\n'; + return 0; }