Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur

Sphinx64

Neues Mitglied
Hallo Zusammen

Ich bin aktuell am ersten Java Projekt mit GameGrid und habe irgendwo einen (wahrscheinlich noch viel mehr) Fehler gemacht und jetzt bewegt sich mein Actor nicht mehr. Ich habe jetzt schon mehrere Stunden versucht den Fehler zu korrigieren aber ich finde ihn nicht. Wenn mir jemand erklären könnte, was ich falsch gemacht habe oder einen Lösungsansatz hat, wäre ich sehr Dankbar. 🙂
Eclipse gibt mir die Fehlermeldung:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Duplicate local variable gg
Syntax error, insert ";" to complete LocalVariableDeclarationStatement
at Bombe.<init>(Bombe.java:22)
at MyGameGrid.<init>(MyGameGrid.java:45)
at MyGameGrid.main(MyGameGrid.java:21)

Das ist meine Main Methode die das Spiel erstellt.
Java:
    import ch.aplu.jgamegrid.*;
    import java.awt.Color;
    import java.awt.Point;
    import java.awt.*;
    import java.awt.event.KeyEvent;

class MyGameGrid extends GameGrid implements GGActorCollisionListener

{
    private Player player1;
   
    private int level;
    private boolean explode;
    private GameGrid gg;

    public static void main(String[] args) {
        GameGrid gg = new MyGameGrid();
    }

      public MyGameGrid()
      {
        super(26, 18, 35,   "sprites/Hintergrund.jpg");
      
       Player player1 = new Player (this);
       addActor(player1, new Location (0,0));
     
      
           
       SuperBlöcke sBlock1 = new SuperBlöcke ();
       addActor(sBlock1, getRandomEmptyLocation()    );
     
       
         player1.addCollisionCandidate(sBlock1);
         player1.setCollisionEnabled(isRunning());
        
        addKeyListener(this);
        explode=true;
        if (explode)
        {
            Bombe bombe = new Bombe ();
            addActor(bombe, new Location(player1.getNbHorzCells(),player1.getNbVertCells()));     
       
        }

        show ();
       
        doRun();
      }
     
      public void act ()
      {
     
      }
       public void createBombe ()
       {
          
            Bombe bombe = new Bombe ();
          // addActor(bombe, new Location (player1.getLocation()));
            addActor(bombe, getRandomEmptyLocation());
        }
       
     
       public boolean keyPressed(KeyEvent evt)
       {
         switch (evt.getKeyCode())
         {
           case KeyEvent.VK_UP:
               player1.setDirection(270);
               player1.move ();
             break;
            
           case KeyEvent.VK_RIGHT:
               player1.setDirection(0);
               player1.move ();
             break;
            
           case KeyEvent.VK_LEFT:
             player1.setDirection(180);
             player1.move();
             break;
            
           case KeyEvent.VK_DOWN:
             player1.setDirection(90);
             player1.move();
             break;
         
           case KeyEvent.VK_SPACE:
                 createBombe ();
                 //bombenzähler++;
             Player.explode=false;
                 break;
         }
      
        
         
         return false;
       }
      
        public boolean keyReleased (KeyEvent evt)
        {
            return false;
       }
      
       private int  getLevel()
       {
           return level;
        }
       
        public int collide (Actor player1, Actor sBlock1)
        {
            //player1.removeSelf();
            player1.setDirection(player1.getDirection() + 180);

            return 0;
           
        }
    }

Und das ist die Methode des Actors der vom Spieler gesteuert werden sollte.
Code:
import ch.aplu.jgamegrid.*;
import java.awt.event.KeyEvent;

public class Player extends Actor  implements GGKeyListener
{  
    static boolean explode;
    private MyGameGrid mgg;

   public Player(MyGameGrid mgg)
  {
      super  ("sprites/Hamster.gif");
     this.mgg = mgg;
      Player.explode = false;
     
  }
 
  public void act()
  {
     
  }
  public boolean keyPressed(KeyEvent evt)
  {
    switch (evt.getKeyCode())
    {
      case KeyEvent.VK_UP:
        setDirection(270);
        move ();
        break;
       
      case KeyEvent.VK_RIGHT:
        setDirection(0);
        move ();
        break;
       
      case KeyEvent.VK_LEFT:
        setDirection(180);
        move();
        break;
       
      case KeyEvent.VK_DOWN:
        setDirection(90);
        move();
        break;
    
      case KeyEvent.VK_SPACE:
            explode = true;
            mgg.createBombe ();
            //bombenzähler++;
        Player.explode=false;
            break;
    }
 
   
    
    return true;
  }

  public boolean keyReleased(KeyEvent evt)
  {
    return false;
  }
 
  public static boolean getExplode ()
  {
       return explode;
    }

@Override
public boolean keyHit(int keyCode) {
    return false;
}

     
   
}

Und das ist die Klasse der Bombe die über die Leertaste getriggert werden sollte.
Java:
/**
* Write a description of class Bombe here.
*
* @author (your name)
* @version (a version number or a date)
*/
import ch.aplu.jgamegrid.*;

public class Bombe extends Actor


{
  protected MyGameGrid explode;
 

   public Bombe()
    {
        super (true, "sprites/000.png", 13);
       
    }
  public void act(MyGameGrid bombe)
  {
         
           bombe.showNextSprite ();
       //   GameGrid.delay (300) ;
          bombe.showNextSprite ();
          //   GameGrid.delay (300) ;
          bombe.showNextSprite ();
          //   GameGrid.delay (300) ;
          bombe.showNextSprite ();
          //  GameGrid.delay (300) ;
          bombe.showNextSprite ();
          //  GameGrid.delay (300) ;
          bombe.showNextSprite ();
          //  GameGrid.delay (300) ;
          bombe.showNextSprite ();
          //  GameGrid.delay (300) ;
          bombe.showNextSprite ();
          //  GameGrid.delay (300) ;
          bombe.showNextSprite ();
          //  GameGrid.delay (300) ;
          bombe.showNextSprite ();
          //  GameGrid.delay (300) ;
          bombe.showNextSprite ();
//          GameGrid.delay (300) ;
}
}

Danke im Voraus für eure Antworten
Lg Sphinx64
 
also der fehler besagt : Duplicate local variable gg
versuch einer von den beiden objecten hier umzubennen :
private GameGrid gg;
public static void main(String[] args) {
GameGrid gg = new MyGameGrid();
}
 
also der fehler besagt : Duplicate local variable gg
versuch einer von den beiden objecten hier umzubennen :
private GameGrid gg;
public static void main(String[] args) {
GameGrid gg = new MyGameGrid();
}
Das macht keine Probleme, die haben beide unterschiedlichen Scope und kommen sich damit nicht in die Quere.


Ich hab allerdings auch keine Ahnung, was der Fehler ist, syntaktisch sieht das eigentlich korrekt aus.
Allerdings passen die Zeilennummern nicht, kann also gut sein, dass der wirkliche Code anders aus sieht...
 

Zurück
Oben