Greenfoot mehrere Player Steuern?

...komplette Frage anzeigen

1 Antwort

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

Antwort bewerten Vielen Dank für Deine Bewertung
GreenCinco12 28.11.2016, 19:44
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 28.11.2016, 19:47
@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
regex9 29.11.2016, 00:42
@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

Was möchtest Du wissen?