diff --git a/BlockClump.cpp b/BlockClump.cpp index 25a5dea..843dfe6 100644 --- a/BlockClump.cpp +++ b/BlockClump.cpp @@ -8,6 +8,10 @@ void BlockClump::addBlock(int col){ blocks.push_back(Block({(float)col*12,0})); } +void BlockClump::addBlock(vi2d offset){ + blocks.push_back(Block(offset)); +} + vf2d BlockClump::getBlockPosition(Block&b){ return {b.pos.x,b.pos.y+y}; } \ No newline at end of file diff --git a/BlockClump.h b/BlockClump.h index 9eb743d..ccf0f9d 100644 --- a/BlockClump.h +++ b/BlockClump.h @@ -13,6 +13,7 @@ class BlockClump{ BlockClump(){} std::vector&getBlocks(); void addBlock(int col); + void addBlock(vi2d offset); //Get a block's position relative to this block clump. vf2d getBlockPosition(Block&b); }; diff --git a/Board.cpp b/Board.cpp index 9806943..3c232ef 100644 --- a/Board.cpp +++ b/Board.cpp @@ -14,6 +14,16 @@ Board::Board(vi2d boardSize,float gravity,float spawnRate) void Board::spawnBlock(int col){ BlockClump c=BlockClump(); c.addBlock(col); + if (game->coinFlip(game->gen)==0) { + if (col>0) { + c.addBlock(col-1); + } + } + if (game->coinFlip(game->gen)==0) { + if (col&Board::getBlocks(int col){ std::vector&Board::getBlockClumps(){ return clumps; +} + +void Board::removeClump(int ind){ + BlockClump&c=clumps[ind]; + for (Block b:c.getBlocks()){ + cols[b.pos.x/12].push_back(b); + cols[b.pos.x/12][cols[b.pos.x/12].size()-1].pos=c.getBlockPosition(b); + } + clumps.erase(clumps.begin()+ind); } \ No newline at end of file diff --git a/Board.h b/Board.h index db9ccde..c214acb 100644 --- a/Board.h +++ b/Board.h @@ -19,5 +19,6 @@ class Board{ void spawnBlock(int col); std::vector&getBlocks(int col); std::vector&getBlockClumps(); + void removeClump(int ind); }; #endif \ No newline at end of file diff --git a/C++ProjectTemplate b/C++ProjectTemplate index 31d96b2..dd8be77 100755 Binary files a/C++ProjectTemplate and b/C++ProjectTemplate differ diff --git a/Meteos.h b/Meteos.h index 55b677a..b378218 100644 --- a/Meteos.h +++ b/Meteos.h @@ -10,7 +10,7 @@ class Meteos : public olc::PixelGameEngine{ sAppName="Meteos"; } float lastBlockSpawn=0.0f; - std::uniform_int_distribution<> randBlockPos; + std::uniform_int_distribution<> randBlockPos,coinFlip; std::mt19937 gen; Board gameBoard; bool OnUserCreate()override; diff --git a/main.cpp b/main.cpp index f919fc4..915ae2b 100644 --- a/main.cpp +++ b/main.cpp @@ -12,6 +12,7 @@ bool Meteos::OnUserCreate() std::random_device rd; //Will be used to obtain a seed for the random number engine gen=std::mt19937(rd()); //Standard mersenne_twister_engine seeded with rd() randBlockPos=std::uniform_int_distribution<>(0, 9); + coinFlip=std::uniform_int_distribution<>(0, 1); gameBoard=Board({10,14},12.f,3.0f); return true; @@ -40,28 +41,28 @@ bool Meteos::OnUserUpdate(float fElapsedTime) for (int j=0;j=b2.pos.y&&c.getBlockPosition(b).y<=b2.pos.y+12){ c.y=b2.pos.y-12; c.vspeed=0; - gameBoard.removeClump(c); - i--; + gameBoard.removeClump(i--); + goto nextClump; } } if (c.getBlockPosition(b).y>=gameBoard.yBottom) { c.y=gameBoard.yBottom; c.vspeed=0; - gameBoard.removeClump(c); - i--; + gameBoard.removeClump(i--); + goto nextClump; } } - applyVelocity: for (int j=0;j