Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent 2a50fb0fff
commit 0749e7264e
  1. 26
      Board.cpp
  2. 3
      Board.h
  3. BIN
      C++ProjectTemplate
  4. 15
      main.cpp

@ -5,8 +5,8 @@ extern Meteos*game;
Board::Board()
:colorHandler({}){}
Board::Board(vi2d boardSize,float gravity,float launchSpd,float spawnRate,std::array<int,10> colorRates,Renderable&tileset)
:boardSize(boardSize),gravity(gravity),launchSpd(launchSpd),spawnRate(spawnRate),colorHandler(colorRates),tileset(tileset.Decal()){
Board::Board(vi2d boardSize,float gravity,float maxGravity,float launchSpd,float spawnRate,std::array<int,10> colorRates,Renderable&tileset)
:boardSize(boardSize),gravity(gravity),maxGravity(maxGravity),launchSpd(launchSpd),spawnRate(spawnRate),colorHandler(colorRates),tileset(tileset.Decal()){
drawOffset={(float)game->ScreenWidth()/2-boardSize.x/2*12,(float)game->ScreenHeight()/2-boardSize.y/2*12};
yBottom=(boardSize.y-1)*12;
for (int i=0;i<boardSize.x;i++) {
@ -16,26 +16,8 @@ Board::Board(vi2d boardSize,float gravity,float launchSpd,float spawnRate,std::a
void Board::spawnBlock(int col){
BlockClump c=BlockClump();
c.addBlock(col,colorHandler.getRandomColor());
for(int counter=1;game->coinFlip(game->gen)==0;counter++) {
c.addBlock(col,-counter,colorHandler.getRandomColor());
}
if (game->coinFlip(game->gen)==0) {
if (col>0) {
c.addBlock(col-1,colorHandler.getRandomColor());
for(int counter=1;game->coinFlip(game->gen)==0;counter++) {
c.addBlock(col-1,-counter,colorHandler.getRandomColor());
}
}
}
if (game->coinFlip(game->gen)==0) {
if (col<boardSize.x-1) {
c.addBlock(col+1,colorHandler.getRandomColor());
for(int counter=1;game->coinFlip(game->gen)==0;counter++) {
c.addBlock(col+1,-counter,colorHandler.getRandomColor());
}
}
}
c.y-=128;
c.addBlock(col,0,colorHandler.getRandomColor());
clumps.push_back(c);
}

@ -38,10 +38,11 @@ class Board{
vf2d drawOffset;
vi2d boardSize;
float gravity;
float maxGravity;
float spawnRate;
float launchSpd;
Board();
Board(vi2d boardSize,float gravity,float launchSpd,float spawnRate,std::array<int,10> colorRates,Renderable&tileset);
Board(vi2d boardSize,float gravity,float maxGravity,float launchSpd,float spawnRate,std::array<int,10> colorRates,Renderable&tileset);
void spawnBlock(int col);
std::vector<Block>&getBlocks(int col);
std::vector<BlockClump>&getBlockClumps();

Binary file not shown.

@ -16,7 +16,7 @@ bool Meteos::OnUserCreate()
randBlockPos=std::uniform_int_distribution<>(0, 9);
coinFlip=std::uniform_int_distribution<>(0, 1);
gameBoard=Board({10,14},12.f,-20.f,3.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,3,2,3,2,0,0,0,0,0},SPRITES["blocks_test.png"]);
return true;
}
@ -25,8 +25,8 @@ bool Meteos::OnUserUpdate(float fElapsedTime)
{
fElapsedTime=std::min(fElapsedTime,1/60.f);
lastBlockSpawn+=fElapsedTime;
if (lastBlockSpawn>=3.0f){
lastBlockSpawn-=3.0f;
if (lastBlockSpawn>=gameBoard.spawnRate){
lastBlockSpawn-=gameBoard.spawnRate;
gameBoard.spawnBlock(randBlockPos(gen));
}
Clear(Pixel(32,32,255));
@ -42,6 +42,9 @@ bool Meteos::OnUserUpdate(float fElapsedTime)
for (int i=0;i<gameBoard.getBlockClumps().size();i++){
BlockClump&c=gameBoard.getBlockClumps()[i];
c.vspeed+=gameBoard.gravity*fElapsedTime;
if (c.vspeed>gameBoard.maxGravity){
c.vspeed=gameBoard.maxGravity;
}
for (int j=0;j<gameBoard.getBlockClumps().size();j++) {
if (i==j) continue;
BlockClump&c2=gameBoard.getBlockClumps()[j];
@ -82,14 +85,14 @@ bool Meteos::OnUserUpdate(float fElapsedTime)
for (int k=0;k<gameBoard.getBlocks(col).size();k++){
Block&b2=gameBoard.getBlocks(col)[k];
if (c.getBlockPosition(b).y+12>=b2.pos.y&&c.getBlockPosition(b).y<=b2.pos.y+12){
c.y=b2.pos.y-12;
c.y-=c.getBlockPosition(b).y+12-b2.pos.y;
c.vspeed=0;
gameBoard.convertClump(i--);
goto nextClump;
}
}
if (c.getBlockPosition(b).y>=gameBoard.yBottom) {
c.y=gameBoard.yBottom;
c.y-=c.getBlockPosition(b).y-gameBoard.yBottom;
c.vspeed=0;
gameBoard.convertClump(i--);
goto nextClump;
@ -171,11 +174,13 @@ bool Meteos::OnUserUpdate(float fElapsedTime)
for (Block*b2:matchedBlocksX) {
b2->col=BlockColor::LAUNCHED;
}
c.vspeed=gameBoard.launchSpd;
}
if (matchedBlocksY.size()>2) {
for (Block*b2:matchedBlocksY) {
b2->col=BlockColor::LAUNCHED;
}
c.vspeed=gameBoard.launchSpd;
}
}
}

Loading…
Cancel
Save