460 likes | 644 Views
Robocode. Inleiding tot programmeren. Inhoud. Doel cursus Java-controlestructuren Robotje programmeren. Doel cursus. Inleiding Java Robocode. Java. Object-gerichte programmeertaal Sun 1991 http://java.sun.com. Robocode. 2001 Matthew Nelson IBM Programmeerspelletje
E N D
Robocode Inleiding tot programmeren
Inhoud • Doel cursus • Java-controlestructuren • Robotje programmeren
Doel cursus • Inleiding Java • Robocode
Java • Object-gerichte programmeertaal • Sun • 1991 • http://java.sun.com
Robocode • 2001 • Matthew Nelson • IBM • Programmeerspelletje • http://robocode.sourceforge.net/
Inhoud • Doel cursus • Java-controlestructuren • Robocode
Compileren • Code ‘vertalen’ voor computer
Commentaar • // lijn commentaar • /* blok • Commentaar */ • Commentaar wordt niet gelezen door de compiler
Declaratie van data • private double d = 1.11111; • private int i = 5; • private static string s = “tekst” • Binnen methode niet private • Static als je waardes wil houden tussen ronden (deathcount)
If – Else if (voorwaarde) { //doe iets } else { //doe iets anders }
While() while (voorwaarde) { //blijf dit //en dit doen }
Vergelijken • a == b - gelijk aan • a != b - niet gelijk aan • a < b - kleiner dan • a <= b - kleiner dan of gelijk aan • a > b - groter dan • a >= b - groter dan of gelijk aan • s.equals(“string”) - strings vergelijken
For() for (int i = 0; i < 6; i++) { System.out.println(i + “”); }
Switch switch (i) { case 1: a = 1; break; case 2: a = 2; break; case 3: a = 3; break; default: a = 0; break; }
Methodes • Methodes • Verzameling van lijnen code • Argumenten • Return • Vaak gebruikt voor herhalingen van code of berekeningen
Inhoud • Doel cursus • Java-controlestructuren • Robocode
Robocode • Het programma • Een robot bouwen
Robocode • Java 1.5.0 • http://sourceforge.net/projects/robocode/.
Anatomie van een robotje • Vehicle • Bewegen • Gun • Schieten • Radar • Scannen
Een robotje maken • File -> New -> Robot • Packagenaam • Naam van de robot • Compiler -> Compile (F6)
Run() • Belangrijkste methode van de robot • 2 delen • Declaratie • While(true)
Color • Deel van declaratie • import java.awt.Color; • setColors(Color.RED, Color.BLACK, Color.RED); • http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Color.html
While(true) • Oneindige lus • Herhaling van strategie robot • Onderbroken door events • Stopt indien dood of gewonnen
Bewegen • turnLeft(aantal graden); • turnRight(aantal graden); • turnRight(90) == turnLeft(-90)
Bewegen • ahead(aantal pixels); • back(aantal pixels); • ahead(100) == back(-100);
Bewegen • turnGunLeft(aantal graden); • turnGunRight(aantal graden); • turnGunRight(90) == turnGunLeft(-90)
Bewegen • getHeading(); • getGunHeading(); turnRight(shortAngle(getHeading() + 90));
Fire() • Schiet een kogel • Kracht 0.1 <-> 3 • Schieten maakt het geweer warm if (getGunHeat() == 0) { fire(3); }
Bullet • Bij fire() • Robocode maakt Bullet aan • Bij events • Bullet opvragen
Bullet • Indien raak • 3 * K energie terug • 4 * K, plus 2 * (K - 1) als K > 1 Schade • Indien mis • Kogel raakt andere kogel • Kogel raakt muur
Events • Gebeurtenis • Eigen code • Onderbreken while(true)
Events /** * onScannedRobot: What to do when you see another robot */ public void onScannedRobot(ScannedRobotEvent e) { System.out.println(“I’ve seen “ + e.getName()); System.out.println(e.getDistance() + “ pixels away.”); fire(1); }
BulletHitBulletEvent • Jouw kogel raakt een andere kogel • getBullet() • Geeft kogel terug • getHitBullet() • Geeft kogel terug • a = e.getBullet().getPower();
BulletHitEvent • Je hebt een robotje geraakt • getBullet() • getEnergy() • getName()
BulletMissedEvent • Een kogel van jou heeft de muur geraakt • getBullet()
DeathEvent • Je sterft • Geen methodes • Bijvoorbeeld • deathcounter
HitByBulletEvent • getBearing() • getBullet() • getHeading() • getName() • getPower()
Bearing • Verschil tussen jouw heading en heading van wat je raakt. • turnRight(e.getBearing()) ;
HitRobotEvent • Je rijdt tegen een robot • getBearing() • getEnergy() • getName() • isMyFault() if (e.isMyFault()) {
HitWallEvent • Je rijdt tegen een muur • getBearing()
RobotDeathEvent • Een andere robot sterft. • getName()
ScannedRobotEvent • Je radar (op geweer) ziet een robot • getBearing() • getDistance() • getEnergy() • getHeading() • getName()
ScannedRobotEvent /** * onScannedRobot: What to do when you see another robot */ public void onScannedRobot(ScannedRobotEvent e) { System.out.println(“I’ve seen “ + e.getName()); System.out.println(e.getDistance() + “ pixels away.”); fire(1); }
WinEvent • Je wint de ronde. • Geen methodes. • Overwinningsdansje • wincounter