Advertisement
Guest User

Untitled

a guest
Dec 9th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.95 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <utility>
  4. #include <vector>
  5. #include <ctime>
  6. using namespace std;
  7.  
  8. class Organism {
  9. public:
  10. int get_x();
  11. int get_y();
  12. int get_steps_made();
  13. char get_type();
  14. void set_x(int x_coord);
  15. void set_y(int y_coord);
  16. void iterate_steps_made();
  17. void set_steps_made(int steps);
  18. void set_type(char type_char);
  19. private:
  20. int x;
  21. int y;
  22. int steps_made;
  23. char type;
  24. };
  25.  
  26. class World {
  27. public:
  28. World();
  29. World(const World& other);
  30. World(World&& other);
  31. ~World();
  32. World& operator=(const World& right);
  33. World& operator=(World&& right);
  34.  
  35. int get_current_step();
  36. void iterate_current_step();
  37. void set_organism(int x, int y, Organism* organism);
  38. void drop_organism(int x, int y);
  39. void display_world();
  40. Organism* get_organism(int x, int y);
  41. vector<Organism*>& operator[](int index);
  42. private:
  43. int current_step;
  44. vector < vector<Organism*>> grid;
  45. };
  46.  
  47. class Ant : public Organism {
  48. public:
  49. Ant(int x, int y);
  50. void move(World& world);
  51. private:
  52. };
  53.  
  54. class Doodlebug : public Organism {
  55. public:
  56. Doodlebug(int x, int y);
  57. //void move(const World& world);
  58. private:
  59. };
  60.  
  61. int main() {
  62. World world = World();
  63. world.display_world();
  64.  
  65. return 0;
  66. }
  67.  
  68. World::World() {
  69. int x, y;
  70. vector<Organism*> temp(20);
  71.  
  72. srand(time(0));
  73. current_step = 1;
  74.  
  75. for (x = 0; x < 20; x++) {
  76. grid.push_back(temp);
  77. for (y = 0; y < 20; y++) {
  78. grid[x][y] = nullptr;
  79. }
  80. }
  81.  
  82. for (int i = 0; i < 5; i++) {
  83. do {
  84. x = rand() % 20;
  85. y = rand() % 20;
  86. } while (grid[x][y] != nullptr);
  87. grid[x][y] = new Doodlebug(x, y);
  88. }
  89.  
  90. for (int i = 0; i < 100; i++) {
  91. do {
  92. x = rand() % 20;
  93. y = rand() % 20;
  94. } while (grid[x][y] != nullptr);
  95. grid[x][y] = new Ant(x, y);
  96. }
  97. }
  98.  
  99. World::World(const World& other) {
  100. current_step = other.current_step;
  101.  
  102. for (int x = 0; x < 20; x++) {
  103. for (int y = 0; y < 20; y++) {
  104. if (other.grid[x][y] == nullptr) {
  105. grid[x][y] = nullptr;
  106. }
  107. else if (other.grid[x][y]->get_type() == 'A') {
  108. grid[x][y] = new Ant(other.grid[x][y]->get_x(), other.grid[x][y]->get_y());
  109. }
  110. else if (other.grid[x][y]->get_type() == 'D') {
  111. grid[x][y] = new Doodlebug(other.grid[x][y]->get_x(), other.grid[x][y]->get_y());
  112. }
  113. }
  114. }
  115. }
  116.  
  117. World::World(World&& other) {
  118. current_step = other.current_step;
  119. swap(grid, other.grid);
  120. }
  121.  
  122. World::~World() {
  123. for (int x = 0; x < 20; x++) {
  124. for (int y = 0; y < 20; y++) {
  125. if (grid[x][y] != nullptr) {
  126. delete grid[x][y];
  127. }
  128. }
  129. }
  130. }
  131.  
  132. World& World::operator=(const World& right) {
  133. current_step = right.current_step;
  134.  
  135. for (int x = 0; x < 20; x++) {
  136. for (int y = 0; y < 20; y++) {
  137. if (right.grid[x][y] == nullptr) {
  138. grid[x][y] = nullptr;
  139. }
  140. else if (right.grid[x][y]->get_type() == 'A') {
  141. grid[x][y] = new Ant(right.grid[x][y]->get_x(), right.grid[x][y]->get_y());
  142. }
  143. else if (right.grid[x][y]->get_type() == 'D') {
  144. grid[x][y] = new Doodlebug(right.grid[x][y]->get_x(), right.grid[x][y]->get_y());
  145. }
  146. }
  147. }
  148.  
  149. return *this;
  150. }
  151.  
  152. World& World::operator=(World&& right) {
  153. current_step = right.current_step;
  154. swap(grid, right.grid);
  155.  
  156. return *this;
  157. }
  158.  
  159. int World::get_current_step() {
  160. return current_step;
  161. }
  162.  
  163. void World::iterate_current_step() {
  164. current_step++;
  165. }
  166.  
  167. void World::set_organism(int x, int y, Organism* organism) {
  168. grid[x][y] = organism;
  169. }
  170.  
  171. void World::drop_organism(int x, int y) {
  172. grid[x][y] = nullptr;
  173. }
  174.  
  175. void World::display_world() {
  176. for (int y = 0; y < 20; y++) {
  177. for (int x = 0; x < 20; x++) {
  178. if (grid[x][y] = nullptr) {
  179. cout << " ";
  180. }
  181. else if (grid[x][y]->get_type() == 'A') {
  182. cout << "O";
  183. }
  184. else if (grid[x][y]->get_type() == 'D') {
  185. cout << "X";
  186. }
  187. }
  188. cout << endl;
  189. }
  190. }
  191.  
  192. Organism* World::get_organism(int x, int y) {
  193. return grid[x][y];
  194. }
  195.  
  196. vector<Organism*>& World::operator[](int index) {
  197. return grid[index];
  198. }
  199.  
  200. int Organism::get_x() {
  201. return x;
  202. }
  203.  
  204. int Organism::get_y() {
  205. return y;
  206. }
  207.  
  208. int Organism::get_steps_made() {
  209. return steps_made;
  210. }
  211.  
  212. char Organism::get_type() {
  213. return type;
  214. }
  215.  
  216. void Organism::set_x(int x_coord) {
  217. x = x_coord;
  218. }
  219.  
  220. void Organism::set_y(int y_coord) {
  221. y = y_coord;
  222. }
  223.  
  224. void Organism::set_steps_made(int steps) {
  225. steps_made = steps;
  226. }
  227.  
  228. void Organism::iterate_steps_made() {
  229. steps_made++;
  230. }
  231.  
  232. void Organism::set_type(char type_char) {
  233. type = type_char;
  234. }
  235.  
  236. Ant::Ant(int x, int y) {
  237. set_x(x);
  238. set_y(y);
  239. set_steps_made(0);
  240. set_type('A');
  241. //cout << get_x() << " " << get_y() << endl;
  242. }
  243.  
  244. void Ant::move(World& world) {
  245. int direction;
  246. int temp_x = get_x();
  247. int temp_y = get_y();
  248.  
  249. srand(time(0));
  250. direction = rand() % 4;
  251.  
  252. switch (direction) {
  253. case 0:
  254. if (get_y() != 19 && get_steps_made() < world.get_current_step() && world.get_organism(get_x(), get_y() + 1) == nullptr) {
  255. world.set_organism(get_x(), get_y() + 1, this);
  256. world.drop_organism(get_x(), get_y());
  257. set_y(get_y() + 1);
  258. iterate_steps_made();
  259. }
  260. break;
  261. case 1:
  262. if (get_x() != 19 && get_steps_made() < world.get_current_step() && world.get_organism(get_x() + 1, get_y()) == nullptr) {
  263. world.set_organism(get_x() + 1, get_y(), this);
  264. world.drop_organism(get_x(), get_y());
  265. set_x(get_x() + 1);
  266. iterate_steps_made();
  267. }
  268. break;
  269. case 2:
  270. if (get_y() != 0 && get_steps_made() < world.get_current_step() && world.get_organism(get_x(), get_y() - 1) == nullptr) {
  271. world.set_organism(get_x(), get_y() - 1, this);
  272. world.drop_organism(get_x(), get_y());
  273. set_y(get_y() - 1);
  274. iterate_steps_made();
  275. }
  276. break;
  277. case 4:
  278. if (get_x() != 0 && get_steps_made() < world.get_current_step() && world.get_organism(get_x() - 1, get_y()) == nullptr) {
  279. world.set_organism(get_x() - 1, get_y(), this);
  280. world.drop_organism(get_x(), get_y());
  281. set_x(get_x() - 1);
  282. iterate_steps_made();
  283. }
  284. break;
  285. }
  286. }
  287.  
  288. Doodlebug::Doodlebug(int x, int y) {
  289. set_x(x);
  290. set_y(y);
  291. set_type('D');
  292. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement