[Java] Bomberman (Greenfoot)

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von fugi96, 3. Januar 2013 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 3. Januar 2013
    Bomberman (Greenfoot)

    Hey Leute,
    ich bin grad dabei Bomberman mit Greenfoot zu programmieren. Soweit läuft es auch gut . Aber jetzt sind wir bei der Explosion. Die bereitet ein paar Probleme.
    Wie kann man verhindern,dass das Object Explosion() nicht die Objekte wie die Wände die zerstört oder nicht zerstört werden können überschneidet.

    Code:
     public void Bombelegen(){ 
     int x = getX(); 
     int y = getY(); 
     WallUnDestroyAble wuda = new WallUnDestroyAble();
    
     ((Level1)getWorld()).plantBomb(x, y);
    
     // wuda=(WallUnDestroyAble) getOneIntersectingObject(WallUnDestroyAble.class);
     
     if(wuda==null)
     {
     ((Level1)getWorld()).explosionerzeugen(x, y+1);
    
     ((Level1)getWorld()).explosionerzeugen(x, y-1);
     ((Level1)getWorld()).explosionerzeugen(x-1, y);
     ((Level1)getWorld()).explosionerzeugen(x+1, y);
     ((Level1)getWorld()).explosionerzeugen(x+2, y);
     ((Level1)getWorld()).explosionerzeugen(x-2, y);
     ((Level1)getWorld()).explosionerzeugen(x, y-2);
     ((Level1)getWorld()).explosionerzeugen(x, y+2);
     }
    
     }
    So sieht die Methode aus.
    In der API gab es die Methode getOneIntersectingObject. Wie kann ich die Methode hier in dem Zusammenhang verwenden.

    Bw is drinne,
    MfG Fugi
     
  2. 4. Januar 2013
    Zuletzt bearbeitet: 4. Januar 2013
    AW: Bomberman (Greenfoot)

    Huhu,

    erstmal: Greenfoot ist obercool... haben an der Uni mal ne Projektwoche damit organisiert. Kam was ziemlich geiles bei rum.

    So, nu zu deinem Problem:

    Erstmal scheint ja das Problem das Objekt Explosion zu sein, also solltest du auch den Code von der Klasse hier mal posten.

    Ich vermute aber mal das ich weiss was das Problem ist und du könntest es so Lösen:

    this.getIntersectionObjects (oder Ähnlich) gibt dir eine Liste zurück, die mit dem Objekt schneiden. Über diese liste kannst du iterrieren und je nach Typ irgendwas machen. Also:

    Code:
    for (Object obj : this.getIntersectingObjects())
    {
    if (obj instanceof zerstörbaresObjekt)
    {
    obj.zerstören();
    }
    if (obj instanceof unerstörbaresObjekt)
    {
    //nix machen
    }
    }
    Vielleicht hilft das ja schon.

    greetz fragl0r

    Achja: Die meisten werden Greenfoot nicht kennen, daher kannst du nicht davon ausgehen, dass die API bekannt ist oder was Greenfoot überhaupt macht. Wenn du schnelle Antworten willst, musst du deine Probleme ganz konkret stellen oder eben in den Foren von Greenfoot selbst rumhängen!!!
     
  3. 4. Januar 2013
    Zuletzt bearbeitet: 4. Januar 2013
    AW: Bomberman (Greenfoot)

    Warst mir schonmal ne große Hilfe

    Code:
    public class Explosion extends Actor
    {
     private long creationTime = System.currentTimeMillis();
    
     /**
     * Act - do whatever the Explosion wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
     public void act() 
     { 
     WallDestroyAble WDA = new WallDestroyAble();
     if (creationTime+2500<=System.currentTimeMillis()) 
     {
     getWorld().removeObject(this); 
     }
     
     
    
     } 
    }
    Das ist die Klasse Explosion
    ich weiß jetzt nur nicht wie ich deinen Code dort integrieren kann

    Es kommt der Fehler: java.lang.IllegalStateException: Actor not in world. An attempt was made to use the actor's location while it is not in the world. Either it has not yet been inserted, or it has been removed.


    Aber schonmal Danke
     
  4. 6. Januar 2013
    AW: Bomberman (Greenfoot)

    Da fehlt ja auch ne Abfrage ob das jeweilige Element (wall?) zerstörbar ist oder nicht. Ich weiß nicht genau wie du das gemanaget hast, aber normalerweise musst du noch auf dein "this" ne Abfrage machen ob es zerstörbar ist (wenn ich mich nicht täusche)

    Gruß
     
  5. 8. Januar 2013
    AW: Bomberman (Greenfoot)

    Hi!

    Ohne den anderen Code, kann ich dir nicht sagen wo genau der Fehler sitzt. Aber ich kann dir sagen das du eine Methode aufrufst, für die ein Actor in der Welt sein muss. Es sieht bisschen so aus wie ein Fehler, den ich selber oft gemacht habe.

    bevor du Actor.getWorld() aufrufen kannst musst du den Actor erst mit world.addObject(Actor) reinpacken. Nur weil du ein Objekt eines Actors erstellt hast, gehört er noch nicht zur Welt!! Hoffe du weisst was ich mein...

    Vielleicht gibst du mal mehr Info zu dem ganzen Szenario und der Logik die da abläuft und wann genau der Fehler passiert.

    greetz fragl0r
     
  6. 10. Januar 2013
    AW: Bomberman (Greenfoot)

    Hab den Fehler jetzt gelöst.
    Habe die methode von dir in die Klasse der Zerstörbaren Wände reingeklatscht und siehe da, es funktioniert
    Vorher hat es genau umgekehrt den Fehler gegeben.

    Ich sag mal Closed
    Und danke an dich fragl0r

    MfG Fugi
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.