summaryrefslogtreecommitdiff
path: root/World.cpp
diff options
context:
space:
mode:
authormiguel <miguel@localhost>2017-09-13 10:50:03 +0200
committermiguel <miguel@localhost>2017-09-13 10:50:03 +0200
commite2063047ee1d145dbdf1963a23f183cc9db9bf52 (patch)
tree6c4d876781b072f4937d40acf22367b7c1ccb642 /World.cpp
parent842c21d6aab2f38e35ea668194f67f85af2e3539 (diff)
coins, bigger level, hud, etc
Diffstat (limited to 'World.cpp')
-rw-r--r--World.cpp172
1 files changed, 164 insertions, 8 deletions
diff --git a/World.cpp b/World.cpp
index 1a3e9b5..0e5bff2 100644
--- a/World.cpp
+++ b/World.cpp
@@ -1,32 +1,184 @@
#include "World.h"
-World::World(int level)
+World::World(int l):level(l)
+{
+ level--;
+ next_level();
+ reset();
+}
+
+void World::reset()
{
- player.speed=0;
player.x2=player.x=0;
+ player.speed=level;
player.anim=0;
- // generate level
player.y=bricks[0][0].altitude+1;
+ player.y2=0;
+ player.dead=false;
+ player.win=false;
+
+ coins_pos.clear();
+
+ for(int i=0;i<bricks.size();i++)
+ {
+ coins_pos.push_back(4);
+ }
+
+
+}
+void World::next_level()
+{
+ level++;
+ reset();
+ bricks=
+ {
+ { {0,1} },
+ { {0,1} },
+ { {0,1} },
+ { {0,0},{5,1} },
+ { {0,0},{5,1} },
+ { {0,0},{5,1} },
+ { {0,0},{5,1} },
+ {},
+ { {5,1} },
+ { {5,1} },
+ { {0,0},{5,1} },
+ { {0,0},{5,1} },
+ { {0,0},{5,1} },
+ { {1,0},{5,1} },
+ { {2,0},{5,1},{7,1} },
+ { {3,0},{6,1} },
+ {},
+ {},
+ {},
+ { {5,1} },
+ { {5,1} },
+ { {0,0},{5,1} },
+ { {0,0},{5,1} },
+ { {0,0},{5,1} },
+ { {1,0},{5,1} },
+ { {2,0},{5,1},{7,1} },
+ { {3,0},{6,1} },
+ {},
+ {},
+ {},
+ {},
+ { {0,1} },
+ { {0,1} },
+ { {0,1} },
+ { {0,0},{5,1} },
+ { {0,0},{5,1} },
+ { {0,0},{5,1} },
+ { {0,0},{5,1} },
+ {},
+ { {5,1} },
+ { {5,1} },
+ { {0,0},{5,1} },
+ { {0,0},{5,1} },
+ { {0,0},{5,1} },
+ { {0,0}},
+ { {0,0}},
+ { {0,0}},
+ { {0,0}}
+ };
}
void World::sim(double time)
{
+ int last_brick=-1;
+
+ if(player.dead||player.win)return;
+
player.x2+=time/1000.0*player.speed;
- player.anim=(int)(player.x2*5)%2;
+ player.y2=0;
+
+ for(Brick &brick:bricks[player.x])
+ {
+ if(brick.altitude==player.y&&brick.type==3)
+ {
+ player.y2=player.x2;
+ last_brick=3;
+ break;
+ }
+ else if(brick.altitude==player.y-1&&brick.type==4)
+ {
+ player.y2=-player.x2;
+ last_brick=4;
+ }
+ else if(brick.altitude==player.y-1)
+ {
+ last_brick=2;
+ }
+
+
+ }
+ for(Brick &brick:bricks[player.x])
+ {
+ if(brick.altitude==player.y+1&&player.y2>0.4)
+ {
+ player.dead=true;
+ return;
+ }
+ }
+
+ player.anim=(int)(player.x2*6*player.speed)%2;
while(player.x2>1.0)
{
player.x2-=1;
player.x+=1;
-
- player.speed--;
+
+ if (player.x>=bricks.size())
+ {
+ player.win=true;
+ return;
+ }
+
+ if(last_brick==4){player.y--;player.y2=0;}
+ if(last_brick==3){player.y++;player.y2=0;}
+
+ bool ok=false;
+ for(Brick &brick:bricks[player.x])
+ {
+ if(brick.altitude==player.y-1&&brick.type!=3)ok=true;
+ else if(brick.altitude==player.y&&brick.type==3)ok=true;
+ else if(brick.altitude==player.y&&brick.type!=3)
+ {
+ ok=false;
+ break;
+ }
+ }
+
+ if (!ok)
+ {
+ player.dead=true;
+ return;
+ }
+
+// player.speed--;
}
+
+
+
+
+
+
+
+
}
void World::mouseclick(int x, int y)
{
+ if(player.dead){reset();return;}
+ if(player.win){next_level();return;}
+ if(x<0||x>=bricks.size())return;
+ int idx=0;
for(Brick &brick:bricks[x])
{
+ if(brick.type==0&&brick.altitude>=y)
+ {
+ return;
+ }
if(brick.type<=1&&brick.altitude==y)
{
return;
@@ -34,13 +186,17 @@ void World::mouseclick(int x, int y)
if(brick.type>1&&brick.altitude==y)
{
brick.type++;
- if(brick.type>=6)brick.type=2;
+ if(brick.type>=5)
+ {
+ bricks[x].erase(bricks[x].begin()+idx);
+ }
return;
}
+ idx++;
}
bricks[x].push_back({y,2});
- player.speed++;
+// player.speed++;
}