#include #include "World.h" World::World(int l):level(l) { coins=0; level--; next_level(); reset(); next_stone=2; } void World::reset() { std::random_device rd; //Will be used to obtain a seed for the random number engine std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd() std::uniform_int_distribution<> dis(-5, 10); player.x2=player.x=0; player.speed=level; player.speed=0; player.anim=0; player.y=bricks[0][0].altitude+1; player.y2=0; player.dead=false; player.win=false; player.collected_coin=false; coins_pos.clear(); for(int i=0;i0.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; 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; if(coins_pos[player.x-1]==player.y){ coins_pos[player.x-1]=99; coins++; player.collected_coin=true; } } if(coins_pos[player.x]==player.y){ coins_pos[player.x]=99; coins++; player.collected_coin=true; } 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) { std::random_device rd; //Will be used to obtain a seed for the random number engine std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd() std::uniform_int_distribution<> dis(2, 4); if(player.dead){next_level();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; } if(brick.type>1&&brick.altitude==y) { // brick.type++; // if(brick.type>=5) // { bricks[x].erase(bricks[x].begin()+idx); // } // return; } idx++; } bricks[x].push_back({y,next_stone}); next_stone=dis(gen); player.speed++; return; if(x<0||x>=bricks.size())return; idx=0; for(Brick &brick:bricks[x]) { if(brick.type==0&&brick.altitude>=y) { return; } if(brick.type<=1&&brick.altitude==y) { return; } if(brick.type>1&&brick.altitude==y) { brick.type++; if(brick.type>=5) { bricks[x].erase(bricks[x].begin()+idx); } return; } idx++; } bricks[x].push_back({y,2}); player.speed++; }