# kleines Spiel [Processing]



## Hawk19 (21. Jan 2012)

Guten Abend,

Im Voraus sei gesagt, ich bin blutiger Anfänger und lerne derzeit Java anhand von Processing. 

Gerade bin dabei ein kleines Spiel in Processing zu programmieren und komme nicht weiter. 

Möchte euch kurz das Prinzip erläutern: 

(Bild zu besseren Vorstellung: 

 )

Es fallen ständig vom oberen Bildschirmrand 3 verschiedene* Formen (Dreieck, Rechteck, Kreis)* nach unten. 
Von jeder Form gibt es jeweils eine* SUBKlasse*, diese unterscheidet sich von den anderen, durch die Farbe. 

Ein *Zufallsgenerator* (am rechten oberen Rand) soll zufällig jeweils immer eine Subklasse anzeigen, diese soll dann vom Spieler angeklickt werden, bevor diese den Boden erreicht. 
_______________________________________________________________________________

Mein Problem ist jetzt, ich weiß nicht wie ich die SUBKlasse im "Zufallsgenerator" anzeigen kann, dass dieser immer wechselt und immer per Zufall die Subklassen auftauchen. 

Und noch eine kleine Frage: Wie kann ich verhindern, dass sich die Objekte "überlagern" beim herunterfallen ?


Hab das ganze Projekt mal im Anhang hinzugefügt, vielleicht wäre jemand so nett und schaut sich das ganze mal an. 


Vielen Dank =)


----------



## Hawk19 (21. Jan 2012)

Okay ich weiß wie ich es ungefähr machen könnte, nur bin ich mir noch nicht sicher ob das so klappt.

Beispiel:

Main Klasse: KreisForm


```
class Kreis {


  float x;
  float y;

  float deltaY=random (0.8, 1); 

  int r= 0;
  int g= 200;
  int b= 0;

  color c1= color(r, g, b);

  Kreis (float _x, float _y ) {

    x=_x;
    y=_y;
  }

  void display() {

    fill(c1);
    ellipse (x, y, 60, 60);
  }

  void update() {


    y += deltaY;

    if (y > height-148) {

      y = random (-30, -50);
      x= random(0, 600);
    }
  }
}
```


SUBKlasse: Kreisform:


```
class SubKreis extends Kreis {


  SubKreis(float _x, float _y)

  {

    super(_x, _y);
  }

  void display () {

    fill(#12FFE9);
    ellipse (x, y, 60, 60);
  }
}
```


Jetzt hab ich folgendes vor und zwar möchte ich ein Array erstellen, das einmal ein Objekt speichert welches nach der SUBKlasse gebaut wird und jeweils die Update Methode miterbt. Das sind dann die, die runter laufen.


Und dann soll in einem Array (Bsp. Array Kreisform [1] ) dasselbe Objekt von der SUB Klasse erstellt werden nur ohne die UPDATE Methode (keine Bewegung), das ist dann das Objekt was rechts oben angezeigt wird und sich nicht bewegt. 

Kann ich denn überhaupt steuern ob eine SUBKlasse nur "eine" Methode von der MAIN erbt ?

Für mich ist das gerade alles ein bisschen verwirrend.


----------



## Marco13 (21. Jan 2012)

Für mich auch. Welchen Zweck erfüllen die "SUB"Klassen genau? Geht es nur darum, dass man eine Instanz hat, die sich bewegt, und eine, die sich nicht bewegt?


----------



## Hawk19 (22. Jan 2012)

Also in der Hauptklasse befinden sich die Kreise, die einfach so runterfallen und ohne Bedeutung sind. (Davon dann auch Dreiecke und Rechtecke). Die befinden sich also in einer schleife und kommen immer wieder.

Die SubklasseKreis: Soll die spezielle Form darstellen (andere Farbe) und die soll angeklickt werden. Diese soll eben zufällig mal auftauchen.


Nun hab ich 3 solche "speziellen Formen"(Jeweils vom Kreis, Dreieck und Rechteck). Wenn nun eine "spezielle" Form auftaucht, also von oben nach unten fliegt, dann soll rechts oben in einem Fenster diese erscheinen (sich aber eben Nicht bewegen), damit der Spieler weiß das er diese "spezielle" Form klicken muss. Auf Klick gibt es dann eine Punktzahl.

Die Frage ist jetzt ob ich mit meinem BauPlan aus der SUBKlasse, jeweils zwei "unterschiedliche" Objekte bauen kann. Nämlich das eine das sich nach unten bewegt (also mit der Methode: BEWEGEN ) und das andere alles gleich nur ohne Bewewegen.

Und ob ich diese dann in einem Array speichern und abrufen kann. 


Hoffe hab es etwas verständliche erklärt.. ich blick auch nicht mehr so richtig durch. Ich schau mir denk ich nochmal die Grundlagen an.


----------



## Marco13 (22. Jan 2012)

Ja, wenn man deltaY auf 0 setzt, bewegt es sich ja nicht?! Oder wenn man die update-Methode einfach nicht aufruft...!? (Von wo wird die denn aufgerufen?)


----------



## Hawk19 (22. Jan 2012)

Okay, ich hab mal ne Nacht drüber geschlafen. Jetzt funktioniert es, du hattest völlig recht einfach bei dem einen die update Methode nicht aufrufen. 

So wird das nun im Hauptprogramm aufgerufen:



```
for (int i=2;i<nKreis;i++) {

    formK[i].update();
    formK[i].display();
  }

  formK[0].display(); (-- > FORM die Rechtsoben angezeigt wird)

  formK[1].display(); ( -- > spezial Form, die sich nach unten Bewegt)
  formK[1].update();
```


Den Ansatz hatte ich schon mal nur hatte ich irgenwas falsch gemacht. Jetzt funktioniert es aber =)

Jetzt muss ich es nur noch hinbekommen, dass die jeweils zufällig auftauchen, d.h. wenn Spez.Dreieck angezeigt wird, dann muss es auch auf den Spielfeld erscheinen. 

Und leider überlappen sich die Gegenstände beim hinunterfliegen, kann man das irgendwie vermeiden ? 

Vielen Dank =)


----------



## Marco13 (22. Jan 2012)

Ich nehme an, die Objekte werden an einer zufälligen x-Position erzeugt? Dann muss man sicherstellen, dass sie sich über die ganze Höhe hinweg nicht überschneiden können (sie bewegen sich ja unterschiedlich schnell). Im Pseudocode wäre das dann sowas wie

```
erzeugeNeuesObjekt
{
    solange keine freie Stelle gefunden wurde
    {
        wähle zufällige x-position für das neue objekt
        überprüfe alle vorhandenen Objekte
        {
             wenn das neue objekt ein schon vorhandenes überschneiden könnte (*)
             dann wurde keine freie Stelle gefunden
        }
    }
}
```

Die Zeile (*) hängt ein bißchen davon ab, wie die Objekte implementiert sind. Es gibt z.B. Kreis oder Dreieck - aber... erben die von einer gemeinsamen Klasse? Wenn sie von einer gemeinsamen Klasse (z.B. "Form" oder so) erben würden, könnte man diese Abfrage evtl. recht einfach machen, wenn jede "Form" zwei Methoden hätte wie

```
float getMinimumX() { ... }
float getMaximumX() { ... }
```
oder so...


----------



## Hawk19 (22. Jan 2012)

Abend ! =)


Also die 3 jeweiligen Formen haben auch ihre eigenen Klassen. Aber stimmt ja ich kann die ja eigl. alle in eine Klasse Formen packen. Wäre dann wohl auch besser denk ich.. ich probier nochmale in bisschen rum vielleicht bekomm ich es hin. Wenn ich nicht weiterkomme meld ich mich nochmal.

Auf jeden Fall schon mal vielen Dank für deine Hilfe 

Echt super ! =)


----------

