Programmeerimise algkursus Harjutus 2
Roboti anatoomia
Robotil on kolm osa: Kere, Tukk ja Radar[1].
Loe algatuseks: http://testwiki.roborumble.org/w/index.php?title=Robocode/Robot_Anatomy
Roboti juhtimiseks on abiks järgmised funktsioonid:
- ahead(pikslit) - sõida edasi
- back(pikslit) - sõida tagasi
- turnLeft(kraadi) - keera roboti keret vasakule
- turnRight(kraadi) - keera roboti keret paremale
- turnGunRight(kraadi) - keera tukki paremale
- turnGunLeft(kraadi) - keera tukki vasakule
- turnRadarLeft(kraadi) - keera radarit vasakule
- turnRadarRight(kraadi) - keera radarit paremale
Nurkade arvutamist aitavad:
- getHeading() - tagastab roboti suuna kraadides
- getGunHeading() - tagastab tuki suuna kraadides
- e.getBearing() - tagastab sündmuse (olenevalt kontekstist kas avastatud vastane või Sind tabanud kuul) peilungi
Vastase sihikul hoidmine
Sihtimine käib suundade ja peilungite järgi. Peilung (bearing) tähendab robocode maailmas nurka roboti sõidusuuna suhtes. Suund tähendab absoluutkoordinaadistiku nurka. Loe: http://testwiki.roborumble.org/w/index.php?title=Robocode/Game_Physics
Lisa run meetodisse radariga ringiratast keerutamine:
public void run() { while(true) { turnRadarLeft(360); } }
Vastase avastamisel keera toru tema poole:
public void onScannedRobot(ScannedRobotEvent e) { double vastase_peilung = e.getBearing(); double tuki_suund = getGunHeading(); double minu_suund = getHeading(); double vastase_suund = minu_suund + vastase_peilung; double keeramisnurk = vastase_suund - tuki_suund; keeramisnurk = normalRelativeAngle(keeramisnurk); turnGunRight(keeramisnurk); }
NB! Et asi töötaks, tuleb oma robotisse juurde lisada ka see nurga arvutamise funktsioon:
/** * normalRelativeAngle: Returns angle such that -180 < angle <= 180 */ public double normalRelativeAngle(double angle) { if (angle > -180 && angle <= 180) { return angle; } double fixedAngle = angle; while (fixedAngle <= -180) { fixedAngle += 360; } while (fixedAngle > 180) { fixedAngle -= 360; } return fixedAngle; }
Edasi mõtle juba ise, kuidas vastast laskma hakata.
Vihje: kontrolli enne laskmist kas toru on ikka vastase poole. +- 3 kraadi on OK :)
Taibudele
Head lugemist :)