Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Übungsblatt 4 - KnotPoint
Servus Leute,
ist vermutlich ne extrem dämliche Frage, aber muss man das javakara sich vorher irgendwo runterladen / installieren? Laut Übungsblatt nicht, aber trotzdem zeigt mir Eclipse alle möglichen Fehler rund um javaKara an, weil er diese nicht findet.
=>
http://www.swisseduc.ch/informatik/karatojava/javakara/classes/javakara.jar
PS: Java Build Path und da nach „Add External JARs“ suchen.
ich habs jetzt über import Archive File hinzugefügt, geht aber nicht ^^
Edith sagt: ok über den “Add external Jar” hats gefunzt.
+1 Für den Aufgabensteller
Und immer schön vorsichtig fahren, sonst gibt’s am Ende noch nen Totalschaden…
Kann man diese Phrase bitte in „Steuern Sie KP so, dass kein Totalschaden entsteht“ ändern?
Ok ich muss zugeben ich steh noch ein wenig auf dem schlauch, das “spielfeld” muss ich das selbst anlegen oder kann man irgendwie ne getposition Methode aufrufen? World/kara gibt das ja leider nicht her.
Ok ich muss zugeben ich steh noch ein wenig auf dem schlauch, das “spielfeld” muss ich das selbst anlegen oder kann man irgendwie ne getposition Methode aufrufen? World/kara gibt das ja leider nicht her.
Nur so aus Neugier: Wie schafft man’s mit mehr als einer Stunde Abstand zu doppelposten? oO
Aber zu deiner Frage:
Meinst du wie du mit dem Spielfeld interagieren kannst? Alles was du dazu benötigst, findest du in der KnotPoint.java. Eine Methode, um die aktuelle Position zu ermitteln, gibt’s da aber tatsächlich nicht, siehe auch die Aufgabenstellung:
Du denkst dir immer ein virtuelles Koordinatensystem mit der Ladestation des Staubsaugers als Ursprung, von daher läufst du dann munter drauf los.
Du musst hierzu nicht wissen, wo genau die Ladestation im Spielfeld steht oder wie groß es ist. Du merkst schon selbt, wenn’s irgendwo nicht weitergeht bzw. ist es Teil der Aufgabe zu verhindern, dass der Staubsauger irgendwo saugt, wo er gar nicht saugen kann.
Wenn du dann, wie in der Aufgabenstellung erwähnt, die bereits besuchten Felder verwaltest, findest du die Ladestation auch wieder, ohne zu wissen, wo sie sich befindet.
ok das habe ich befürchtet, daß das der Paragraph aussagen soll. ^^
p.s. zum Doppelpost, den Beitrag hatte ich von Handy ausgeschrieben, nach nen paar Stunden habe ich nochmal ins Forum geschaut und da war der Beitrag noch in Bearbeitung, deswegen war ich der Meinung ihn gar nicht abgeschickt zu haben.
Servus,
habe ein Problem beim Hochladen der PHP.java, ich kriege trotz das es bei mir korrekt im Eclipse kompiliert, vom EST die Meldung, submitted files dont compile.
Es sind natürlich noch Fehler im Code selbst, aber zumindest sollten sie nicht zu diesem Fehlerbild führen.
package-Anweisung drinnen oder Signaturen verändert?
this!
import-Anweisungen gehören zur Signatur/Schnittstelle dazu:
Ich habe mir doch nicht umsonst die Mühe gemacht („private static final [inner] class JavaKaraProgramToKnotPointProxy“), Kara und seine Welt vor euch zu verbergen ;)… eben damit sowas NICHT geht:
import ch.karatojava.kapps.world.World;
Edit ergänzt noch (weil sie es in der gleichen Abgabe gesehen hat):
Wird also auch NICHT funktionieren:
private final static long BATTERY_MAX = KnotPoint.battery();
(man denke da nur an den Memory-Effekt (Akkumulator) – Wikipedia… tststs
Ah ok dann Pass ich das morgen nochmal an, weil.so ganz offensichtlich war es nicht wie man kp.aufrufen soll ;-), daher noch der import.
Ansonsten brauche ich aber ne konstante damit weiß wann er umdrehen muss, oder woher soll man das sonst wissen?
Nur zur Sicherheit, damit ich dich nicht falsch verstanden hab: Das Objelt [m]kp[/m] willst du gar nicht anfassen. Dir genügen die 3 Methoden unter SENSORS und die 3 unter ACTUATORS.
Alles andere ist nur Proxyzeug, damit das ganze mit Javakara funktioniert. Das willst (und darfst, siehe §4) du nicht anfassen.
kp kann ich auch gar nicht aufrufen, war jetzt nur zu faul knotpoint zu schreiben.
ok dann ne doofe frage wie soll ich feststellen ob der schon die 50% erreicht hat oder nicht was den battery status angeht, wenn ich es nicht den maximalwert in einer Konstanten verewige, mit der ich dann die weiteren Berechnungen durchführe?
Der Worldaufruf, habe ich genutzt um die größe meines Feldes festzulegen und die WErte dann zu füllen.
Der Grundgedanke war nicht ganz falsch - nur die tatsächliche Umsetzung.
Da keiner antworten will, hier nochmal der Hinweis, der die Antwort enthält:
Das gilt natürlich auch für alle anderen „Zustände“, die in PHP noch verwaltet werden…!!
Tipp: Ihr dürft (private | rekursive) Hilfsmethoden (mit beliebig vielen Parametern…) verwenden!
Der Worldaufruf, habe ich genutzt um die größe meines Feldes festzulegen und die WErte dann zu füllen.
Das muss absolut „dynamisch“ sein: Jeder neue Aufruf von [m]hoover()[/m] könnte eine völlig neue Welt unbekannter Größe und Form betreffen (aka „Möbelrücken“) - und natürlich ebenso den Ladezustand und den Staubbehälterfüllgrad.
Und noch was aus dem Nähkästchen:
Achtung I: Die Größe der Welt ist a priori unbekannt - daher müssen [m]markHoovered[/m] bzw. [m]isHoovered[/m] mit „beliebig“ großen Parametern rechnen (sic!) - also ggf. auch mal mit 9223372036854775807.
Achtung II: Wir sind bei Blatt-04, daher dachte ich, ein kleiner öffentlicher Main-Test würde genügen - aber wenn ich mir die Abgaben mit grünem Haken anschaue, dann kam bislang keiner über 10 von 25 Punkten!! Bitte testet eure Programme gründlich mit eigenen Tests, der JavaKara-Editor macht es einfach, beliebiges zusammenzuklicken. Verlasst euch nicht nur auf GardenAlpha.world, GardenBeta.world oder GardenEpsilon.world…
Insbesondere testet bitte auch Kombinationen von grenzwertigen [m]batteryCapacity[/m] und [m]binCapacity[/m] (aka „reicht gerade noch“ oder „reicht gerade nicht mehr“)!
Wie ich meine nicht-öffentlichen Tests erzeuge, verraten wir hier ;)…
Ist GardenBeta.world lösbar? Leaf am Startfeld stellt nämlich ein ziemliches Problem dar wenn man nur durch move/moveBack leafs aufnehmen kann bzw das Startfeld nicht auf ein Leaf überprüfen kann. Dann wird das Blatt nämlich erst beim zurückkehren aufgenommen wenn binCapacity schon möglicherweise erreicht ist…
Also einfach gesagt: Kann man ein Spielfeld mit nur 2 Feldern mit Blatt (nebeneinander) lösen? (mit binCapacity == 1 und battery >= 2)