Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- shape.h
- #include <SDL.h>
- #include <vector>
- struct Tile {
- Tile(Uint8 newR = 0, Uint8 newG = 0, Uint8 newB = 0, bool doesExist = false) : r(newR), g(newG), b(newB), exists(doesExist) {}
- bool exists;
- Uint8 r, g, b;
- };
- typedef std::vector<std::vector<Tile>> gridArray;
- class Shape {
- public:
- static const std::vector<gridArray> shapes;
- static int tiles;
- gridArray data;
- int y = 0, x = 3;
- bool rotate(gridArray, bool clockwise);
- bool wallKick(gridArray grid, gridArray rotData);
- bool move(gridArray grid, bool right);
- bool fall(gridArray grid, bool set);
- };
- shape.cpp
- #include "Shape.h"
- const std::vector<gridArray> Shape::shapes = { // Temp hardcoded vector of shapes before making the import system
- {{Tile(000, 255, 255, false), Tile(000, 255, 255, false), Tile(000, 255, 255, false), Tile(000, 255, 255, false)},
- {Tile(000, 255, 255, true), Tile(000, 255, 255, true), Tile(000, 255, 255, true), Tile(000, 255, 255, true)},
- {Tile(000, 255, 255, false), Tile(000, 255, 255, false), Tile(000, 255, 255, false), Tile(000, 255, 255, false)},
- {Tile(000, 255, 255, false), Tile(000, 255, 255, false), Tile(000, 255, 255, false), Tile(000, 255, 255, false)}
- },
- {{Tile(000, 000, 255, true), Tile(000, 000, 255, false), Tile(000, 000, 255, false), Tile(000, 000, 255, false)},
- {Tile(000, 000, 255, true), Tile(000, 000, 255, true), Tile(000, 000, 255, true), Tile(000, 000, 255, false)},
- {Tile(000, 000, 255, false), Tile(000, 000, 255, false), Tile(000, 000, 255, false), Tile(000, 000, 255, false)},
- {Tile(000, 000, 255, false), Tile(000, 000, 255, false), Tile(000, 000, 255, false), Tile(000, 000, 255, false)}
- },
- {{Tile(255, 128, 000, false), Tile(255, 128, 000, false), Tile(255, 128, 000, true), Tile(255, 128, 000, false)},
- {Tile(255, 128, 000, true), Tile(255, 128, 000, true), Tile(255, 128, 000, true), Tile(255, 128, 000, false)},
- {Tile(255, 128, 000, false), Tile(255, 128, 000, false), Tile(255, 128, 000, false), Tile(255, 128, 000, false)},
- {Tile(255, 128, 000, false), Tile(255, 128, 000, false), Tile(255, 128, 000, false), Tile(255, 128, 000, false)}
- },
- {{Tile(255, 255, 000, false), Tile(255, 255, 000, false), Tile(255, 255, 000, false), Tile(255, 255, 000, false)},
- {Tile(255, 255, 000, false), Tile(255, 255, 000, true), Tile(255, 255, 000, true), Tile(255, 255, 000, false)},
- {Tile(255, 255, 000, false), Tile(255, 255, 000, true), Tile(255, 255, 000, true), Tile(255, 255, 000, false)},
- {Tile(255, 255, 000, false), Tile(255, 255, 000, false), Tile(255, 255, 000, false), Tile(255, 255, 000, false)}
- },
- {{Tile(128, 255, 000, false), Tile(128, 255, 000, true), Tile(128, 255, 000, true), Tile(128, 255, 000, false)},
- {Tile(128, 255, 000, true), Tile(128, 255, 000, true), Tile(128, 255, 000, false), Tile(128, 255, 000, false)},
- {Tile(128, 255, 000, false), Tile(128, 255, 000, false), Tile(128, 255, 000, false), Tile(128, 255, 000, false)},
- {Tile(128, 255, 000, false), Tile(128, 255, 000, false), Tile(128, 255, 000, false), Tile(128, 255, 000, false)}
- },
- {{Tile(128, 000, 128, false), Tile(128, 000, 128, true), Tile(128, 000, 128, false), Tile(128, 000, 128, false)},
- {Tile(128, 000, 128, true), Tile(128, 000, 128, true), Tile(128, 000, 128, true), Tile(128, 000, 128, false)},
- {Tile(128, 000, 128, false), Tile(128, 000, 128, false), Tile(128, 000, 128, false), Tile(128, 000, 128, false)},
- {Tile(128, 000, 128, false), Tile(128, 000, 128, false), Tile(128, 000, 128, false), Tile(128, 000, 128, false)}
- },
- {{Tile(255, 000, 000, true), Tile(255, 000, 000, true), Tile(255, 000, 000, false), Tile(255, 000, 000, false)},
- {Tile(255, 000, 000, false), Tile(255, 000, 000, true), Tile(255, 000, 000, true), Tile(255, 000, 000, false)},
- {Tile(255, 000, 000, false), Tile(255, 000, 000, false), Tile(255, 000, 000, false), Tile(255, 000, 000, false)},
- {Tile(255, 000, 000, false), Tile(255, 000, 000, false), Tile(255, 000, 000, false), Tile(255, 000, 000, false)}
- },
- };
- int Shape::tiles = 4;
- bool Shape::rotate(gridArray, bool clockwise) {
- bool success = true;
- gridArray rotData(tiles, std::vector<Tile>(tiles));
- // TODO: Revise rotation system
- int n = 2;
- if (data[0][0].r != 128 && data[0][0].g == 255) {
- n = 3;
- }
- return success;
- }
- bool Shape::wallKick(gridArray grid, gridArray rotData) {
- return false;
- }
- bool Shape::move(gridArray grid, bool right) {
- int newX = x + (right ? 1 : -1);
- for (int yy = 0; yy < Shape::tiles; yy++) {
- for (int xx = 0; xx < Shape::tiles; xx++) {
- if (data[yy][xx].exists) {
- if (xx + newX < 0 || xx + newX >= grid[0].size()) {
- return false;
- }
- if (grid[yy + y][xx + newX].exists) {
- return false;
- }
- }
- }
- }
- x = newX;
- return true;
- }
- bool Shape::fall(gridArray grid, bool set) {
- int newY = y + 1;
- for (int xx = 0; xx < tiles; xx++) {
- for (int yy = 0; yy < tiles; yy++) {
- if (data[yy][xx].exists) {
- if (yy + newY >= grid.size()) {
- return false;
- }
- if (grid[yy + newY][xx + x].exists) {
- return false;
- }
- }
- }
- }
- if (set) y = newY;
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement