Advertisement
SwissAndOr

shape.h and shape.cpp (Polyis)

Apr 27th, 2015
387
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.06 KB | None | 0 0
  1.                             shape.h
  2.  
  3. #include <SDL.h>
  4.  
  5. #include <vector>
  6.  
  7. struct Tile {
  8.     Tile(Uint8 newR = 0, Uint8 newG = 0, Uint8 newB = 0, bool doesExist = false) : r(newR), g(newG), b(newB), exists(doesExist) {}
  9.  
  10.     bool exists;
  11.     Uint8 r, g, b;
  12. };
  13.  
  14. typedef std::vector<std::vector<Tile>> gridArray;
  15.  
  16. class Shape {
  17. public:
  18.     static const std::vector<gridArray> shapes;
  19.  
  20.     static int tiles;
  21.  
  22.     gridArray data;
  23.     int y = 0, x = 3;
  24.  
  25.     bool rotate(gridArray, bool clockwise);
  26.     bool wallKick(gridArray grid, gridArray rotData);
  27.     bool move(gridArray grid, bool right);
  28.     bool fall(gridArray grid, bool set);
  29. };
  30.  
  31.                             shape.cpp
  32.  
  33. #include "Shape.h"
  34.  
  35. const std::vector<gridArray> Shape::shapes = { // Temp hardcoded vector of shapes before making the import system
  36.     {{Tile(000, 255, 255, false), Tile(000, 255, 255, false), Tile(000, 255, 255, false), Tile(000, 255, 255, false)},
  37.     {Tile(000, 255, 255, true), Tile(000, 255, 255, true), Tile(000, 255, 255, true), Tile(000, 255, 255, true)},
  38.     {Tile(000, 255, 255, false), Tile(000, 255, 255, false), Tile(000, 255, 255, false), Tile(000, 255, 255, false)},
  39.     {Tile(000, 255, 255, false), Tile(000, 255, 255, false), Tile(000, 255, 255, false), Tile(000, 255, 255, false)}
  40.     },
  41.     {{Tile(000, 000, 255, true), Tile(000, 000, 255, false), Tile(000, 000, 255, false), Tile(000, 000, 255, false)},
  42.     {Tile(000, 000, 255, true), Tile(000, 000, 255, true), Tile(000, 000, 255, true), Tile(000, 000, 255, false)},
  43.     {Tile(000, 000, 255, false), Tile(000, 000, 255, false), Tile(000, 000, 255, false), Tile(000, 000, 255, false)},
  44.     {Tile(000, 000, 255, false), Tile(000, 000, 255, false), Tile(000, 000, 255, false), Tile(000, 000, 255, false)}
  45.     },
  46.     {{Tile(255, 128, 000, false), Tile(255, 128, 000, false), Tile(255, 128, 000, true), Tile(255, 128, 000, false)},
  47.     {Tile(255, 128, 000, true), Tile(255, 128, 000, true), Tile(255, 128, 000, true), Tile(255, 128, 000, false)},
  48.     {Tile(255, 128, 000, false), Tile(255, 128, 000, false), Tile(255, 128, 000, false), Tile(255, 128, 000, false)},
  49.     {Tile(255, 128, 000, false), Tile(255, 128, 000, false), Tile(255, 128, 000, false), Tile(255, 128, 000, false)}
  50.     },
  51.     {{Tile(255, 255, 000, false), Tile(255, 255, 000, false), Tile(255, 255, 000, false), Tile(255, 255, 000, false)},
  52.     {Tile(255, 255, 000, false), Tile(255, 255, 000, true), Tile(255, 255, 000, true), Tile(255, 255, 000, false)},
  53.     {Tile(255, 255, 000, false), Tile(255, 255, 000, true), Tile(255, 255, 000, true), Tile(255, 255, 000, false)},
  54.     {Tile(255, 255, 000, false), Tile(255, 255, 000, false), Tile(255, 255, 000, false), Tile(255, 255, 000, false)}
  55.     },
  56.     {{Tile(128, 255, 000, false), Tile(128, 255, 000, true), Tile(128, 255, 000, true), Tile(128, 255, 000, false)},
  57.     {Tile(128, 255, 000, true), Tile(128, 255, 000, true), Tile(128, 255, 000, false), Tile(128, 255, 000, false)},
  58.     {Tile(128, 255, 000, false), Tile(128, 255, 000, false), Tile(128, 255, 000, false), Tile(128, 255, 000, false)},
  59.     {Tile(128, 255, 000, false), Tile(128, 255, 000, false), Tile(128, 255, 000, false), Tile(128, 255, 000, false)}
  60.     },
  61.     {{Tile(128, 000, 128, false), Tile(128, 000, 128, true), Tile(128, 000, 128, false), Tile(128, 000, 128, false)},
  62.     {Tile(128, 000, 128, true), Tile(128, 000, 128, true), Tile(128, 000, 128, true), Tile(128, 000, 128, false)},
  63.     {Tile(128, 000, 128, false), Tile(128, 000, 128, false), Tile(128, 000, 128, false), Tile(128, 000, 128, false)},
  64.     {Tile(128, 000, 128, false), Tile(128, 000, 128, false), Tile(128, 000, 128, false), Tile(128, 000, 128, false)}
  65.     },
  66.     {{Tile(255, 000, 000, true), Tile(255, 000, 000, true), Tile(255, 000, 000, false), Tile(255, 000, 000, false)},
  67.     {Tile(255, 000, 000, false), Tile(255, 000, 000, true), Tile(255, 000, 000, true), Tile(255, 000, 000, false)},
  68.     {Tile(255, 000, 000, false), Tile(255, 000, 000, false), Tile(255, 000, 000, false), Tile(255, 000, 000, false)},
  69.     {Tile(255, 000, 000, false), Tile(255, 000, 000, false), Tile(255, 000, 000, false), Tile(255, 000, 000, false)}
  70.     },
  71. };
  72.  
  73. int Shape::tiles = 4;
  74.  
  75. bool Shape::rotate(gridArray, bool clockwise) {
  76.     bool success = true;
  77.  
  78.     gridArray rotData(tiles, std::vector<Tile>(tiles));
  79.  
  80.     // TODO: Revise rotation system
  81.     int n = 2;
  82.  
  83.     if (data[0][0].r != 128 && data[0][0].g == 255) {
  84.         n = 3;
  85.     }
  86.  
  87.     return success;
  88. }
  89.  
  90. bool Shape::wallKick(gridArray grid, gridArray rotData) {
  91.     return false;
  92. }
  93.  
  94. bool Shape::move(gridArray grid, bool right) {
  95.     int newX = x + (right ? 1 : -1);
  96.  
  97.     for (int yy = 0; yy < Shape::tiles; yy++) {
  98.         for (int xx = 0; xx < Shape::tiles; xx++) {
  99.             if (data[yy][xx].exists) {
  100.                 if (xx + newX < 0 || xx + newX >= grid[0].size()) {
  101.                     return false;
  102.                 }
  103.  
  104.                 if (grid[yy + y][xx + newX].exists) {
  105.                     return false;
  106.                 }
  107.             }
  108.         }
  109.     }
  110.  
  111.     x = newX;
  112.     return true;
  113. }
  114.  
  115. bool Shape::fall(gridArray grid, bool set) {
  116.     int newY = y + 1;
  117.  
  118.     for (int xx = 0; xx < tiles; xx++) {
  119.         for (int yy = 0; yy < tiles; yy++) {
  120.             if (data[yy][xx].exists) {
  121.                 if (yy + newY >= grid.size()) {
  122.                     return false;
  123.                 }
  124.  
  125.                 if (grid[yy + newY][xx + x].exists) {
  126.                     return false;
  127.                 }
  128.             }
  129.         }
  130.     }
  131.  
  132.     if (set) y = newY;
  133.     return true;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement