# Greenfoot Kollision



## Derenei (19. Apr 2012)

Beginne seit heute mit Greenfoot zu programmieren.

Und zwar will ich ein Programm schreiben wo der Spieler eine Biene mit den Tasten steuert und ihn in entgegengesetzer Richtung Teddys entgegen kommen denen er ausweichen muss. Wenn der Spieler jedoch einen Teddy berührt soll das Spiel vorbei sein.

Was ich bis jetzt geschafft habe das man die Biene steuern kann und das dem Spieler Teddys entgegenkommen aber es passierts nicht wenn der Spieler einen Teddy berührt. Irgendendwie schaffe ich es nicht das Spiel zu beednen wenn der Spieler einen Teddy berührt.

Mein Quellcode der Hauptklasse Spiel1:

```
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
public class Spiel1 extends World
{
    public Spiel1()
    {    
        super(700,700, 1);
        Spawn ();
    }
    
    public void Spawn ()
    {
        Bee biene = new Bee ();
        addObject (biene, 0, 350);
        for (int i = 0; i < 10; i++)
        {
            Teddy bär = new Teddy ();
            int y = Greenfoot.getRandomNumber (700);
            addObject (bär, 700, y);
        }
    }
}
```

Hier der Quellcode des Bienen Klasse:


```
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
public class Bee extends Actor
{
    public void act() 
    {
        if (Greenfoot.isKeyDown ("d"))
        {
            int x = getX();
            int y = getY();
        
            int x2 = 1;
            setLocation (x+x2, y);
        }
        
        if (Greenfoot.isKeyDown ("a"))
        {
            int x = getX();
            int y = getY();
        
            int x2 = 1;
            setLocation (x-x2, y);
        }
        
        if (Greenfoot.isKeyDown ("w"))
        {
            int x = getX();
            int y = getY();
        
            int y2 = 1;
            setLocation (x, y-y2);
        }
        
        if (Greenfoot.isKeyDown ("s"))
        {
            int x = getX();
            int y = getY();
        
            int y2 = 1;
            setLocation (x, y+y2);
        }
    }    
}
```

Und der Quellcode zu meiner Teddy Klasse:


```
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Teddy here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Teddy extends Bee
{
    /**
     * Act - do whatever the Teddy wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        int x = getX();
        int y = getY();
        
        int x2 = 1;
        
        setLocation (x-x2, y);
        
        if (x == 0)
        {
            getWorld().removeObject (this);
        }
    }    
}
```

Was genau müsste ich da machen damit das Spiel beednet wird sobald der Spieler einen Teddy berührt?

Danke im Voraus.


----------



## Final_Striker (20. Apr 2012)

Derenei hat gesagt.:


> Was ich bis jetzt geschafft habe das man die Biene steuern kann und das dem Spieler Teddys entgegenkommen aber es passierts nicht wenn der Spieler einen Teddy berührt. Irgendendwie schaffe ich es nicht das Spiel zu beednen wenn der Spieler einen Teddy berührt.



Ich habe bis jetzt auch nicht gesehen, dass du irgendwo vergleichst das eine Biene auf einen Bär trifft.


Die Zeile ist aber merkwürdig.


```
public class Teddy extends Bee
```

Ein Bär ist doch keine Biene. Macht also keinen Sinn.

Auch und noch was:


```
Teddy bär = new Teddy ();
```

Keine Umlaute im Quelltext.


----------



## Derenei (20. Apr 2012)

Danke für deine Antwort.

Ich habe es versucht zu programmieren habe aber dann en falschen Quellcode wieder gelöscht da das Programm sonst nicht laufen würde.

Wie genau müsste ich das machen.

Danke für eure hilfe.

MFG Alex


----------



## Derenei (20. Apr 2012)

Das mit


```
public class Teddy extends Bee
```

war schon in der Klasse geschrieben????:L


----------



## SlaterB (20. Apr 2012)

und hast du eine Erklärung dafür? 
programmiert dein PC von selber, wird Quellcode durch Zufall erzeugt
oder meinst du eine Vorgabe durch Aufgabenstellung?

in jedem Fall könntest du es doch wohl korrigieren, falls du willens bist und Macht über den Quellcode hast,
'extends Actor' wäre besser als 'extends Bee'

-----

zur Kollision usw. ist in deinem Quellcode bisher genau gar nichts vorhanden
> Irgendendwie schaffe ich es nicht das Spiel zu beednen 
klingt da schmeichelhaft nach irgendeinen minimalen Fehler, wobei es für die aktuelle Situation letztlich auch stimmt


ob da in 'Greenfoot', was immer das ist, etwas vorgesehen ist, weiß vielleicht irgendjemand, 
ich erhöhe jetzt die Chancen indem ich das Thema umbenenne, 
vom sinnlosen 'Anfänger Problem mit Objekten' weg zu etwas aussagekräftigen (ist das so schwer?)


wenn man ohne Kenntnisse beliebig reinschaut gilt:
bisher ist keine zentrale Verarbeitung sichtbar, nur die drei act()-Methoden, die alle anderen Objekte auch nicht kennen,
falls eine von diesen was machen soll, dann wohl die eine Biene, muss sie alle Teddys kennen,
die in eine Liste und an Biene übergeben, dort dann per Schleife Position vergleichen,

falls nicht exakt pixelgenau übereinander auf Abstand prüfen, bei Unterschreitung ist es eine Kollision


----------



## Derenei (21. Apr 2012)

Danke für eure Antworten.

Ich komme einfah nicht weiter. In der letzen Programmier Stunde hat uns unser Lehrer irgendwas vorprogrammiert. Es kam keiner nur ein bisschen mit. Er hat uns sein Programm dann online gestellt das wir uns das ganze nocheinmal anschauen können:

Übung 6
Blumen: erzeuge einen neuen Actor „Flower“ mit einer Blume als
Hintergrundbild.
Wenn eine Biene auf eine Blume trifft, soll sich das Leben der Biene um
30 weiter Flüge verlängern 

(Ich möchte das mein Teddy Bör gelöscht wird wenn der Spieler mit der Biene einen Teddy Bär berührt)


```
...
List flowers =
getWorld().getObjectsAt(x+x2,y+y2,Flower.class);
if ( !flowers.isEmpty() )
{
count -= 30;
}
dir+=10;
setRotation(dir);
if ( count>=50 ) getWorld().removeObject(this);
}
```

Also ich hab das nicht verstanden.

Mein versuch, Ich habe in meine bee Klasse folgendes geschrieben:


```
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo
import java.util.*;
public class Bee extends Actor
{
    public void act() 
    {
        if (Greenfoot.isKeyDown ("right"))
        {
            int x = getX();
            int y = getY();
        
            int x2 = 3;
            setLocation (x+x2, y);
        }
        
        if (Greenfoot.isKeyDown ("left"))
        {
            int x = getX();
            int y = getY();
        
            int x2 = 3;
            setLocation (x-x2, y);
        }
        
        if (Greenfoot.isKeyDown ("up"))
        {
            int x = getX();
            int y = getY();
        
            int y2 = 3;
            setLocation (x, y-y2);
        }
        
        if (Greenfoot.isKeyDown ("down"))
        {
            int x = getX();
            int y = getY();
        
            int y2 = 3;
            setLocation (x, y+y2);
        }
        
        List bär = getWorld().getObjectsAt((dieses)->x-x2, y, Teddy.class);
        if ( !bär.isEmpty() )
        {
            getWorld().removeObject (this);
        }    
    }
```


Was genau mache ich da falsch es kommt immer die Fehlermeldung das x nicht public ist.

Danke im Voraus.


----------

