Gå til innhold

Den store Robocode-konkurransen


Anbefalte innlegg

For å innlede emnet, Robocode er et program/spill hvor tankser spiller mot hverandre, og hver tank består av et Java-program. Robocode kan lastes ned fra Robocode Central og der står det du trenger å vite.

 

Default er følgende kode til en robot:

package drange;
import robocode.*;
//import java.awt.Color;

/**
* Bender - a robot by (your name here)
*/
public class Bender extends Robot
{
/**
 * run: Bender's default behavior
 */
public void run() {
 // After trying out your robot, try uncommenting the import at the top,
 // and the next line:
 //setColors(Color.red,Color.blue,Color.green);
 while(true) {
 	// Replace the next 4 lines with any behavior you would like
 	ahead(100);
 	turnGunRight(360);
 	back(100);
 	turnGunRight(360);
 }
}

/**
 * onScannedRobot: What to do when you see another robot
 */
public void onScannedRobot(ScannedRobotEvent e) {
 fire(1);
}

/**
 * onHitByBullet: What to do when you're hit by a bullet
 */
public void onHitByBullet(HitByBulletEvent e) {
 turnLeft(90 - e.getBearing());
}

}

 

Så, da er det bare til å laste ned, programmere og paste kode, så får vi lage en konkurranse!

Lenke til kommentar
Videoannonse
Annonse

Min lille robot, KillAllHumans:

package mb;
import robocode.*;
import java.util.*;
//import java.awt.Color;

/**
* KillAllHumans - a robot by (Morten Bendiksen)
*/

public class KillAllHumans extends Robot {
boolean seek = true;
double fart = 0.075;
double firepower = 2.0;
/**
 * run: KillAllHumans's default behavior
 */
public void run() {
 // After trying out your robot, try uncommenting the import at the top,
 // and the next line:
 //setColors(Color.red,Color.blue,Color.green);
 while(true) {
 	
 	while(seek == true) {
   ahead(200);
   turnRight(90);
   turnRadarRight(360);
   //try {wait(100);}catch(InterruptedException ie) {}
 	}


 }

}


public double finnSkytevinkel(ScannedRobotEvent e) {
 double[] sv = getSkytevektor(e);
 double sin = sv[0] / Math.sqrt(sv[0]*sv[0] + sv[1]*sv[1]);
 
 double vinkel;
 if (sv[1] > 0) {
 	vinkel = -(Math.toDegrees(Math.asin(sin))) +180;
 }
 else {
 	vinkel = Math.toDegrees(Math.asin(sin));
 	if (vinkel < 0) {
   vinkel += 360.0;
 	}
 }

 return vinkel;

}



public double[] getSkytevektor(ScannedRobotEvent e) {
 double[] AB = getABvektor(e);
 double[] v = getFartsvektor(e);
 return new double[] { AB[0] + v[0], AB[1] + v[1] }; //returnerer skytevektor, summen av de to

}

double[] getABvektor(ScannedRobotEvent e) {
 double distance = e.getDistance();
 double vinkel = getHeading() + e.getBearing();
 double[] AB = new double[] { distance*Math.sin(Math.toRadians(vinkel)),
         -(distance*Math.cos(Math.toRadians(vinkel)))};
 return AB;

}



double[] getFartsvektor(ScannedRobotEvent e) {
 double vinkel = e.getHeadingRadians(); //vinkelen i radianer som tingne kjorer
 double avstand = e.getDistance();
 double speed = e.getVelocity();
 double[] v = new double[] {avstand*fart*speed*Math.sin(vinkel), -(avstand*fart*speed*Math.cos(vinkel)) };
 return v;

}



public void destroy(ScannedRobotEvent e) {
 seek = false;
 stop();
 double vinkel = getHeading() + e.getBearing();
 System.out.println("Fant robot: "+ e.getBearing() + ", Min heading: " + getHeading());
 System.out.println("Fart:" + e.getVelocity() + " Retning: " + e.getHeading() + " Avstand: " + e.getDistance());
 

 turnGun(vinkel);
 System.out.println("Snudde til vinkel:" + vinkel);

 

 fire(3);
 seek = true;



}


public void shootB(double[] A, double[] B) {


 double[] AB = new double[] { B[0] - A[0], B[1] - A[1] };

 



 double skyteVinkel =  Math.toDegrees(Math.atan2(AB[1], AB[0]));
 System.out.println("Sytevinkel: "+ skyteVinkel);
 turnGun(-skyteVinkel);
 fire(3);

 

}



public void turnGun(double d) {
 double g = getGunHeading();

 

 if (d<=g) {
 	long start = Calendar.getInstance().getTimeInMillis();
 	double vinkel = g - d;
 	turnGunLeft(vinkel);
 	long stop = Calendar.getInstance().getTimeInMillis();
 	long tid = stop - start;
 	System.out.println("Brukte " + tid + "ms paa aa snu " + vinkel + "grader");

 }

 if (d>g) {
 	long start = Calendar.getInstance().getTimeInMillis();
 	double vinkel = d - g;
 	turnGunRight(vinkel);
 	long stop = Calendar.getInstance().getTimeInMillis();
 	long tid = stop - start;
 	System.out.println("Brukte " + tid + "ms paa aa snu " + vinkel + "grader");

 }

 System.out.println("Snudde til vinkel"+d);
}



/**

 * onScannedRobot: What to do when you see another robot
 */

public void onScannedRobot(ScannedRobotEvent e) {

 

 //destroy(e);
 turnGun(finnSkytevinkel(e));
 if(e.getVelocity() < 0.1) {
 	fire(100);
 }else fire(firepower);
 //try {Thread.sleep(100);}catch(InterruptedException ie) {}

 
}	





/**
 * onHitByBullet: What to do when you're hit by a bullet
 */

public void onHitByBullet(HitByBulletEvent e) {

 //turnLeft(90 - e.getBearing());

}



}

Edit: fjernet noen mellomrom som dukker opp hver gang jeg paster koden min

Endret av Mortal
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...