|
OPŠIRNIJE
Robocode je delo Mathew Nelson-a, programera "Advanced Technology", Internet odeljenja IBM-a. Možete ga
preuzeti sa Download sekcije ovog sajta. Morate imati instaliranu
Java VM verziju 1.3.x ili noviju. Fajl koji preuzmete je JAR (Java arhiva) i pokreće se iz komandne linije
na sledeći način:
java -jar robocode-setup-1.0.7.jar
Nakon instalacije moći ćete da pokrenete Robocode pomoću ikonice sa desktopa. Odmah po pokretanju programa
pojaviće se bojno polje koje će vam služiti za testiranje robota. Pored njega, instalirano okruženje
sadrži i Robot Editor tako da na jednom mestu imate praktično sve što je potrebno za razvoj robota boraca.
Bojno polje predstavlja glavni deo simulacije i omogućava kreiranje, snimanje i učitavanje borbi. Moguće je
privremeno zaustaviti ili prekinuti borbu, uništiti bilo kog postojećeg robota ili dobiti statistiku za
nekog od njih. Odavde se takođe može aktivirati Robot Editor.
Robot Editor je tekst editor namenjen Java fajlovima od kojih se prave roboti. Takođe sadrži i Java kompajler
i omogućava da se napravljeni robot odmah smesti u listu tako da se odmah može pokrenuti u bojnom polju.
Jedan robot se sastoji od jedne ili više Java klasa. One se mogu spakovati u JAR fajl, a za ovu svrhu postoji
takozvani Robot Packager koji je takođe integrisan u editor.
ANATOMIJA ROBOTA
Na slici je dvostruko uvećan tenk:
Uočite da robot ima rotirajući top, a na topu je rotirajući radar. Sam robot, top i radar mogu da se rotiraju
nezavisno. Dakle, u bilo kom trenutku, telo robota, top i radar mogu da rotiraju u različitim pravcima. Na
početku ova tri dela su poravnata i pokreću se zajedno sa telom robota.
KOMANDE ROBOTA
Sve komande robota se nalaze u dokumentaciji koja se nakon instalacije Robocode-a nalazi u folderu Javadoc.
Primetićete da se radi o public metodama klase robocode. Evo opisa svake od funkcija raspoređene po
svojim kategorijama:
- Pokretanje robota, topa i radara
turnLeft(double degree) turnRight(double degree) |
Okretanje robota za zadati ugao. |
ahead(double distance) (double distance) |
Pomeranje robota za navedeni broj piksela. Ove dve funkcije se prekidaju ako robot udari u zid. |
turnGunRight(double degree) turnGunLeft(double degree) |
Okretanje topa, nezavisno od pravca u kome je okrenuto telo robota. |
turnRadarRight(double degree) turnRadarLeft(double degree) |
Okretanje radara na topu, nezavisno i od pravca topa i od pravca tela robota. |
Obratiti pažnju da se kod funkcija iz gornje tabele kontrola vraća u glavni program tek po njihovom
završetku. Takođe, okretanjem tela robota, sa njim se okreću i top i radar, osim ako to nije drugačije
naglašeno nekom od funkcija iz sledeće tabele:
| setAdjustGunForRobotTurn(boolean flag) |
Ako se prosledi true, top će ostati u trenutnom pravu dok se telo robota okreće. |
| setAdjustRadarForRobotTurn(boolean flag) |
Ako se prosledi true, radar će ostati u trenutnom pravu dok se telo robota i rop okreću. |
| setAdjustRadarForGunTurn(boolean flag) |
Ako se prosledi true, radar će ostati u trenutnom pravu dok se top okreće. |
- Dobijanje informacija o robotu
U sledećoj tabeli date su samo neke od funkcija koje se koriste za dobijanje informacija o robotu:
getX() getY() |
Dobijanje koordinata robota. |
getHeading() getGunHeading() getRadarHeading() |
Dobijanje pravca u kome je okrenuto telo robota, top i radar. |
getBattleFieldWidth() getBattleFieldHeight() |
Dobijanje dužine i širine trenutnog bojnog polja. |
- Komande za pucanje
Kada ovladate pomeranjem robota, pravo je vreme da počnete da razmišljate o stvarima kao što je pucanje ili
kontrola oštećenja. Svaki robot ima početni nivo energije i kada on padne na nulu, robot se smatra uništenim.
Kada puca, robot može da koristi do tri jedinice energije. Što se više energije iskoristi za projektil,
veća se šteta nanosi protivniku.
| fire(double power) |
Ispaljivanje projektila zadate energije. |
| fireBullet(double power) |
Za razliku od prethodne funkcije, ova verzija vraća referencu na objekat klase robocode.Bullet,
što se može iskoristiti kod naprednijih robota. |
- Događaji
Svaki put kada se robot pomeri ili okrene radar je aktivan, i ukoliko postoje roboti unutar njegovog dometa
poziva se funkcija odgovarajućeg događaja. Kao kreator robota, imate na raspolaganju više događaja koji se
mogu dogoditi u toku borbe. U baznoj klasi sve funkcije koje obrađuju događaje su prazne i možete ih
slobodno predefinisati:
| onScannedRobot() |
Ova funkcija se poziva kada radar detektuje protivnika. |
| onHitByBullet() |
Ova funkcija se poziva kada je robot pogođen projektilom. |
| onHitRobot() |
Ova funkcija se poziva kada se robot sudari sa nekim drugim robotom. |
| onHitWall() |
Ova funkcija se poziva kada robot udari u zid. |
Navedene funkcije omogućavaju pravljene prilično složenih robota. Sve ostale funkcije možete naći u
Javadoc folderu Robocode-a.
Za kraj, evo i primera jednog od najprostijih mogućih klasa robota:
/**
* MyFirstRobot - a sample robot by Mathew Nelson
*
* Moves in a seesaw motion, and spins the gun around at each end
*/
public class MyFirstRobot extends Robot
{
/**
* MyFirstRobot's run method - Seesaw
*/
public void run() {
while (true) {
ahead(100); // Move ahead 100
turnGunRight(360); // Spin gun around
back(100); // Move back 100
turnGunRight(360); // Spin gun around
}
}
/**
* Fire when we see a robot
*/
public void onScannedRobot(ScannedRobotEvent e) {
fire(1);
}
/**
* We were hit! Turn perpendicular to the bullet,
* so our seesaw might avoid a future shot.
*/
public void onHitByBullet(HitByBulletEvent e) {
turnLeft(90 - e.getBearing());
}
}
|