Block matching info implemented for clumbs

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent fc563a25aa
commit 80328a7855
  1. 9
      Board.cpp
  2. BIN
      C++ProjectTemplate
  3. 41
      main.cpp

@ -17,6 +17,15 @@ maxWarningLevel(maxWarningLevel){
warningFlashingLevel.push_back(0.f);
}
clumps.reserve(100);
BlockClump test1;
test1.addBlock(4,BlockColor::WHITE);
test1.addBlock(5,BlockColor::WHITE);
BlockClump test2;
test2.y=0;
test2.addBlock(6,BlockColor::WHITE);
test2.addBlock(7,BlockColor::WHITE);
addClump(test1);
addClump(test2);
}
void Board::spawnBlock(int col){

Binary file not shown.

@ -24,7 +24,7 @@ bool Meteos::OnUserCreate()
coinFlip=std::uniform_int_distribution<>(0, 1);
comboOverlayOffset=std::uniform_int_distribution<>(-16,16);
gameBoard=Board({10,14},0.02f,0.04f,1.2f,0.04f,0.4f,{-1.f,-1.5f,-2.f,-2.5f,-4.f},1.7f,2.0f,1.0f,{3,3,1,2,3,0,0,0,0,0},
gameBoard=Board({10,14},0.02f,0.04f,1.2f,0.04f,0.4f,{-1.f,-1.5f,-2.f,-2.5f,-4.f},1.7f,2.0f,0.2f,{3,3,1,2,3,0,0,0,0,0},
60*10,SPRITES["blocks_test.png"]);
return true;
@ -98,7 +98,7 @@ void Meteos::handleInput(){
}
found:;
}
if (gameBoard.selectedBlock.c==-1&&gameBoard.selectedBlock.col!=-1&&gameBoard.boardSize.y-mouseRow>gameBoard.getBlocks(gameBoard.selectedBlock.col).size()){
if (gameBoard.selectedBlock.c==-1&&gameBoard.selectedBlock.col!=-1&&gameBoard.boardSize.y-mouseRow>gameBoard.getBlocks(gameBoard.selectedBlock.col).size()&&gameBoard.getBlocks(gameBoard.selectedBlock.col)[gameBoard.selectedBlock.ind].pos.y>12){
//Fling the block upwards.
BlockClump newClump;
Block&targetBlock=gameBoard.getBlocks(gameBoard.selectedBlock.col)[gameBoard.selectedBlock.ind];
@ -121,7 +121,7 @@ void Meteos::updateGame(float fElapsedTime){
lastBlockSpawn+=fElapsedTime;
if (lastBlockSpawn>=gameBoard.spawnRate){
lastBlockSpawn-=gameBoard.spawnRate;
gameBoard.spawnBlock(randBlockPos(gen));
//gameBoard.spawnBlock(randBlockPos(gen));
}
for (int i=gameBoard.getBlockClumps().size()-1;i>=0;i--){
BlockClump&c=gameBoard.getBlockClumps()[i];
@ -261,20 +261,21 @@ void Meteos::updateGame(float fElapsedTime){
c.landTime=0;
nextClump:;
}
for (BlockClump&c:gameBoard.getBlockClumps()){
std::vector<int>matchedBlockIDs;
for (int g=0;g<gameBoard.getBlockClumps().size();g++){
BlockClump&c=gameBoard.getBlockClumps()[g];
std::vector<BlockMatchingInfo>matchedBlockIDs;
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;
std::vector<BlockMatchingInfo>tempMatchIDsX;
std::vector<BlockMatchingInfo>tempMatchIDsY;
float targetX=b.pos.x;
float targetY=b.pos.y;
bool found=false;
tempMatchIDsX.push_back(i);
tempMatchIDsY.push_back(i);
tempMatchIDsX.push_back({(int)b.pos.x/12,i,g});
tempMatchIDsY.push_back({(int)b.pos.x/12,i,g});
rightCheck:
float checkX=targetX+12;
float checkY=targetY;
@ -286,7 +287,7 @@ void Meteos::updateGame(float fElapsedTime){
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
found=true;
checkX+=12;
tempMatchIDsX.push_back(j);
tempMatchIDsX.push_back({(int)b.pos.x/12,j,g});
break;
}
}
@ -302,7 +303,7 @@ void Meteos::updateGame(float fElapsedTime){
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
found=true;
checkX-=12;
tempMatchIDsX.push_back(j);
tempMatchIDsX.push_back({(int)b.pos.x/12,j,g});
break;
}
}
@ -318,7 +319,7 @@ void Meteos::updateGame(float fElapsedTime){
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
found=true;
checkY-=12;
tempMatchIDsY.push_back(j);
tempMatchIDsY.push_back({(int)b.pos.x/12,j,g});
break;
}
}
@ -334,15 +335,15 @@ void Meteos::updateGame(float fElapsedTime){
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y==checkY) {
found=true;
checkY+=12;
tempMatchIDsY.push_back(j);
tempMatchIDsY.push_back({(int)b.pos.x/12,j,g});
break;
}
}
}while(found);
if (tempMatchIDsX.size()>2||tempMatchIDsY.size()>2) {
if (tempMatchIDsX.size()>2) {
for (int i:tempMatchIDsX) {
Block&bb=c.getBlocks()[i];
for (BlockMatchingInfo i:tempMatchIDsX) {
Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind];
if (!bb.addedToLaunchList) {
bb.addedToLaunchList=true;
matchedBlockIDs.push_back(i);
@ -350,8 +351,8 @@ void Meteos::updateGame(float fElapsedTime){
}
}
if (tempMatchIDsY.size()>2) {
for (int i:tempMatchIDsY) {
Block&bb=c.getBlocks()[i];
for (BlockMatchingInfo i:tempMatchIDsY) {
Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind];
if (!bb.addedToLaunchList) {
bb.addedToLaunchList=true;
matchedBlockIDs.push_back(i);
@ -360,8 +361,8 @@ void Meteos::updateGame(float fElapsedTime){
}
}
}
for (int i:matchedBlockIDs) {
Block&b=c.getBlocks()[i];
for (BlockMatchingInfo i:matchedBlockIDs) {
Block&b=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind];
b.col=BlockColor::LAUNCHED;
}
if (matchedBlockIDs.size()>0){
@ -369,7 +370,7 @@ void Meteos::updateGame(float fElapsedTime){
c.launchTime=gameBoard.launchTime;
c.combo++;
vi2d randomOffset={comboOverlayOffset(gen),comboOverlayOffset(gen)};
comboDisplayList.push_back({c.getBlockPosition(c.getBlocks()[matchedBlockIDs[0]])+randomOffset,c.combo});
comboDisplayList.push_back({c.getBlockPosition(gameBoard.getBlockClumps()[matchedBlockIDs[0].c].getBlocks()[matchedBlockIDs[0].ind])+randomOffset,c.combo});
//std::cout<<"Combo value is "<<c.combo<<std::endl;
}
}

Loading…
Cancel
Save