Greenfoot mehrere Player Steuern?

1 Antwort

Zeige bitte einmal den Part, wo du die jeweiligen Methoden aufrufst.

import greenfoot.*;

import java.awt.Color;

/**
* Write a description of class Mensch here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Spieler1 extends Spieler
{
private Display anzeige;
class Display extends Actor
{
GreenfootImage bild;

public Display()
{
bild = getImage();
}

public void act()
{

}

public void anzeigen(String pText)
{
loeschen();
bild = new GreenfootImage(pText, 30, null, null);
getImage().drawImage(bild, 8,0);

}

public void loeschen()
{
getImage().clear();
setImage("images/nachricht.png");
}

}
/**
* Act - do whatever the Mensch wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public void act()
{
while (true)
{
Fressen();
}
}
private int addScore = 1;
private int score = 1;

public void setScore(int addScore)
{
score = score + addScore;
}
public int getScore()
{
return score;
}

public void Fressen()
{
TastaturSteuerungPfeiltasten();
Actor Frosch;
getScore();
Frosch = getOneObjectAtOffset(0,0, Frosch.class);
if (Frosch != null)
{
getScore();
//System.out.println("Spieler1 got " + getScore() + " Frog");

if (score == 1)
{
System.out.println("Spieler1 got " + getScore() + " Frog");
}
else
{
System.out.println("Spieler1 got " + getScore() + " Frogs");
}
}
}
public void TastaturSteuerungPfeiltasten()
{
if (Greenfoot.isKeyDown("right"))
{
fahre("rechts");
}
if (Greenfoot.isKeyDown("left"))
{
fahre("links");
}
if (Greenfoot.isKeyDown("up"))
{
fahre("hoch");
}
if (Greenfoot.isKeyDown("down"))
{
fahre("runter");
}
}
public void fahre(String richtung)
{
if(richtung=="rechts")
{
setRotation(getRotation()+0);
fahre();
}
else if (richtung=="links")
{
setRotation(getRotation()-180);
fahre();
setRotation(getRotation()+180);
}
else if (richtung=="hoch")
{
setRotation(getRotation()-90);
fahre();
setRotation(getRotation()+90);
}
else if (richtung=="runter")
{
setRotation(getRotation()+90);
fahre();
setRotation(getRotation()-90);
}
else
{
nachricht("Befehl nicht korrekt!");
}
}

//public void schreibeText(String meinText);
//{
// GreenfootImage image = getImage();
// image.clear();
// image.setColor(Color.BLACK);
// image.drawString(meinText, 10, 10);
//}

/**
* Der Rover dreht sich um 90 Grad in die Richtung, die mit richtung („links“ oder „rechts“) übergeben wurde.
* Sollte ein anderer Text (String) als "rechts" oder "links" übergeben werden, dann erscheint eine entsprechende Meldung auf dem Display.
*/
public void drehe(String richtung)
{
if(richtung=="rechts")
{
setRotation(getRotation()+90);
}
else if (richtung=="links")
{
setRotation(getRotation()-90);
}
else
{
nachricht("Befehl nicht korrekt!");
}
}
private void nachricht(String pText)
{
if(anzeige!=null)
{
anzeige.anzeigen(pText);
Greenfoot.delay(1);
anzeige.loeschen();
}
}

/**
* Der Rover bewegt sich ein Feld in Fahrtrichtung weiter.
* Sollte sich in Fahrtrichtung ein Objekt der Klasse Huegel befinden oder er sich an der Grenze der Welt befinden,
* dann erscheint eine entsprechende Meldung auf dem Display.
*/
public void fahre()
{
int posX = getX();
int posY = getY();

if(huegelVorhanden("vorne"))
{
nachricht("Zu steil!");
}
else if(getRotation()==270 && getY()==1)
{
nachricht("Ich kann mich nicht bewegen");
}
else
{
move(1);
Greenfoot.delay(1);
}

if(posX==getX()&&posY==getY()&&!huegelVorhanden("vorne"))
{
nachricht("Ich kann mich nicht bewegen");
}
}
/**
* Der Rover überprüft, ob sich in richtung ("rechts", "links", oder "vorne") ein Objekt der Klasse Huegel befindet.
* Das Ergebnis wird auf dem Display angezeigt.
* Sollte ein anderer Text (String) als "rechts", "links" oder "vorne" übergeben werden, dann erscheint eine entsprechende Meldung auf dem Display.
*/
public boolean huegelVorhanden(String richtung)
{
int rot = getRotation();

if (richtung=="vorne" && rot==0 || richtung=="rechts" && rot==270 || richtung=="links" && rot==90)
{
if(getOneObjectAtOffset(1,0,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(1,0,Huegel.class)).getSteigung() >30)
{
return true;
}
}

if (richtung=="vorne" && rot==180 || richtung=="rechts" && rot==90 || richtung=="links" && rot==270)
{
if(getOneObjectAtOffset(-1,0,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(-1,0,Huegel.class)).getSteigung() >30)
{
return true;
}
}

if (richtung=="vorne" && rot==90 || richtung=="rechts" && rot==0 || richtung=="links" && rot==180)
{
if(getOneObjectAtOffset(0,1,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(0,1,Huegel.class)).getSteigung() >30)
{
return true;
}

}

if (richtung=="vorne" && rot==270 || richtung=="rechts" && rot==180 || richtung=="links" && rot==0)
{
if(getOneObjectAtOffset(0,-1,Huegel.class)!=null && ((Huegel)getOneObjectAtOffset(0,-1,Huegel.class)).getSteigung() >30)
{
return true;
}

}

if(richtung!="vorne" && richtung!="links" && richtung!="rechts")
{
nachricht("Befehl nicht korrekt!");
}

return false;
}
//public void hinten()
//{
// drehe("rechts");
// drehe("rechts");
// fahre();
// drehe("rechts");
// drehe("rechts");
// }
}
0
@GreenCinco12

War mir nicht sicher welche Methode ^^ Hab aber geschafft gerade so den ganzen Code einzufügen. Ist jetzt der Code aus einem der 3 Spieler, sind aber alle gleich aufgebaut, nur wie gesagt Spieler1 durch Spieler2/3 ausgetauscht und die Tastensteuerung geändert.


Manche Methoden sind aus einem vorgefertigtem Programm aus der Schule wie z.b huegelVorhanden(), fahre(), und drehe()


Hab manche, wie fahre(), dann auf meine bedürfnisse mit dem fahre(Richtung) angepasst.

0
@GreenCinco12

Hmn, nein, ich würde gern die Methode sehen, wo deine Spieler erstellt werden und möglicherweise auch die draw-Schleife, in der die Elemente gerendert werden. Poste das via http://pastebin.com/.

Ein paar Tipps zu deinem bisherigen Code:

  • Entscheide dich für eine Sprache: Englisch oder Deutsch.
  • Die Klasse Display muss bestimmt keine innere Klasse sein.
  • Fasse zwischen deinen Spielerklassen zusammen. Gemeinsamkeiten können in der Basisklasse Spieler definiert werden. Da die Basisklasse sicherlich nie instanziert wird, kann sie als abstract definiert werden.
  • TastaturSteuerungsPfeiltasten kann in der Basisklasse als abstract method deklariert werden. Die Subklassen müssen diese Methode dann explizit überschreiben.
  • Nutze mehrzeilige Kommentare /* ... */ für größere Kommentarblöcke.
  • Nutze ein Enum für die jeweiligen Richtungen.
  • Müssen alle Methoden nach außen hin sichtbar sein? Ordne die Methoden innerhalb der Klasse nach Sichtbarkeit. Sichtbare Inhalte oben, geschützte Inhalte unten.

  • Einen möglichen Ansatz kannst du hier sehen:  http://pastebin.com/WzNuVM9P
0

Wieso funktioniert getY in Greenfoot nicht?

Hallo, wir hatten in der Schule die Aufgabe, in Greenfoot einen Actor im Kreis laufen zu lassen...

Ich hatte es auch einmal geschafft, jetzt wollte ich es nochmal tun, aber irgendwie funktioniert die if(getY) -Funktion nicht...

Hier habe ich mal einen Screenshot gemacht: 

In der ersten if-Funktion dreht sich die Kugel nach oben, in der Zweiten dann nach links. Aber ganu diese zweite if-Funktion wird nicht ausgelöst...

Wieso löst diese Funktion nicht aus?!

...zur Frage

Greenfoot Programmierung Hilfe benötigt?

Ich muss wegen der Schule ein Spiel programmieren wo blöcke in andere Felder zufällig verschoben werden. Allerdings bewegen sich die objekte nur nach rechts gegen den spielfeld rand. Pseudocode: Zufällige Zahl von 0-3 in int form erzeugen und in a speichern If a=0 bewege rechts If a=1 bewege links If a=2 bewege nach oben If a=3 bewege nach unten Bei der codierung gibt es keine fehler nur bewegen sich die objekte halt alle nach rechts und nicht durch das spiel feld hat jemand ne idee warum das so ist und eine lösung? Vielen dank im voraus

...zur Frage

Wie den Fehler in Greenfoot beheben?

Ich habe für die Schule versucht mit Greenfoot (Java) eine Rakete mit Pfeiltasten zu steuern. Wir hatten noch nicht so viele Stunden zu dem Thema und mein ganzer Informatikkurs steht voll auf dem Schlauch. Trotzdem habe ich versucht etwas sinnvolles zu programmieren, allerdings wird mir bei jedem Befehl beim "turn" der Fehler 'Class Expected' angezeigt. Weiß irgendwer warum oder wie ich das Problem beheben kann?

public class Rocket extends Actor

{ /** * Act - do whatever the Rocket wants to do. This method is called whenever * the 'Act' or 'Run' button gets pressed in the environment. */ public void act()

{
    if(Greenfoot.isKeyDown("up")) 
    { 
        int.move;
    } 
    if(Greenfoot.isKeyDown("down"))
    { 
        int.moveBack; 
    } 
         
    if(Greenfoot.isKeyDown("left"))
    { 
        int.turnLeft; 
    } 
    if(Greenfoot.isKeyDown("right"))
    { 
        int.turnRight; 
    } 
    if(Greenfoot.isKeyDown("left") && Greenfoot.isKeyDown("right"))
    { 
        int.turnAround; 
    } 
 
}  

}

Danke für jede Hilfe

MFG euer Freak

...zur Frage

Greenfoot fehler?

Habe Asteroids geschrieben und bekomme den Code nicht gebacken

public void sterben(){ Actor actor = getOneIntersectingObject( Spieler1.class); if(leben==0){ World myWorld = getWorld(); myWorld.removeObject(this);
GameOver gameover = new GameOver(); myWorld.addObject(gameover, myWorld.getWidth()/2, myWorld.getHeight()/2); do{

        }
        
        while(Greenfoot.isKeyDown("space")==false);
        System.out.println("test");

        // }
        // Greenfoot.setWorld(new Space()); 
        // leben=4;
    }

} 

Will das er bei der do while schleife wartet bis space gedrückt wird. wenn ich den Code so ausführe zeigt er nicht mal den gameover Screen an. kann mir wer helfen??

...zur Frage

Was möchtest Du wissen?