Testing taller/weider shapes

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent 2dad7fc3a3
commit 9ae5505993
  1. 6
      BlockClump.cpp
  2. 3
      BlockClump.h
  3. 20
      Board.cpp
  4. BIN
      C++ProjectTemplate

@ -8,7 +8,11 @@ void BlockClump::addBlock(int col){
blocks.push_back(Block({(float)col*12,0})); blocks.push_back(Block({(float)col*12,0}));
} }
void BlockClump::addBlock(vi2d offset){ void BlockClump::addBlock(int col,int row){
blocks.push_back(Block({(float)col*12,(float)row*12}));
}
void BlockClump::addBlock(vf2d offset){
blocks.push_back(Block(offset)); blocks.push_back(Block(offset));
} }

@ -13,7 +13,8 @@ class BlockClump{
BlockClump(){} BlockClump(){}
std::vector<Block>&getBlocks(); std::vector<Block>&getBlocks();
void addBlock(int col); void addBlock(int col);
void addBlock(vi2d offset); void addBlock(int col,int row);
void addBlock(vf2d offset);
//Get a block's position relative to this block clump. //Get a block's position relative to this block clump.
vf2d getBlockPosition(Block&b); vf2d getBlockPosition(Block&b);
}; };

@ -14,14 +14,23 @@ Board::Board(vi2d boardSize,float gravity,float spawnRate)
void Board::spawnBlock(int col){ void Board::spawnBlock(int col){
BlockClump c=BlockClump(); BlockClump c=BlockClump();
c.addBlock(col); c.addBlock(col);
for(int counter=1;game->coinFlip(game->gen)==0;counter++) {
c.addBlock(col,-counter);
}
if (game->coinFlip(game->gen)==0) { if (game->coinFlip(game->gen)==0) {
if (col>0) { if (col>0) {
c.addBlock(col-1); c.addBlock(col-1);
for(int counter=1;game->coinFlip(game->gen)==0;counter++) {
c.addBlock(col-1,-counter);
}
} }
} }
if (game->coinFlip(game->gen)==0) { if (game->coinFlip(game->gen)==0) {
if (col<boardSize.x-1) { if (col<boardSize.x-1) {
c.addBlock(col+1); c.addBlock(col+1);
for(int counter=1;game->coinFlip(game->gen)==0;counter++) {
c.addBlock(col+1,-counter);
}
} }
} }
clumps.push_back(c); clumps.push_back(c);
@ -39,31 +48,30 @@ void Board::removeClump(int ind){
BlockClump&c=clumps[ind]; BlockClump&c=clumps[ind];
for (Block&b:c.getBlocks()){ for (Block&b:c.getBlocks()){
if (b.markedForDeletion) continue; if (b.markedForDeletion) continue;
vf2d relativePos=b.pos;
b.pos=c.getBlockPosition(b);
bool emptyAirBelow=true; bool emptyAirBelow=true;
for (int i=0;i<cols[b.pos.x/12].size();i++) { for (int i=0;i<cols[b.pos.x/12].size();i++) {
Block&b2=cols[b.pos.x/12][i]; Block&b2=cols[b.pos.x/12][i];
if (b.pos.y+12>=b2.pos.y&&b.pos.y<=b2.pos.y+12) { if (c.getBlockPosition(b).y+12>=b2.pos.y&&c.getBlockPosition(b).y<=b2.pos.y+12) {
emptyAirBelow=false; emptyAirBelow=false;
break; break;
} }
} }
if (b.pos.y>=yBottom) { if (c.getBlockPosition(b).y>=yBottom) {
emptyAirBelow=false; emptyAirBelow=false;
} }
if (emptyAirBelow) { if (emptyAirBelow) {
BlockClump c2; BlockClump c2;
for (int i=0;i<c.getBlocks().size();i++) { for (int i=0;i<c.getBlocks().size();i++) {
Block&b2=c.getBlocks()[i]; Block&b2=c.getBlocks()[i];
if (b.pos.x==b2.pos.x) { if (c.getBlockPosition(b).x==b2.pos.x) {
b2.markedForDeletion=true; b2.markedForDeletion=true;
c2.addBlock(relativePos); c2.addBlock(b2.pos);
} }
c2.y=c.y; c2.y=c.y;
} }
clumps.push_back(c2); clumps.push_back(c2);
} else { } else {
b.pos=c.getBlockPosition(b);
cols[b.pos.x/12].push_back(b); cols[b.pos.x/12].push_back(b);
} }
} }

Binary file not shown.
Loading…
Cancel
Save