diff --git a/Board.cpp b/Board.cpp index dd5ba43..70fae6d 100644 --- a/Board.cpp +++ b/Board.cpp @@ -3,8 +3,20 @@ extern Meteos*game; -Board::Board(vi2d boardSize,float gravity) -:boardSize(boardSize),gravity(gravity){ +Board::Board(vi2d boardSize,float gravity,float spawnRate) +:boardSize(boardSize),gravity(gravity),spawnRate(spawnRate){ drawOffset={(float)game->ScreenWidth()/2-boardSize.x/2*12,(float)game->ScreenHeight()/2-boardSize.y/2*12}; yBottom=(boardSize.y-1)*12; + for (int i=0;i()); + } +} + +void Board::spawnBlock(int col){ + Block newBlock=Block({(float)col*12,-120}); + cols[col].push_back(newBlock); +} + +std::vector&Board::getBlocks(int col){ + return cols[col]; } \ No newline at end of file diff --git a/Board.h b/Board.h index 6475cff..55dd540 100644 --- a/Board.h +++ b/Board.h @@ -1,14 +1,19 @@ #ifndef BOARD_H #define BOARD_H #include "pixelGameEngine.h" +#include "Block.h" class Board{ + std::vector> cols; public: float yBottom; vf2d drawOffset; vi2d boardSize; float gravity; + float spawnRate; Board(){} - Board(vi2d boardSize,float gravity); + Board(vi2d boardSize,float gravity,float spawnRate); + void spawnBlock(int col); + std::vector&getBlocks(int col); }; #endif \ No newline at end of file diff --git a/C++ProjectTemplate b/C++ProjectTemplate index 4f4cd49..e666ae6 100755 Binary files a/C++ProjectTemplate and b/C++ProjectTemplate differ diff --git a/Meteos.h b/Meteos.h index d419432..55b677a 100644 --- a/Meteos.h +++ b/Meteos.h @@ -1,7 +1,6 @@ #ifndef METEOS_H #define METEOS_H #include "pixelGameEngine.h" -#include "Block.h" #include "Board.h" #include @@ -10,7 +9,6 @@ class Meteos : public olc::PixelGameEngine{ Meteos(){ sAppName="Meteos"; } - std::vector blocks; float lastBlockSpawn=0.0f; std::uniform_int_distribution<> randBlockPos; std::mt19937 gen; diff --git a/main.cpp b/main.cpp index d6dd9a9..003a408 100644 --- a/main.cpp +++ b/main.cpp @@ -13,16 +13,16 @@ bool Meteos::OnUserCreate() gen=std::mt19937(rd()); //Standard mersenne_twister_engine seeded with rd() randBlockPos=std::uniform_int_distribution<>(0, 9); - gameBoard=Board({10,14},6.f); + gameBoard=Board({10,14},12.f,3.0f); return true; } bool Meteos::OnUserUpdate(float fElapsedTime) { lastBlockSpawn+=fElapsedTime; - if (lastBlockSpawn>=5.0f){ - lastBlockSpawn-=5.0f; - blocks.push_back(Block({(float)randBlockPos(gen)*12,0})); + if (lastBlockSpawn>=3.0f){ + lastBlockSpawn-=3.0f; + gameBoard.spawnBlock(randBlockPos(gen)); } Clear(Pixel(32,32,255)); for (int x=-1;x<=gameBoard.boardSize.x;x++) { @@ -34,15 +34,30 @@ bool Meteos::OnUserUpdate(float fElapsedTime) } } } - for (Block&b:blocks) { - if (b.pos.y=0;yy--) { + Block&b2=gameBoard.getBlocks(i)[yy]; + if (b.pos.y+12>b2.pos.y) { + collisionDetected=true; + b.vspeed=0; + b.pos.y=b2.pos.y-12; + break; + } + } + if (!collisionDetected) { + b.pos.y+=b.vspeed*fElapsedTime; + } + } else { + b.vspeed=0; + b.pos.y=gameBoard.yBottom; + } + FillRectDecal(b.pos+gameBoard.drawOffset,{12,12},GREEN); } - FillRectDecal(b.pos+gameBoard.drawOffset,{12,12},GREEN); } return true; }