generated from sigonasr2/CPlusPlusProjectTemplate
Multi row column pattern launching completed for BlockClumps
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
a76ccfc48a
commit
4008ec4f5a
1
Block.h
1
Block.h
@ -22,6 +22,7 @@ class Block{
|
|||||||
BlockColor col;
|
BlockColor col;
|
||||||
bool markedForDeletion=false;
|
bool markedForDeletion=false;
|
||||||
bool markedForRemoval=false;
|
bool markedForRemoval=false;
|
||||||
|
bool addedToLaunchList=false;
|
||||||
Block(vf2d pos,BlockColor col)
|
Block(vf2d pos,BlockColor col)
|
||||||
:pos(pos),col(col){}
|
:pos(pos),col(col){}
|
||||||
};
|
};
|
||||||
|
Binary file not shown.
1
Meteos.h
1
Meteos.h
@ -14,7 +14,6 @@ class Meteos : public olc::PixelGameEngine{
|
|||||||
std::mt19937 gen;
|
std::mt19937 gen;
|
||||||
Board gameBoard;
|
Board gameBoard;
|
||||||
std::map<std::string,Renderable> SPRITES;
|
std::map<std::string,Renderable> SPRITES;
|
||||||
bool onlyOnce=false;
|
|
||||||
bool OnUserCreate()override;
|
bool OnUserCreate()override;
|
||||||
bool OnUserUpdate(float fElapsedTime)override;
|
bool OnUserUpdate(float fElapsedTime)override;
|
||||||
};
|
};
|
||||||
|
95
main.cpp
95
main.cpp
@ -18,13 +18,6 @@ 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"]);
|
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"]);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Meteos::OnUserUpdate(float fElapsedTime)
|
|
||||||
{
|
|
||||||
fElapsedTime=std::min(fElapsedTime,1/60.f);
|
|
||||||
if (!onlyOnce) {
|
|
||||||
BlockClump c;
|
BlockClump c;
|
||||||
c.addBlock(0,2,BlockColor::RED);
|
c.addBlock(0,2,BlockColor::RED);
|
||||||
c.addBlock(0,1,BlockColor::RED);
|
c.addBlock(0,1,BlockColor::RED);
|
||||||
@ -33,8 +26,12 @@ bool Meteos::OnUserUpdate(float fElapsedTime)
|
|||||||
c.addBlock(0,0,BlockColor::RED);
|
c.addBlock(0,0,BlockColor::RED);
|
||||||
c.y=120;
|
c.y=120;
|
||||||
gameBoard.addClump(c);
|
gameBoard.addClump(c);
|
||||||
onlyOnce=true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Meteos::OnUserUpdate(float fElapsedTime)
|
||||||
|
{
|
||||||
|
fElapsedTime=std::min(fElapsedTime,1/60.f);
|
||||||
lastBlockSpawn+=fElapsedTime;
|
lastBlockSpawn+=fElapsedTime;
|
||||||
if (lastBlockSpawn>=gameBoard.spawnRate){
|
if (lastBlockSpawn>=gameBoard.spawnRate){
|
||||||
lastBlockSpawn-=gameBoard.spawnRate;
|
lastBlockSpawn-=gameBoard.spawnRate;
|
||||||
@ -117,25 +114,32 @@ bool Meteos::OnUserUpdate(float fElapsedTime)
|
|||||||
nextClump:;
|
nextClump:;
|
||||||
}
|
}
|
||||||
for (BlockClump&c:gameBoard.getBlockClumps()){
|
for (BlockClump&c:gameBoard.getBlockClumps()){
|
||||||
|
std::vector<int>matchedBlockIDs;
|
||||||
for (Block&b:c.getBlocks()) {
|
for (Block&b:c.getBlocks()) {
|
||||||
|
b.addedToLaunchList=false;
|
||||||
|
}
|
||||||
|
for (int i=0;i<c.getBlocks().size();i++) {
|
||||||
|
Block&b=c.getBlocks()[i];
|
||||||
|
std::vector<int>tempMatchIDsX;
|
||||||
|
std::vector<int>tempMatchIDsY;
|
||||||
float targetX=b.pos.x;
|
float targetX=b.pos.x;
|
||||||
float targetY=b.pos.y;
|
float targetY=b.pos.y;
|
||||||
bool found=false;
|
bool found=false;
|
||||||
std::vector<Block*>matchedBlocksX;
|
tempMatchIDsX.push_back(i);
|
||||||
std::vector<Block*>matchedBlocksY;
|
tempMatchIDsY.push_back(i);
|
||||||
matchedBlocksX.push_back(&b);
|
|
||||||
matchedBlocksY.push_back(&b);
|
|
||||||
rightCheck:
|
rightCheck:
|
||||||
float checkX=targetX+12;
|
float checkX=targetX+12;
|
||||||
float checkY=targetY;
|
float checkY=targetY;
|
||||||
do{
|
do{
|
||||||
found=false;
|
found=false;
|
||||||
for (Block&b2:c.getBlocks()){
|
for (int j=0;j<c.getBlocks().size();j++){
|
||||||
if (b.pos.x==b2.pos.x&&b.pos.y==b2.pos.y)continue;
|
Block&b2=c.getBlocks()[j];
|
||||||
|
if (i==j)continue;
|
||||||
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
|
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
|
||||||
found=true;
|
found=true;
|
||||||
|
std::cout<<"Found match @ ("<<checkX<<","<<checkY<<") Block ("<<b2.pos<<")"<<b2.addedToLaunchList<<std::endl;
|
||||||
checkX+=12;
|
checkX+=12;
|
||||||
matchedBlocksX.push_back(&b2);
|
tempMatchIDsX.push_back(j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}while(found);
|
}while(found);
|
||||||
@ -144,12 +148,14 @@ bool Meteos::OnUserUpdate(float fElapsedTime)
|
|||||||
checkY=targetY;
|
checkY=targetY;
|
||||||
do{
|
do{
|
||||||
found=false;
|
found=false;
|
||||||
for (Block&b2:c.getBlocks()){
|
for (int j=0;j<c.getBlocks().size();j++){
|
||||||
if (b.pos.x==b2.pos.x&&b.pos.y==b2.pos.y)continue;
|
Block&b2=c.getBlocks()[j];
|
||||||
|
if (i==j)continue;
|
||||||
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
|
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
|
||||||
found=true;
|
found=true;
|
||||||
|
std::cout<<"Found match @ ("<<checkX<<","<<checkY<<") Block ("<<b2.pos<<")"<<b2.addedToLaunchList<<std::endl;
|
||||||
checkX-=12;
|
checkX-=12;
|
||||||
matchedBlocksX.push_back(&b2);
|
tempMatchIDsX.push_back(j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}while(found);
|
}while(found);
|
||||||
@ -158,12 +164,14 @@ bool Meteos::OnUserUpdate(float fElapsedTime)
|
|||||||
checkY=targetY-12;
|
checkY=targetY-12;
|
||||||
do{
|
do{
|
||||||
found=false;
|
found=false;
|
||||||
for (Block&b2:c.getBlocks()){
|
for (int j=0;j<c.getBlocks().size();j++){
|
||||||
if (b.pos.x==b2.pos.x&&b.pos.y==b2.pos.y)continue;
|
Block&b2=c.getBlocks()[j];
|
||||||
|
if (i==j)continue;
|
||||||
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
|
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
|
||||||
found=true;
|
found=true;
|
||||||
|
std::cout<<"Found match @ ("<<checkX<<","<<checkY<<") Block ("<<b2.pos<<")"<<b2.addedToLaunchList<<std::endl;
|
||||||
checkY-=12;
|
checkY-=12;
|
||||||
matchedBlocksY.push_back(&b2);
|
tempMatchIDsY.push_back(j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}while(found);
|
}while(found);
|
||||||
@ -172,28 +180,44 @@ bool Meteos::OnUserUpdate(float fElapsedTime)
|
|||||||
checkY=targetY+12;
|
checkY=targetY+12;
|
||||||
do{
|
do{
|
||||||
found=false;
|
found=false;
|
||||||
for (Block&b2:c.getBlocks()){
|
for (int j=0;j<c.getBlocks().size();j++){
|
||||||
if (b.pos.x==b2.pos.x&&b.pos.y==b2.pos.y)continue;
|
Block&b2=c.getBlocks()[j];
|
||||||
|
if (i==j)continue;
|
||||||
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
|
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
|
||||||
found=true;
|
found=true;
|
||||||
|
std::cout<<"Found match @ ("<<checkX<<","<<checkY<<") Block ("<<b2.pos<<")"<<b2.addedToLaunchList<<std::endl;
|
||||||
checkY+=12;
|
checkY+=12;
|
||||||
matchedBlocksY.push_back(&b2);
|
tempMatchIDsY.push_back(j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}while(found);
|
}while(found);
|
||||||
if (matchedBlocksX.size()>2) {
|
if (tempMatchIDsX.size()>2||tempMatchIDsY.size()>2) {
|
||||||
for (Block*b2:matchedBlocksX) {
|
if (tempMatchIDsX.size()>2) {
|
||||||
b2->col=BlockColor::LAUNCHED;
|
for (int i:tempMatchIDsX) {
|
||||||
|
Block&bb=c.getBlocks()[i];
|
||||||
|
if (!bb.addedToLaunchList) {
|
||||||
|
bb.addedToLaunchList=true;
|
||||||
|
matchedBlockIDs.push_back(i);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (tempMatchIDsY.size()>2) {
|
||||||
|
for (int i:tempMatchIDsY) {
|
||||||
|
Block&bb=c.getBlocks()[i];
|
||||||
|
if (!bb.addedToLaunchList) {
|
||||||
|
bb.addedToLaunchList=true;
|
||||||
|
matchedBlockIDs.push_back(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i:matchedBlockIDs) {
|
||||||
|
Block&b=c.getBlocks()[i];
|
||||||
|
std::cout<<"Launch Block ("<<b.pos<<")"<<b.addedToLaunchList<<std::endl;
|
||||||
|
b.col=BlockColor::LAUNCHED;
|
||||||
c.vspeed=gameBoard.launchSpd;
|
c.vspeed=gameBoard.launchSpd;
|
||||||
}
|
}
|
||||||
if (matchedBlocksY.size()>2) {
|
|
||||||
for (Block*b2:matchedBlocksY) {
|
|
||||||
b2->col=BlockColor::LAUNCHED;
|
|
||||||
}
|
|
||||||
c.vspeed=gameBoard.launchSpd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for (int i=0;i<gameBoard.boardSize.x;i++){
|
for (int i=0;i<gameBoard.boardSize.x;i++){
|
||||||
for (Block&b:gameBoard.getBlocks(i)) {
|
for (Block&b:gameBoard.getBlocks(i)) {
|
||||||
@ -308,6 +332,7 @@ bool Meteos::OnUserUpdate(float fElapsedTime)
|
|||||||
gameBoard.removeBlock(i,y--);
|
gameBoard.removeBlock(i,y--);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
b.addedToLaunchList=false;
|
||||||
DrawPartialDecal(b.pos+gameBoard.drawOffset,gameBoard.tileset,{(float)(int)b.col*12,0},{12,12});
|
DrawPartialDecal(b.pos+gameBoard.drawOffset,gameBoard.tileset,{(float)(int)b.col*12,0},{12,12});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user