Programmeerimise algkursus Harjutus 2: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Anttix (arutelu | kaastöö)
Anttix (arutelu | kaastöö)
1. rida: 1. rida:
== Roboti anatoomia ==
== Roboti anatoomia ==
Robotil on kolm osa: Kere, Tukk ja Radar.
Robotil on kolm osa: Kere, Tukk ja [http://testwiki.roborumble.org/w/index.php?title=Radar|Radar].


Loe algatuseks: http://testwiki.roborumble.org/w/index.php?title=Robocode/Robot_Anatomy
Loe algatuseks: http://testwiki.roborumble.org/w/index.php?title=Robocode/Robot_Anatomy

Redaktsioon: 17. september 2008, kell 12:36

Roboti anatoomia

Robotil on kolm osa: Kere, Tukk ja [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 = normalRelativeAngle(vastase_suund - tuki_suund);

		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 :)