Erste Schritte Zoo - Idee eines Spiels

Noppy408

Mitglied
So, auf gehts ins erste Pogramm/Spiel :hihi:

Also vorstellung ist folgende, ist ein Zoo (angeregt von Volvagia).
In diesem Zoo möchte ich sagen wir mal für den Anfang 3 Tierarten unterbringen.
1. Affen (sind vielseitig)
2. Ziegen (springen Beispielsweise, hin und her / von Besuchern fütterbar)
3. Pinguine (schwimmen hin und her und tauchen )

vil. erstmal für den Anfang nur 1 Tier pro Art.
dann braucht man noch Gehege. Welche man ja auch als Klasse anwenden könnte.
Denn somit könnte man die Gehege je nach aktion ändern.
macht man nun pro Tier eine eigene Klasse? oder steckt man die jetzt so zu sagen in das Gehege?


Code:
class Affengehege
class Affen

class Ziegengehege
class Ziegen

class Pinguingehege
class Pinguine

Also die Gehege wären dann in etwa so:

Code:
public class Affengehege {
 int breite = 20; // Meter
 int hoehe = 5; // Meter
 int tiefe = 20; //Meter
 String untergrund = "Rasen";
 int reifen = 1; // Spielzeug
 int verbesserung = 1; //Reifen

void verbessern (int verbesserung) {
reifen = reifen + verbesserung

}



}

Was haltet ihr davon? und wie kann ich nun weiter machen? das ist mein bisheriger Stand 🙂

PS: Ich merke das es mit meinem Javawissen voran geht 🙂
 
Zuletzt bearbeitet von einem Moderator:
Kommt auf das Projekt an. Wenn sich die Gehege (Variable/Methoden, nicht im RL) nicht sehr grob unterscheiden würde ich versuchen alles in eine Klasse unterzubringen und davon mehrere Instanzen zu erzeugen. Viele Klassen sind auf Dauer sehr verwirrend, du musst versuchen ein Mittelding zwischen vielen Klassen und zu viel in einer Klasse zu finden. Wenn sie sich sehr grob unterscheiden würde ich für jedes eine Klasse anlegen und sie von einer Klasse Gehege (oder Enclosure, wie ich sie wohl nennen würde) zusammenfassen.
Die Ziege befindet sich ja wahrscheinlich im Streichelzoo. Dort herrschen andere Regeln, deshalb würde ich sie auf jeden Fall von Gehege erben lassen. Dort könntest du eine Methode wie z. B. boolean canBesucherBetreten(); die false zurückgibt. Der Streichelzoo überschreibt sie mit true und enthält z. B. zusätzlich eine Liste mit Futterautomaten. Du könntest das auch über ein Model wie bei JTable regeln, aber wenn jetzt noch MVC dazu kommt brichst du warscheinlich zusammen. ^^

Als Untergrunddefinition würde ich eine Liste mit enum-Klassen vorbereiten. z. B. Rasen, Wasser, Eis, Sand, Beton. Damit kannst du z. B. Gehege mit mehreren Typen anlegen. Du könntest auch jeden m² oder so als Instanz erzeugen und dem einen Untergrund zuweisen, aber wie sehr du da ins Detail gehst bleibt dir überlassen.

Und (reine meiner Meinung nach) sollten die Variablen so aussehen: reifen => reifenAnzahl, verbesserung => verbesserungAnzahl oder verbesserungsLevel.
Bei breite/höhe (?)/tiefe weiß ich sofort, dass das Zahlen sind, aber bei Reifen erwarte ich z. B. eher eine Instanz oder Collection mit Reifen.
 
Welcher Zweck soll damit verfolgt werden? Erfahrung sammeln?
bzw. mit welche Programmieraspekten willst Du Dich damit auseinandersetzen?
Wird das ein reines Konsolenprogramm oder soll es dazu auch ein GUI geben?
Kenne Deinen Kenntnisstand nicht, aber sowas wäre ein Fall für Polymorphie (Vererbung, Interfaces, abstrakte Klassen...)
Ich würde zunächst einmal mit einer abstrakten Klasse (Zoo)Tier und Gehege anfangen bevor ich mir Gedanken über ein konkretes Affengehege mache.
 
Ich würde mal schauen, ob Du Generalisieren kannst. Wenn Affen, Ziegen und Pinguine einige Gemeinsamkeiten haben, wäre es sinnvoll diese in eine (abstrakte) Oberklasse Tier auszulagern. Das gleiche gilt für Affengehege, Ziegengehege und Pinguingehege da gibt es vielleicht Gemeinsamkeiten, die in einer (abstrakten) Oberklasse Gehege ganz gut passen würden. Weiters sollen die Gehege ja jeweils Tiere enthalten. Da wäre eine Liste in der Gehegeklasse angebracht. Mit Generics kann man noch dafür sorgen, dass Pinguine nicht in Affengehegen sein können. Ungefähr so würd ich mir das vorstellen:
[Java]
// Die Tierklassen
abstract class Tier {
... Variablen und Methoden, die alle Tiere gemeinsam haben
}

public final class Affe extends Tier {
... hier der Afffen-spezifische Code
}

... Für Pinguine und Ziegen entsprechend...

// Die Gehegeklassen
abstract class Gehege<T extends Tier> {
... hier der Code, den alle Gehege gemeinsam haben, u.a. auch
private List<T> insassen;

public final boolean addInsasse(final T insasse) {
return this.insassen.add(insasse);
}

...
}

public final class Affengehege extends Gehege<Affe> {
... Hier der Affengehege-spezifische Code ...
}
[/Java]
 
erstmal danke für die Antworten, nun nachdem ich mir das alles durchgelsen habe werfen sich da wieder viele viele Fragen auf 🙂
Was sind abstrakte Oberklassen?!?
Wie funktioniert das mit der vererbung
Was sind enum-Klassen?
Als Untergrunddefinition würde ich eine Liste mit enum-Klassen vorbereiten. z. B. Rasen, Wasser, Eis, Sand, Beton. Damit kannst du z. B. Gehege mit mehreren Typen anlegen. Du könntest auch jeden m² oder so als Instanz erzeugen und dem einen Untergrund zuweisen. <= wie soll das gehen ? ???:L

Bei breite/höhe (?)/tiefe weiß ich sofort, dass das Zahlen sind, aber bei Reifen erwarte ich z. B. eher eine Instanz oder Collection mit Reifen. <= hää?
Mit dem Teil weiß ich auch nicht was du mir sagen möchtest


Zeile 15 verstehe ich nicht: private List<T> insassen;
 
Zuletzt bearbeitet:
Um es mal kurz zu machen:

Abstrakte Klassen können nicht intialisiert werden.
Mit "extends Klassenname" nach dem Dateiname.
Enums sind eine Sammlung von Klassen für faule. 😀
Ganz einfach. Du legst die Klasse Untergrund an, und erzeugst sie für jedes Gehege w*h mal. Diese werden dann ins Gehege geschrieben. So kannst du auf jedes Feld einzeln zugreifen.
Collections sind Klassen um Instanzen zu sammeln. Im ganz groben die erweiterte Form von Arrays.

Bei OOP (wofür ich das Projekt ja vorgeschlagen habe) wirst du aber um ein Tutorial oder ein eBook nicht herum kommen.
 
Was sind abstrakte Oberklassen?!?
Wie funktioniert das mit der vererbung
Bevor man mit "größeren" Projekten anfängt sollte man m.M. damit was anfangen können. Wird in jedem Anfängerbuch behandelt.
Zeile 15 verstehe ich nicht: private List<T> insassen;
Hierbei handelt es sich um Generics, in diesem Maß (bei der Definition eigener Klassen) muss man sich als Anfänger m.M. nicht auseinander setzen.
 
Was sind enum-Klassen?
Enumeration kann mit Aufzählung übersetzt werden. Wenn Du eine Sammlung von fest definierten Werten hast, macht es Sinn, diese in einer Enum zu definieren. Beispiel:
Java:
public enum Geschlecht {
  MAENNLICH, WEIBLICH;
}
Die kannst Du dann als Variable in einer Klasse verwenden. Beispiel:
Java:
abstract class Tier {
  private Geschlecht geschlecht;
}
Damit können in der Variable geschlecht nur MAENNLICH und WEIBLICH vorkommen. Man hätte diese Unterscheidung auch mit einem String oder Integer oder sogar Boolean machen können. Aber mit den Enums ist es viel aussagefähiger.
 
Was haben denn die Tiere gemeinsam? 😀D find da nichts

könntest du eben schreiben was ich schreiben müsste wenn ich nun ein männchen haben wollte 🙂
 
Zuletzt bearbeitet:
Was haben denn die Tiere gemeinsam? D find da nichts
Wenn sie nichts gemeinsam haben, macht Vererbung keinen Sinn. Aber ich könnte mir z.B. vorstellen, dass Zootiere Namen haben, dass man ihr Geschlecht bestimmen will, dass sie alle eine Methode spielMitMir zur Verfügung stellen etc.... Mit etwas Phantasie gibt es da einiges
 
könntest du eben schreiben was ich schreiben müsste wenn ich nun ein männchen haben wollte

[Java]
abstract class Tier {
// Das Geschlecht wird bei der "erzeugung" festgelegt und ist danach nicht mehr änderbar,
// deswegen final.
private final Geschlecht geschlecht;

// Weil das Geschlecht bei der "erzeugung" festgelegt wird, muss es hier auch zugewiesen werden.
// Dafür wird der Konstruktor Parameter verwendet
protected Tier(final Geschlecht geschlecht) {
this.geschlecht = geschlecht
}
}

public class Affe extends Tier {

public Affe(final Geschlecht geschlecht) {
// Reicht den Parameter an den super-Konstruktor durch.
super(geschlecht);
}
}

// Irgendwo im Programm
final Affe kingKong = new Affe(Geschlecht.MAENNLICH);
[/Java]

Das ist jetzt ein Beispiel, wie ich es machen würde. Ein anderer gangbarer Weg wäre ein sog. setter:
[Java]
abstract class Tier {

private Geschlecht geschlecht;

public final void setGeschlecht(final Geschlecht geschlecht) {
this.geschlecht = geschlecht
}
}

public class Affe extends Tier {
}

// Und dann irgendwo im Code:
final Affe kingKong = new Affe();
kingKong.setGeschlecht(Geschlecht.MAENNLICH);
[/code]
 
Zuletzt bearbeitet von einem Moderator:
wenn ich nun aktionen / Methoden habe schreibe ich folgendes:
Java:
public Ziege () {
int hüpfintervall = 1.5 // Stunden


void hüpfen () {
hüpfen = hüpfintervall

}

}

ok das ist mega falsch 😀
 
Was haben denn die Tiere gemeinsam? 😀D find da nichts

Alle Tiere müssen zum Beispiel

schlafen()
geräuschMachen()
bewegen()
essen()

Vererbung:
Oberklasse: TIER
Unterklasse: Affe, Pinguin u. Ziege erben die Methode schlafen() von der Oberklasse TIER

aber ich denke es macht erst richtig sinn wenn du dir die Themen in irgendeinem Buch oder ähnliches anschaust.

edit: argh bin ich langsam... postet mal bitte nicht so schnell^^

Gruß
 
ok das ist mega falsch
Ja ist es. Und eine Frage bzw. Hinweis, was Du mit dem Code bezwecken willst, steht da auch nicht. Auf dem Level macht es keinen Sinn zu antworten. Da kann ich Dir nur den Rat geben, Dir die Java-Grundlagen anzulesen.
 
Ich werde das wohl erstmal auf grundeis legen ich steig da nicht richtig durch, ich kaufe mir ja in 2 Wochen den JavaVideoKurs und wenn ich den durch hab werde ich dieses Thema wieder aufgreifen, vielen dank für die schnellen Posts 😛

PS: ich komme da auch nicht hinterher 😀DD

danke leute :toll::toll:
 
Also jetzt ohne meine Versuche weiter zu kommen hab ich Langeweile 😀
wenn ich nun ein Tutorial für sowas suchen möchte muss ich nach folgendem suchen oder?:
Tutorial für OOP-Konsolenbasiertes Spiel.

mfg noppy der gelangweilte 😀
 
Es bringt nichts ohne Grundlagen loszuspurten. Das Einzige was du damit erreichst ist Ernüchterung.

Such hier im Forum mal nach "Von Kopf bis Fuß: Java"
 
Hi Noppy408,

du könntest dich ja mal an einem Schere Stein Papier Programm versuchen, ist ansich nicht viel dabei und man sieht am Ende, dass man etwas selbst gemacht hat.

Hier paar Methoden, Werte übergeben, Objekte erzeugen, mit Objekten arbeiten, eine Benutzereingabe und noch bissl mehr. (je nachdem wie man es löst)

Zumindest wäre das für den Anfang sehr einfach.

Gruß

GEEK
 
Da dir ja eh langweilig ist, wie du zuvor mal geschrieben hast, have fun 🙂

habs zuvor auch erst gemacht, da ich mich selbst noch in der Rolle des Einsteigers befinde.
 
Habe eben in den Kapiteln "Für wen ist dieses Buch?" und "Wer sollte eher die Finger von diesem Buch lassen?" nachgelesen und muss Deine Frage mit nein beantworten.

Für wen ist dieses Buch?
(1) Können Sie Java? (Sie müssen kein Guru sein)
Wenn mir die absoluten Grundlagen fehlen, klare Antwort: Nein!

Wer sollte eher die Finger von diesem Buch lassen?
(1) Sie sind ein völliger Java-Neuling?
Wenn mir die absoluten Grundlagen fehlen, klare Antwort: Ja!

Ergo kann ich deine Verneinung ehrlich gesagt nicht nachvollziehen.

PS: Jetzt habe ich extra für dich das Buch rausgekramt 😉
 
Hi,

da es ja gerade um das Buch Entwurfsmuster von Kopf bis Fuß geht, würde ich mal gerne von euch in 2-3 Sätzen wissen um was es da genau geht, ich würde mir das Buch nämlich gerne besorgen, wenn ich mit Java von Kopf bis Fuß fertig bin.

Gruß GEEK
 

🙂 hab mich gedacht das so eine Antwort kommt

Also ich nehme jetzt einfach mal an, da ich mir unter dem Titel des Buches (noch) nicht soviel vorstellen kann, dass es in diesem Buch um den Aufbau von Programmen geht?
Also man lernt vielleicht eine Art Schema, mit diesem man den Aufbau von Programmen herrausarbeiten kann?

edit: ah den Link darunter hab ich übersehn, sry werd ich mit gleich mal anschauen, danke.


Gruß
 
Das mit der Ente ist ne coole Sache 🙂
Quaken, Schwimmen und so weiter sind doch alles Methoden(aktionen)
sehe ich das richtig?
heißt das ich die dann so schreibe:

Java:
public void quaken () {

 }

aber wie mache ich dann weiter 🙂


Das mit der Vererbung habe ich nun verstanden 🙂

Klasse Affe
Java:
springen ();
hangeln ();
rennen ();

class brunoDerAffe
nun kann ich ja mit irgenteinem befehl bruno springen hangeln usw "beibringen"
 
Zuletzt bearbeitet:
Ja. Wenn Affe abstract ist wäre das so. HomerDerAffe (Klassennamen immer groß schreiben) könnte in den implementierten Methoden was vollkommen anderes als Bruno machen.
 
Nein, BrunoDerAffe ist keine gute Klasse. Wenn, dann hast du vllt eine Klasse: Schimpanse, welche das Attribut name kennt. Dort könnte dann "Bruno" drin stehen. Immer darauf achten, dass du deine Klassen möglichst oft wiederverwenden kannst.

Aber wie schon bermerkt wurde: Das sind Grundlagen. Das findest du alles in Literaturen oder dem JavaVideoKurs (bei dem du dich evtl. anmelden wolltest).

Wir helfen gerne weiter bei konkreten Problemen, aber wir sind eigentl. keine Nachhilfelehrer, die mit dir die Grundlagen stück für stück durchgehen.
 
Les mal in das Java von Kopf bis Fuß rein (Link steht einige Posts weiter oben) Da werden genau solche Sachen extrem gut und interessant vermittelt.

Bettel im Zweifel deine Eltern an und leier die 50€ raus Die sinds imho mehr Wert als ein Videokurs.

Muss letztlich aber jeder selber wissen.

PS: Es gibt ein Buch OOP von Galileo Press verfügbar als EBook

Edit: Hab den Link mal rausgesucht: Galileo Computing :: Objektorientierte Programmierung - Das umfassende Handbuch
 
Das mit der Ente ist ne coole Sache
Quaken, Schwimmen und so weiter sind doch alles Methoden(aktionen)
sehe ich das richtig?
Grundsätzlich ja. Ich denke aber nicht dass du schon soweit bist dich mit dem Kapitel Strategy Pattern von dem Head First on Design Pattens Buch zu befassen.


aber wie mache ich dann weiter
was willst du überhaupt machen?

nun kann ich ja mit irgenteinem befehl bruno springen hangeln usw "beibringen"
ich würd echt nicht so viel fragen, sondern wirklich mal lesen und machen. Was du wissen willst, ist wie man eine Methode eines Objekts aufrufst. Das steht in jedem Anfänger Buch....
 
ich würd echt nicht so viel fragen, sondern wirklich mal lesen und machen.

Stimme ich zu. Les erst mal ein bisschen fang was einfaches konkretes an und frag dann auch nach konkreten Problemen. Das artet hier in ne Art Privatnachhilfe in allem aus. Das ist ja nicht Sinn der Sache.

Hast ja jetzt schon ein paar Empfehlungen bekommen einige sogar kostenfrei!

- Java ist auch eine Insel (Kostenfrei!)
- OOP von Galileo Press (Kostenfrei!)
- Java von Kopf bis Fuß (Sehr gut aber leider auch 50€)
 

Zurück
Oben