generated from AMay/CPlusPlusProjectTemplate
Deluge
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
2a50fb0fff
commit
0749e7264e
26
Board.cpp
26
Board.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);
|
||||
}
|
||||
|
||||
|
||||
3
Board.h
3
Board.h
@ -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.
15
main.cpp
15
main.cpp
@ -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…
x
Reference in New Issue
Block a user