|
|
|
#define OLC_PGE_APPLICATION
|
|
|
|
#include "pixelGameEngine.h"
|
|
|
|
|
|
|
|
using namespace olc;
|
|
|
|
|
|
|
|
struct Object{
|
|
|
|
Decal*spr;
|
|
|
|
vf2d pos;
|
|
|
|
Object(){}
|
|
|
|
Object(Decal*spr,vf2d pos)
|
|
|
|
:spr(spr),pos(pos){}
|
|
|
|
};
|
|
|
|
|
|
|
|
class Example : public PixelGameEngine
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
Example()
|
|
|
|
{
|
|
|
|
sAppName = "Example";
|
|
|
|
}
|
|
|
|
|
|
|
|
public:
|
|
|
|
Object player;
|
|
|
|
std::array<Object*,8> enemyList;
|
|
|
|
std::array<Object*,3> bulletList;
|
|
|
|
Decal*spaceship_spr;
|
|
|
|
Decal*enemy_spr;
|
|
|
|
Decal*bullet_spr;
|
|
|
|
float shotCooldown=0;
|
|
|
|
|
|
|
|
bool OnUserCreate() override
|
|
|
|
{
|
|
|
|
// Called once at the start, so create things here
|
|
|
|
spaceship_spr = new Decal(new Sprite("space_ship.png"));
|
|
|
|
enemy_spr = new Decal(new Sprite("space_alien.png"));
|
|
|
|
bullet_spr = new Decal(new Sprite("bullet.png"));
|
|
|
|
|
|
|
|
for (int i=0;i<8;i++){
|
|
|
|
enemyList[i]=new Object(enemy_spr,{(float)(rand()%224),16});
|
|
|
|
}
|
|
|
|
for (int i=0;i<bulletList.size();i++){
|
|
|
|
bulletList[i]=new Object(bullet_spr,{0,-999});
|
|
|
|
}
|
|
|
|
|
|
|
|
player = Object(spaceship_spr,{32,180});
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool OnUserUpdate(float fElapsedTime) override
|
|
|
|
{
|
|
|
|
bool addBullet=false;
|
|
|
|
|
|
|
|
shotCooldown-=fElapsedTime;
|
|
|
|
|
|
|
|
if (GetKey(SPACE).bHeld&&shotCooldown<=0){
|
|
|
|
shotCooldown=0.25;
|
|
|
|
addBullet=true;
|
|
|
|
}
|
|
|
|
|
|
|
|
player.pos.x+=(GetKey(RIGHT).bHeld-GetKey(LEFT).bHeld)*50*fElapsedTime;
|
|
|
|
|
|
|
|
DrawDecal(player.pos,player.spr);
|
|
|
|
|
|
|
|
for (Object*obj : enemyList){
|
|
|
|
for (int i=0;i<bulletList.size();i++){
|
|
|
|
Object*bullet=bulletList[i];
|
|
|
|
if (bullet->pos.x+8>=obj->pos.x&&bullet->pos.x+8<=obj->pos.x+16&&
|
|
|
|
bullet->pos.y>=obj->pos.y&&bullet->pos.y<=obj->pos.y+16){
|
|
|
|
obj->pos={-999,-999};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
DrawDecal(obj->pos,obj->spr);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int i=0;i<bulletList.size();i++){
|
|
|
|
Object*obj=bulletList[i];
|
|
|
|
|
|
|
|
if (obj->pos.y<-32&&addBullet){
|
|
|
|
addBullet=false;
|
|
|
|
obj->pos=player.pos;
|
|
|
|
}
|
|
|
|
|
|
|
|
obj->pos.y-=160*fElapsedTime;
|
|
|
|
DrawDecal(obj->pos,obj->spr);
|
|
|
|
}
|
|
|
|
|
|
|
|
DrawStringDecal({0,0},std::to_string(bulletList.size()));
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
|
|
|
Example demo;
|
|
|
|
if (demo.Construct(256, 240, 4, 4))
|
|
|
|
demo.Start();
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|