Exemplo n.º 1
0
// main() zavola tuto funkciu, ked chce vediet, aky prikaz chceme vykonat,
// co tato funkcia rozhodne pomocou toho, ako nastavi prikaz;
void zistiTah() {
  Hrac ja = stav.hraci[0];
  Vec mojavec = vecovat(ja.obj.pozicia);
  Vec konRych(0, 0);
  // Bonusy

  DoStuff(konRych, square, ZLATO,    3000000, mojavec);
  DoStuff(konRych, [](double d)->double{return d*d*5000.0;}, BOSS, -12000000, mojavec);
  DoStuff(konRych, square, ASTEROID,-6000000, mojavec);
  DoStuff(konRych, square, PLANETA, -6000000, mojavec);
  Vec temp;
  //DoStuff(temp, [](double d){return d;}, STRELA,  -4000000, mojavec);
  //temp *= Vec(0, 1);    //otocit o 90 deg
  konRych += temp;

  //hraci
  for(auto p : stav.hraci)
  {
      if(p.obj.id == ja.obj.id) continue;
      Vec diff = (vecovat(p.obj.pozicia) - mojavec);
      konRych += (norm2(diff) * (-6000000 / square(abs(diff) + 1)));
  }

  double vx= konRych.real();
  double vy= konRych.imag();
  double kmagiaodstien=800000;
  vx=max(min(vx,kmagiaodstien*(max(0.0,mapa.w-8*LOD_POLOMER-mojavec.real()))-15),-kmagiaodstien*(max(0.0,mojavec.real()-8*LOD_POLOMER))+15);
  vy=max(min(vy,kmagiaodstien*(max(0.0,mapa.h-8*LOD_POLOMER-mojavec.imag()))-15),-kmagiaodstien*(max(0.0,mojavec.imag()-8*LOD_POLOMER))+15);
  konRych=Vec(vx,vy);

  //double force = INF;
  //vy += (mapa.h / 2 < mojavec.imag()) ? force / cube(mojavec.imag()+1) : -force / cube(mojavec.imag() - mapa.h / 2 + 1) ;
  //vx += (mapa.w / 2 < mojavec.real()) ? force / cube(mojavec.real()+1) : -force / cube(mojavec.real() - mapa.w / 2 + 1);

  //konRych=Vec(vx,vy);

  //konRych += Vec(1, 0) * (6000000 / square(abs(mojavec.real()) + 1));
  //konRych += Vec(-1, 0) * (6000000 / square(abs(mapa.w - mojavec.real()) + 1));
  //konRych += Vec(0, 1) * (6000000 / square(abs(mojavec.imag()) + 1));
  //konRych += Vec(0, -1) * (6000000 / square(abs(mapa.h - mojavec.imag()) + 1));

  konRych-=vecovat(ja.obj.rychlost);
  double v=abs(konRych);
  v=max(v,-200.0);
  v=min(v,200.0);
  konRych=norm2(konRych)*v;
  prikaz.acc = odvecovat(konRych);

  //STRIELAJ
    //strielaj na strelu co ide na teba

}
Exemplo n.º 2
0
// main() zavola tuto funkciu, ked chce vediet, aky prikaz chceme vykonat,
// co tato funkcia rozhodne pomocou toho, ako nastavi prikaz;
void zistiTah() {
  Hrac ja = stav.hraci[0];
  Vec mojavec = vecovat(ja.obj.pozicia);
  Vec konRych(0, 0);
  // Bonusy

  DoStuff(konRych, square, ZLATO,    150000000 / (stav.obj[ZLATO].size() + 1), mojavec);
  Vec tempboss;
  DoStuff(tempboss, linear, BOSS, -1200000, mojavec);
  tempboss*=Vec(0,1);
  konRych+=tempboss;
  DoStuff(konRych, square, ASTEROID,-6000000, mojavec);
  DoStuff(konRych, square, PLANETA, -6000000, mojavec);
  Vec temp;
  DoStuff(temp, [](double d){return d;}, STRELA, -10000, mojavec);
  temp *= Vec(0, 1);    //otocit o 90 deg
  konRych += temp;

  //hraci
  for(auto p : stav.hraci)
  {
      if(p.obj.id == ja.obj.id) continue;
      Vec diff = (vecovat(p.obj.pozicia) - mojavec);
      konRych += (norm2(diff) * (-6000000 / square(abs(diff) + 1)));
  }

  double vx= konRych.real();
  double vy= konRych.imag();
  double kmagiaodstien=16000000000;
  vx=max(min(vx,kmagiaodstien*(max(0.0,mapa.w-25*LOD_POLOMER-mojavec.real()))-15),-kmagiaodstien*(max(0.0,mojavec.real()-25*LOD_POLOMER))+15);
  vy=max(min(vy,kmagiaodstien*(max(0.0,mapa.h-25*LOD_POLOMER-mojavec.imag()))-15),-kmagiaodstien*(max(0.0,mojavec.imag()-25*LOD_POLOMER))+15);
  konRych=Vec(vx,vy);

  //double force = INF;
  //vy += (mapa.h / 2 < mojavec.imag()) ? force / cube(mojavec.imag()+1) : -force / cube(mojavec.imag() - mapa.h / 2 + 1) ;
  //vx += (mapa.w / 2 < mojavec.real()) ? force / cube(mojavec.real()+1) : -force / cube(mojavec.real() - mapa.w / 2 + 1);

  //konRych=Vec(vx,vy);

  //konRych += Vec(1, 0) * (6000000 / square(abs(mojavec.real()) + 1));
  //konRych += Vec(-1, 0) * (6000000 / square(abs(mapa.w - mojavec.real()) + 1));
  //konRych += Vec(0, 1) * (6000000 / square(abs(mojavec.imag()) + 1));
  //konRych += Vec(0, -1) * (6000000 / square(abs(mapa.h - mojavec.imag()) + 1));

  konRych-=vecovat(ja.obj.rychlost);
  double v=abs(konRych);
  v=max(v,-200.0);
  v=min(v,200.0);
  konRych=norm2(konRych)*v;
  prikaz.acc = odvecovat(konRych);

  //STRIELAJ

  double minscore=1E18;

  for(Hrac h:stav.hraci)
  {
      if(!h.zije()) continue;
      if(vecovat(h.obj.pozicia)==mojavec) continue;
      if((abs(vecovat(h.obj.pozicia) - mojavec)+ h.obj.zivoty) < minscore )
      {
          minscore=(abs(vecovat(h.obj.pozicia) - mojavec)+ h.obj.zivoty);
          prikaz.ciel=odvecovat(zratajxclenku(vecovat(h.obj.pozicia)-mojavec,vecovat(h.obj.rychlost)-vecovat(ja.obj.rychlost)));
      }
  }
  bool debugstrely=true;
  if(mojavec.real()<(20*LOD_POLOMER)) {if(debugstrely) prikaz.ciel=Bod(0,0); prikaz.acc=prikaz.acc+Bod(1000000,0);}
  if(mojavec.imag()<(20*LOD_POLOMER)) {if(debugstrely) prikaz.ciel=Bod(0,0); prikaz.acc=prikaz.acc+Bod(0,1000000);}

  if(mojavec.real()>(mapa.w-20*LOD_POLOMER)) {if(debugstrely) prikaz.ciel=Bod(0,0); prikaz.acc=prikaz.acc-Bod(1000000,0);}
  if(mojavec.imag()>(mapa.h-20*LOD_POLOMER)) {if(debugstrely) prikaz.ciel=Bod(0,0); prikaz.acc=prikaz.acc-Bod(0,1000000);}
}
Exemplo n.º 3
0
Bod odvecovat(Vec vec) {
    return Bod(vec.real(), vec.imag());
}