diff --git a/Block.h b/Block.h index cd4db12..ebb86ad 100644 --- a/Block.h +++ b/Block.h @@ -22,6 +22,7 @@ class Block{ BlockColor col; bool markedForDeletion=false; bool markedForRemoval=false; + bool addedToLaunchList=false; Block(vf2d pos,BlockColor col) :pos(pos),col(col){} }; diff --git a/C++ProjectTemplate b/C++ProjectTemplate index e7687bd..e13bde8 100755 Binary files a/C++ProjectTemplate and b/C++ProjectTemplate differ diff --git a/Meteos.h b/Meteos.h index d9744b1..767ab43 100644 --- a/Meteos.h +++ b/Meteos.h @@ -14,7 +14,6 @@ class Meteos : public olc::PixelGameEngine{ std::mt19937 gen; Board gameBoard; std::map SPRITES; - bool onlyOnce=false; bool OnUserCreate()override; bool OnUserUpdate(float fElapsedTime)override; }; diff --git a/main.cpp b/main.cpp index a6a5eed..eb66913 100644 --- a/main.cpp +++ b/main.cpp @@ -18,23 +18,20 @@ bool Meteos::OnUserCreate() gameBoard=Board({10,14},20.f,100.f,-20.f,1.0f,{3,0,0,0,0,0,0,0,0,0},SPRITES["blocks_test.png"]); + BlockClump c; + c.addBlock(0,2,BlockColor::RED); + c.addBlock(0,1,BlockColor::RED); + c.addBlock(1,0,BlockColor::RED); + c.addBlock(2,0,BlockColor::RED); + c.addBlock(0,0,BlockColor::RED); + c.y=120; + gameBoard.addClump(c); return true; } bool Meteos::OnUserUpdate(float fElapsedTime) { fElapsedTime=std::min(fElapsedTime,1/60.f); - if (!onlyOnce) { - BlockClump c; - c.addBlock(0,2,BlockColor::RED); - c.addBlock(0,1,BlockColor::RED); - c.addBlock(1,0,BlockColor::RED); - c.addBlock(2,0,BlockColor::RED); - c.addBlock(0,0,BlockColor::RED); - c.y=120; - gameBoard.addClump(c); - onlyOnce=true; - } lastBlockSpawn+=fElapsedTime; if (lastBlockSpawn>=gameBoard.spawnRate){ lastBlockSpawn-=gameBoard.spawnRate; @@ -117,25 +114,32 @@ bool Meteos::OnUserUpdate(float fElapsedTime) nextClump:; } for (BlockClump&c:gameBoard.getBlockClumps()){ + std::vectormatchedBlockIDs; for (Block&b:c.getBlocks()) { + b.addedToLaunchList=false; + } + for (int i=0;itempMatchIDsX; + std::vectortempMatchIDsY; float targetX=b.pos.x; float targetY=b.pos.y; bool found=false; - std::vectormatchedBlocksX; - std::vectormatchedBlocksY; - matchedBlocksX.push_back(&b); - matchedBlocksY.push_back(&b); + tempMatchIDsX.push_back(i); + tempMatchIDsY.push_back(i); rightCheck: float checkX=targetX+12; float checkY=targetY; do{ found=false; - for (Block&b2:c.getBlocks()){ - if (b.pos.x==b2.pos.x&&b.pos.y==b2.pos.y)continue; + for (int j=0;j2) { - for (Block*b2:matchedBlocksX) { - b2->col=BlockColor::LAUNCHED; + if (tempMatchIDsX.size()>2||tempMatchIDsY.size()>2) { + if (tempMatchIDsX.size()>2) { + for (int i:tempMatchIDsX) { + Block&bb=c.getBlocks()[i]; + if (!bb.addedToLaunchList) { + bb.addedToLaunchList=true; + matchedBlockIDs.push_back(i); + } + } } - c.vspeed=gameBoard.launchSpd; - } - if (matchedBlocksY.size()>2) { - for (Block*b2:matchedBlocksY) { - b2->col=BlockColor::LAUNCHED; + if (tempMatchIDsY.size()>2) { + for (int i:tempMatchIDsY) { + Block&bb=c.getBlocks()[i]; + if (!bb.addedToLaunchList) { + bb.addedToLaunchList=true; + matchedBlockIDs.push_back(i); + } + } } - c.vspeed=gameBoard.launchSpd; } } + for (int i:matchedBlockIDs) { + Block&b=c.getBlocks()[i]; + std::cout<<"Launch Block ("<