generated from sigonasr2/CPlusPlusProjectTemplate
Block matching between two landed clumps fixed up
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
16b1290fe0
commit
4010b52c5b
18
Board.cpp
18
Board.cpp
@ -17,6 +17,24 @@ maxWarningLevel(maxWarningLevel){
|
||||
warningFlashingLevel.push_back(0.f);
|
||||
}
|
||||
clumps.reserve(100);
|
||||
|
||||
BlockClump newClump;
|
||||
BlockClump newClump2;
|
||||
newClump.addBlock(2,0,BlockColor::WHITE);
|
||||
newClump.addBlock(1,0,BlockColor::WHITE);
|
||||
newClump.addBlock(0,0,BlockColor::WHITE);
|
||||
newClump.addBlock(2,-1,BlockColor::RED);
|
||||
newClump.addBlock(3,-1,BlockColor::RED);
|
||||
newClump2.addBlock(4,0,BlockColor::WHITE);
|
||||
newClump2.addBlock(5,0,BlockColor::WHITE);
|
||||
newClump2.addBlock(6,0,BlockColor::WHITE);
|
||||
newClump2.addBlock(7,0,BlockColor::BLUE);
|
||||
newClump2.addBlock(4,-1,BlockColor::RED);
|
||||
newClump2.addBlock(5,-1,BlockColor::RED);
|
||||
newClump.y=100;
|
||||
newClump2.y=100;
|
||||
clumps.push_back(newClump);
|
||||
clumps.push_back(newClump2);
|
||||
}
|
||||
|
||||
void Board::spawnBlock(int col){
|
||||
|
Binary file not shown.
83
main.cpp
83
main.cpp
@ -10,6 +10,7 @@ struct BlockMatchingInfo{
|
||||
int col;
|
||||
int ind;
|
||||
int c=-1;
|
||||
bool changeToLaunched=true;
|
||||
};
|
||||
|
||||
bool Meteos::OnUserCreate()
|
||||
@ -24,7 +25,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,0.2f,{3,3,1,2,3,0,0,0,0,0},
|
||||
gameBoard=Board({10,14},0.02f,0.04f,1.2f,0.04f,0.4f,{-0.2f,-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;
|
||||
@ -121,7 +122,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];
|
||||
@ -298,7 +299,7 @@ void Meteos::updateGame(float fElapsedTime){
|
||||
if (c2.landTime>0){
|
||||
for (int j=0;j<c2.getBlocks().size();j++){
|
||||
Block&b2=c2.getBlocks()[j];
|
||||
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y-c.y==checkY) {
|
||||
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&c2.getBlockPosition(b2).y-c.y==checkY) {
|
||||
found=true;
|
||||
checkX+=12;
|
||||
tempMatchIDsX.push_back({(int)b2.pos.x/12,j,h});
|
||||
@ -332,7 +333,7 @@ void Meteos::updateGame(float fElapsedTime){
|
||||
if (c2.landTime>0){
|
||||
for (int j=0;j<c2.getBlocks().size();j++){
|
||||
Block&b2=c2.getBlocks()[j];
|
||||
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y-c.y==checkY) {
|
||||
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&c2.getBlockPosition(b2).y-c.y==checkY) {
|
||||
found=true;
|
||||
checkX-=12;
|
||||
tempMatchIDsX.push_back({(int)b2.pos.x/12,j,h});
|
||||
@ -366,7 +367,7 @@ void Meteos::updateGame(float fElapsedTime){
|
||||
if (c2.landTime>0){
|
||||
for (int j=0;j<c2.getBlocks().size();j++){
|
||||
Block&b2=c2.getBlocks()[j];
|
||||
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y-c.y==checkY) {
|
||||
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&c2.getBlockPosition(b2).y-c.y==checkY) {
|
||||
found=true;
|
||||
checkY-=12;
|
||||
tempMatchIDsY.push_back({(int)b2.pos.x/12,j,h});
|
||||
@ -400,7 +401,7 @@ void Meteos::updateGame(float fElapsedTime){
|
||||
if (c2.landTime>0){
|
||||
for (int j=0;j<c2.getBlocks().size();j++){
|
||||
Block&b2=c2.getBlocks()[j];
|
||||
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&b2.pos.y-c.y==checkY) {
|
||||
if (b.col==b2.col&&b2.col!=BlockColor::LAUNCHED&&b2.pos.x==checkX&&c2.getBlockPosition(b2).y-c.y==checkY) {
|
||||
found=true;
|
||||
checkY+=12;
|
||||
tempMatchIDsY.push_back({(int)b2.pos.x/12,j,h});
|
||||
@ -415,19 +416,61 @@ void Meteos::updateGame(float fElapsedTime){
|
||||
if (tempMatchIDsX.size()>2||tempMatchIDsY.size()>2) {
|
||||
if (tempMatchIDsX.size()>2) {
|
||||
for (BlockMatchingInfo i:tempMatchIDsX) {
|
||||
Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind];
|
||||
if (!bb.addedToLaunchList) {
|
||||
bb.addedToLaunchList=true;
|
||||
matchedBlockIDs.push_back(i);
|
||||
if (i.c!=g){
|
||||
for (int j=0;j<gameBoard.getBlockClumps()[i.c].getBlocks().size();j++){
|
||||
Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[j];
|
||||
if (!bb.addedToLaunchList&&j!=i.ind) {
|
||||
for (int k=0;k<tempMatchIDsX.size();k++){
|
||||
if (tempMatchIDsX[k].c==i.c&&tempMatchIDsX[k].ind==j){
|
||||
goto skipX;
|
||||
}
|
||||
}
|
||||
bb.addedToLaunchList=true;
|
||||
matchedBlockIDs.push_back({(int)bb.pos.x/12,j,i.c,false});
|
||||
skipX:;
|
||||
}
|
||||
}
|
||||
Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind];
|
||||
if (!bb.addedToLaunchList){
|
||||
bb.addedToLaunchList=true;
|
||||
matchedBlockIDs.push_back(i);
|
||||
}
|
||||
} else {
|
||||
Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind];
|
||||
if (!bb.addedToLaunchList) {
|
||||
bb.addedToLaunchList=true;
|
||||
matchedBlockIDs.push_back(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (tempMatchIDsY.size()>2) {
|
||||
for (BlockMatchingInfo i:tempMatchIDsY) {
|
||||
Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind];
|
||||
if (!bb.addedToLaunchList) {
|
||||
bb.addedToLaunchList=true;
|
||||
matchedBlockIDs.push_back(i);
|
||||
if (i.c!=g){
|
||||
for (int j=0;j<gameBoard.getBlockClumps()[i.c].getBlocks().size();j++){
|
||||
Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[j];
|
||||
if (!bb.addedToLaunchList&&j!=i.ind) {
|
||||
for (int k=0;k<tempMatchIDsY.size();k++){
|
||||
if (tempMatchIDsY[k].c==i.c&&tempMatchIDsY[k].ind==j){
|
||||
goto skipY;
|
||||
}
|
||||
}
|
||||
bb.addedToLaunchList=true;
|
||||
matchedBlockIDs.push_back({(int)bb.pos.x/12,j,i.c,false});
|
||||
skipY:;
|
||||
}
|
||||
}
|
||||
Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind];
|
||||
if (!bb.addedToLaunchList){
|
||||
bb.addedToLaunchList=true;
|
||||
matchedBlockIDs.push_back(i);
|
||||
}
|
||||
} else {
|
||||
Block&bb=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind];
|
||||
if (!bb.addedToLaunchList) {
|
||||
bb.addedToLaunchList=true;
|
||||
matchedBlockIDs.push_back(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -440,10 +483,16 @@ void Meteos::updateGame(float fElapsedTime){
|
||||
} else {
|
||||
Block&b=gameBoard.getBlockClumps()[i.c].getBlocks()[i.ind];
|
||||
if (!b.markedForRemoval){
|
||||
b.col=BlockColor::LAUNCHED;
|
||||
c.addBlock(i.col,(gameBoard.getBlockClumps()[i.c].getBlockPosition(b).y-c.y)/12,BlockColor::LAUNCHED);
|
||||
if (i.changeToLaunched){
|
||||
b.col=BlockColor::LAUNCHED;
|
||||
c.addBlock(i.col,(gameBoard.getBlockClumps()[i.c].getBlockPosition(b).y-c.y)/12,BlockColor::LAUNCHED);
|
||||
} else {
|
||||
c.addBlock(i.col,(gameBoard.getBlockClumps()[i.c].getBlockPosition(b).y-c.y)/12,b.col);
|
||||
}
|
||||
}
|
||||
if (i.changeToLaunched){
|
||||
b.col=BlockColor::LAUNCHED;
|
||||
}
|
||||
b.col=BlockColor::LAUNCHED;
|
||||
b.markedForRemoval=true;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user