|
|
|
#define OLC_PGE_APPLICATION
|
|
|
|
#include "pixelGameEngine.h"
|
|
|
|
#include "Meteos.h"
|
|
|
|
#include <random>
|
|
|
|
|
|
|
|
Meteos*game;
|
|
|
|
|
|
|
|
bool Meteos::OnUserCreate()
|
|
|
|
{
|
|
|
|
game=this;
|
|
|
|
|
|
|
|
std::random_device rd; //Will be used to obtain a seed for the random number engine
|
|
|
|
gen=std::mt19937(rd()); //Standard mersenne_twister_engine seeded with rd()
|
|
|
|
randBlockPos=std::uniform_int_distribution<>(0, 9);
|
|
|
|
|
|
|
|
gameBoard=Board({10,14},12.f,3.0f);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Meteos::OnUserUpdate(float fElapsedTime)
|
|
|
|
{
|
|
|
|
lastBlockSpawn+=fElapsedTime;
|
|
|
|
if (lastBlockSpawn>=3.0f){
|
|
|
|
lastBlockSpawn-=3.0f;
|
|
|
|
gameBoard.spawnBlock(randBlockPos(gen));
|
|
|
|
}
|
|
|
|
Clear(Pixel(32,32,255));
|
|
|
|
for (int x=-1;x<=gameBoard.boardSize.x;x++) {
|
|
|
|
for (int y=0;y<=gameBoard.boardSize.y;y++) {
|
|
|
|
if (x==-1||x==10||y==14) {
|
|
|
|
FillRectDecal({(float)(gameBoard.drawOffset.x+x*12),(float)(gameBoard.drawOffset.y+y*12)},{12,12},Pixel(0,0,0,255));
|
|
|
|
} else {
|
|
|
|
DrawRectDecal({(float)(gameBoard.drawOffset.x+x*12),(float)(gameBoard.drawOffset.y+y*12)},{12,12},Pixel(255,255,255,64));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (int i=0;i<gameBoard.boardSize.x;i++) {
|
|
|
|
for (int y=0;y<gameBoard.getBlocks(i).size();y++) {
|
|
|
|
Block&b=gameBoard.getBlocks(i)[y];
|
|
|
|
if (b.pos.y<gameBoard.yBottom) {
|
|
|
|
b.vspeed+=gameBoard.gravity*fElapsedTime;
|
|
|
|
bool collisionDetected=false;
|
|
|
|
for (int yy=y-1;yy>=0;yy--) {
|
|
|
|
Block&b2=gameBoard.getBlocks(i)[yy];
|
|
|
|
if (b.pos.y+12>b2.pos.y) {
|
|
|
|
collisionDetected=true;
|
|
|
|
b.vspeed=0;
|
|
|
|
b.pos.y=b2.pos.y-12;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!collisionDetected) {
|
|
|
|
b.pos.y+=b.vspeed*fElapsedTime;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
b.vspeed=0;
|
|
|
|
b.pos.y=gameBoard.yBottom;
|
|
|
|
}
|
|
|
|
FillRectDecal(b.pos+gameBoard.drawOffset,{12,12},GREEN);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
|
|
|
Meteos instance;
|
|
|
|
if (instance.Construct(256, 240, 4, 4))
|
|
|
|
instance.Start();
|
|
|
|
return 0;
|
|
|
|
}
|