Advertisement
Taraxacum

Logo Language

Dec 4th, 2020
527
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.82 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. #define CANVAS_WIDTH  20
  4. #define CANVAS_HEIGHT 20
  5.  
  6. class Direction {
  7. private:
  8.     enum direction_t {
  9.         UP,
  10.         DOWN,
  11.         LEFT,
  12.         RIGHT
  13.     } _dir;
  14.  
  15. public:
  16.     Direction(direction_t dir = DOWN)
  17.         : _dir(dir)
  18.     {
  19.     }
  20.  
  21.     Direction& turn_left()
  22.     {
  23.         switch (_dir) {
  24.         case UP:
  25.             _dir = LEFT;
  26.             break;
  27.         case DOWN:
  28.             _dir = RIGHT;
  29.             break;
  30.         case LEFT:
  31.             _dir = DOWN;
  32.             break;
  33.         case RIGHT:
  34.             _dir = UP;
  35.             break;
  36.         default:
  37.             throw std::runtime_error("Unknown direction");
  38.         }
  39.         return *this;
  40.     }
  41.  
  42.     Direction& turn_right()
  43.     {
  44.         switch (_dir) {
  45.         case UP:
  46.             _dir = RIGHT;
  47.             break;
  48.         case DOWN:
  49.             _dir = LEFT;
  50.             break;
  51.         case LEFT:
  52.             _dir = UP;
  53.             break;
  54.         case RIGHT:
  55.             _dir = DOWN;
  56.             break;
  57.         default:
  58.             throw std::runtime_error("Unknown direction");
  59.         }
  60.         return *this;
  61.     }
  62.  
  63.     void forward(int& row, int& col) const
  64.     {
  65.         switch (_dir) {
  66.         case UP:
  67.             row--;
  68.             break;
  69.         case DOWN:
  70.             row++;
  71.             break;
  72.         case LEFT:
  73.             col--;
  74.             break;
  75.         case RIGHT:
  76.             col++;
  77.             break;
  78.         default:
  79.             throw std::runtime_error("Unknown direction");
  80.         }
  81.     }
  82. };
  83.  
  84. int main(int argc, char const* argv[])
  85. {
  86.     bool canvas[CANVAS_HEIGHT][CANVAS_WIDTH] = { false };
  87.  
  88.     bool pen_enabled = false;
  89.  
  90.     int pos_row = 0, pos_col = 0;
  91.     Direction dir;
  92.     int input = 0;
  93.     int step = -1;
  94.  
  95.     while (input != 9) {
  96.         std::cin >> input;
  97.  
  98.         switch (input) {
  99.         case 1:
  100.             pen_enabled = false;
  101.             break;
  102.         case 2:
  103.             pen_enabled = true;
  104.             break;
  105.         case 3:
  106.             dir.turn_left();
  107.             break;
  108.         case 4:
  109.             dir.turn_right();
  110.             break;
  111.         case 5:
  112.             std::cin >> step;
  113.  
  114.             while (step > 0) {
  115.                 step--;
  116.                 dir.forward(pos_row, pos_col);
  117.                 canvas[pos_row][pos_col] = canvas[pos_row][pos_col] || pen_enabled;
  118.             }
  119.             break;
  120.         case 6:
  121.             for (int i = 0; i < CANVAS_HEIGHT; i++) {
  122.                 std::cout << i << "\t | ";
  123.  
  124.                 for (int j = 0; j < CANVAS_WIDTH; j++) {
  125.                     std::cout << (canvas[i][j] ? "*" : " ");
  126.                 }
  127.                 std::cout << std::endl;
  128.             }
  129.         case 9:
  130.         default:
  131.             input = 9;
  132.             break;
  133.         }
  134.     }
  135.  
  136.     return 0;
  137. }
  138.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement