diff options
Diffstat (limited to 'World.cpp')
| -rw-r--r-- | World.cpp | 172 |
1 files changed, 164 insertions, 8 deletions
@@ -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++; } |
