FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Aufgabe 8.3

Aufgabe 8.3 2002-06-08 17:10
Anonymer User
Vielleicht kann mir jemand kurz einen Tipp geben, denn irgendwie stehe ich monentan völlig auf dem Schlauch.
Ich habe mich entschlossen die Verwaltung der Energie in der Klasse "Game" zu realisieren!
Wie bekomme ich es aber hin, dass die anderen Klassen auf diese Exemplarvariable zugreifen können!


Re: Aufgabe 8.3 2002-06-08 17:38
Popcorn
Dafuer musst Du noch mal ne Runde was in Game schreiben.

fuege in Game z.B. folgendes hinzu

public void setEnergie(int update) { _energie += update; }
Jetzt kannst Du von außerhalb mit
Game.setEnergie(20);
die Energie um 20 steigern.

Ja ja. Das liebe G.R.A.P.H., Zork oder wie es auch immer bei Euch heißen mag… Ich muss jetzt erst mal die Frau im Prüfungsamt einbauen, das wenn man die Scheine bestanden hat und der Fach-Skill hoch genug ist, man sich für ne Klausur anmelden kann. %)



Re: Aufgabe 8.3 2002-06-08 18:22
Slater
tja, leider ist mein haus a 2. stock (mit prüfungsamt) nicht in der vorlage drin [img]http://images.rapidforum.com/images/i16.gif[/img], altes thema…,

energie in Game einzubauen würd ich nicht machen, grober verstoss zur aufgabenstellung,

wenn man schon alles umschmeisst, wieso nicht gleich in goRoom() die Energie ändern, abhängig vom Raum,
statt vom Raum aus,
dann fliegt raumspezifischerEffekt() raus, schöner und machbar, aber gegen die aufgabe,

sonst:
Game.setEnergie() geht als Aufruf ja nicht,
dann das Game-Objekt als Parameter mitgeben, und damit aufrufen

edit

ok, so mysteriös wie das mit der energieverwalterklasse in der aufgabe steht, kann man auch hineininterpretieren, dass eine vorhandene klasse um diese funktionalität erweitert wird, also vielleicht im sinne der aufgabe ok [img]http://images.rapidforum.com/images/i25.gif[/img]

Re: Aufgabe 8.3 2002-06-08 18:51
Popcorn
>>>tja, leider ist mein haus a 2. stock (mit prüfungsamt) nicht in der vorlage drin , altes thema…, <<<
Na ja. Das ist ja auch nur n Teil vom Campus. Weißt Du, was es allein für eine Mühe war, Haus C vom Keller bis nach oben durchzukatographieren? *g*. Aber vor Haus F… uaah. angst.

>>> energie in Game einzubauen würd ich nicht machen, grober verstoss zur aufgabenstellung, <<<
Yoah. Einzeln bei den Lebensformen die so rumfleuchen. Einen selbst, also den Avatar habe ich auch als Lebensform initialisiert.

>>>Game.setEnergie() geht als Aufruf ja nicht,
dann das Game-Objekt als Parameter mitgeben, und damit aufrufen <<<
A. Ich verstehe den Satz nicht.
B. Geht wohl.


Re: Aufgabe 8.3 2002-06-08 18:59
Slater
Game.irgendwas (mit Klassenname) wird sich nicht auf die Exemplarvariablen eines konkreten Objektes irgendwo im speicher auswirken,
damit Room das Game-Objekt kennt, wird selbiges als Parameter übergeben, steht auch so in der aufgabe, also weniger geistreich von mir

edit

das mit mehreren lebensformen ist ein gutes argument [img]http://images.rapidforum.com/images/i23.gif[/img]

Re: Aufgabe 8.3 2002-06-08 19:17
Popcorn
Also meinetwegen klappt es nach Game nicht, aber umgekehrt von Game in eine andere Klasse habe ich das bereits implementiert. Doch doch. Ich habe zwar von nichts so ne richtige Ahnung, aber ich habe mir das zusammengebastelt. %)

Re: Aufgabe 8.3 2002-06-08 19:39
Slater
hmm

Re: Aufgabe 8.3 2002-06-08 20:59
Popcorn
Na gut. Ich sehe gerade, ich hatte da n static reingeschummelt:

public class Questions
{

public static int praktische() {

}
}

-> int personalSkill = Questions.praktische();

Na gut. Also wie gesagt. Bau Dir ne Klasse Lifeform, erschaffe da Deinen Avatar mit dem Attribut Energie, füge in Room eine Funktion addLifeform hinzu und tue die Lifeform schließlich (wie alle anderen Inventory Dinge) in einen Raum, der in Game global verfügbar ist. Alle Klarheiten beseitigt? Klasse.

Re: Aufgabe 8.3 2002-06-08 22:06
Slater
puh, mein vertrauen in java ist wiederhergestellt [img]http://images.rapidforum.com/images/i7.gif[/img],

ne der fall war ja klar [img]http://images.rapidforum.com/images/i23.gif[/img]

haben wir jetzt eigentlich herrn anonymus geholfen oder verwirrt?

Re: Aufgabe 8.3 2002-06-10 01:39
Anonymer User
hi,

Meine Speicherverwaltende Klasse habe ich Speicher genannt.
In Ihr gibt es die Methode zeigeEnergieReserve(wert).

Warum funktioniert der Aufruf

Speicher.zeigeEnergieReserve(20) nicht?

leider ist fuer diesen Fehler keine Hilfe vorhanden.

Vielen Dank im Vorraus
Christian

Re: Aufgabe 8.3 2002-06-10 07:51
Zaphod
Was für eine Fehlermeldung erhältst du denn? Meine erste Vermutung wäre vielleicht ein 'private' statt eines 'public'.

Re: Aufgabe 8.3 2002-06-10 08:55
Popcorn
Du hast eine Klasse Speicher, in der gibt eine Funktion "zeigeEnergieRserve", welche den aktuellen Energiewert zurückgeben soll, ja? (lässt sich ja nach dem Namen vermuten).

>>> Speicher.zeigeEnergieReserve(20)
Wenn Du das aufrufst, veränderst Du aber etwas.

Du könntest z. B.

System.out.println(Speicher.zeigeEnergieReserve());

aufrufen, während die Methode dann so aussieht:

public int zeigeEnergieReserve() {
return _energie;
}

Wenn das alles anders soll, musste das noch einmal posten. Es sei denn, jemand hat Dich besser verstanden. %)

Re: Aufgabe 8.3 2002-06-10 15:49
Spacelord
hi,

Meine Speicherverwaltende Klasse habe ich Speicher genannt.
In Ihr gibt es die Methode zeigeEnergieReserve(wert).

Warum funktioniert der Aufruf

Speicher.zeigeEnergieReserve(20) nicht?

Wenn die Methode zeigeEnergieReserve(wert) wirklich genau so definiert ist, kann sie nicht funktionieren, weil kein Variablentyp für den Parameter wert angegeben ist, dann kannst du aber nicht mal die Klasse kompilieren. Wobei ich auch nicht weiß, weshalb du überhaupt einen Parameter in der Methode verwenden möchtest. Die Methode soll doch nur einen String mit dem aktuellen Wert der Variable EnergieReserve zurückliefern.

BTW: Ich habe die Energiereserve in Room eingebaut und bin damit auch sehr zufrieden, weil man das dann mit dem RaumspezifischenEffekt zusammen hat. [img]http://images.rapidforum.com/images/i23.gif[/img]

Re: Aufgabe 8.3 2002-06-10 20:26
Slater
@ Christian (toller name, hab ich auch [img]http://www.sternenvolk.de/symb/25.gif[/img] )
ich habe etwas programmiert und es geht nicht,
könnt ihr mir helfen…,

ja wie denn??,

man beachte zumindest, dass Operationen, die an der KLASSE selber aufgerufen werden (und nicht an Objekten) wie in deinem beispiel, STATIC und nicht PUBLIC sein müssen

edit
ähmm, naja sie müssen halt static sein, ob public oder nicht is ne andere geschichte..

@Spacelord

energieverwaltung in room fänd ich interessant, aber wie geht das bei dir, speicherst du die aktuelle energie?, wie wissen die unterschiedlichen räume davon?


Re: Aufgabe 8.3 2002-06-10 23:25
Spacelord
@ Slater:
Das ist so einfach wie genial! [img]http://images.rapidforum.com/images/i15.gif[/img]
In Room habe ich zur Speicherung der Energie
private static int _energieReserve = 20;
definiert und natürlich die get- und set-Methoden um _energieReserve zu verändern. Die Unterklassen (Erholungs-, Arbeitsraum, Verkehrsfläche) können über ihre RaumspezifischenEffekt-Methoden mit diesen get- und set-Methoden die Energiereserve umstellen bzw. anzeigen.

Da _energieReserve static ist, greifen alle Unterklassen auf dieselbe Variable zu (wenn sie nicht static ist, gibts für jeden Raumtyp voneinander unabhängige Werte und das wollen wir ja nicht).

Auf Grund der Polymorphie wird nun am Objekt der Raumspezifische Effekt von der Klasse aufgerufen, mit der das Objekt erstellt wurde. Wenn dort kein Raumspezifischer Effekt definiert ist, wird der aus der Oberklasse benutzt (in Room habe ich ihn auch, aber da zeigt er einfach nur die Energie an und verändert sie nicht). Somit ist sicher gestellt, dass immer der richtige RaumspezifischeEffekt benutzt wird. Eine Parameter-Übergabe, wie sie in der Vorlage nahegelegt wurde, brauche ich da natürlich auch nicht.