Danke habe es gefunden: ich habe bis 21 die Wände gebaut, jedoch geht es nur bis 20. Der rechte Ramd wird etwas abgeschnitten. Kann ich die Darstellung etwas nach rechts eeweitern. Damit es größer ist als 800x600das mit dem layout habe ich dir schon mal beschrieben.
A meinst sicherlich den Geist nicht den pacman.Hallo, ich suche Tipps:
a) wie kann ich das Pacman (Gif) automatisch in Sichtrichtung des Pacmans bewegen lassen kann (stehen bleibt wenn vor ihm Wand)(ohne Taste gedrückt),
-> ich könnte es wenn er die Wand schneiden würde, was er aber nicht tun sollte.
b) wie ich machen kann, dass der Pacman sich nur dreht wenn man 1. Pfeiltaste drückt UND 2. in dieser Richtung keine Wand ist.(Rechtecke)
c) wie ich einen Geist mache, der den Pacman automatisch verfolgt
Es wäre nett, wenn mir dies jemand zeigen würde.
Dann ändere die Fenster Größe in der Klasse Spiel.Danke habe es gefunden: ich habe bis 21 die Wände gebaut, jedoch geht es nur bis 20. Der rechte Ramd wird etwas abgeschnitten. Kann ich die Darstellung etwas nach rechts eeweitern. Damit es größer ist als 800x600
Das ist #1 von diesem Thema. Das habe ich denke ich mit Konrad schon geklärt gehabt. Da hast du dich anscheinend verschaut.A meinst sicherlich den Geist nicht den pacman.
Der pacman macht das doch. Du gibst in am Anfang die Richtung rechts und da ist eine Wand. Also wartet er.
Ah okay, mache ich.Dann ändere die fester Größe in der Klasse Spiel.
//Methode in KLASSE GEIST (neuste Version): Soll prüfen ob pacman einen bestimmten GEIST (geist1, geist2) schneidet.
public void GeistWirdGefressen(GEIST geist){
for(PACMAN r: pacman.pacman){ //<-- Hier Fehler
if(Schneidet(r)){ //<-- Hier Fehler
if(this.pacman.nenneVerwundbarkeit() == true){
this.geist1.setzeMittelpunkt(400, 300); //<-- hier Fehler
}
else {
this.pacman.pacman.setzeMittelpunkt(315, 285);
}
}
}
}
Das habe ich auch gesagt wenn du in der Geist Klasse prüfen willst ob der pacman den Geist berührt brauchst du die Instanz des Pacman in der Geist Klasse. Die du nicht hast.Das ist #1 von diesem Thema. Das habe ich denke ich mit Konrad schon geklärt gehabt. Da hast du dich anscheinend verschaut.
Ah okay, mache ich.
Jedoch habe ich immer noch ein Problem: bei RandomMoves (GEIST): Der Geist dreht sich komisch und geht tendenziell immer in die selbe Richtung. Genauso wie Geist2. Ich will jedoch, dass er sich so bewegt wie Pacman, halt nur ohne Pfeiltasten (Quasi dass statt den Pfeiltasten eine Randomzahl=). Außerdem wollte ich noch eine Methode, die den Geist Pacman verfolgen lassen soll. Ich habe mir schon einige Gedanken gemacht, jedoch weiß ich nicht wie ich das umsetzen kann. Ich habe schon überlegt mit der Methode berechneAbstand() der Klasse BILD.
Ah sorry, da habe ich einen Fehler gemacht. Obriges ist schon in Klasse LABYRINTH. Trotzdem treten diese Fehler auf. (Jetzt nurnoch bei Schneidet und PACMAN: r)Das habe ich auch gesagt wenn du in der Geist Klasse prüfen willst ob der pacman den Geist berührt brauchst du die Instanz des Pacman in der Geist Klasse. Die du nicht hast.
Teste das in der labyrinth Klasse da hast du beide Instanzen Geist und pacman.
public boolean Schneidet(Raum raum){
return this.geist.beruehrt(raum);
}
public void GeistWirdGefressen(BILD geist){
for (PACMAN r: pacman){ //<-- Fehler bei "pacman"
if(geist1.Schneidet(r)){ //<-- bei "r" Fehlermeldung: incompatible types: PACMAN cannot be converted to ae.raum
if(this.pacman.nenneVerwundbarkeit() == true){
this.geist1.setzeMittelpunkt(400, 300);
}
else {
this.pacman.pacman.setzeMittelpunkt(315, 285);
}
}
}
}
Nein hast du nicht.Diesen getter habe ich doch schon in der Klasse Geist:
Java:public boolean Schneidet(Raum raum){ return this.geist.beruehrt(raum); }
Java:public void GeistWirdGefressen(BILD geist){ for (PACMAN r: pacman){ //<-- Fehler bei "pacman" if(geist1.Schneidet(r)){ //<-- bei "r" Fehlermeldung: incompatible types: PACMAN cannot be converted to ae.raum if(this.pacman.nenneVerwundbarkeit() == true){ this.geist1.setzeMittelpunkt(400, 300); } else { this.pacman.pacman.setzeMittelpunkt(315, 285); } } } }
hä, wie dann? So habe ich es doch bei den Rechtecken und Pacman auch gemachtNein hast du nicht.
@Override
public void tick(){
this.PacmanVerschieben();
this.geist1.RandomMoves();
this.geist2.RandomMoves();
// TEST
if (links) {
System.out.println("Richtung: " + Richtung);
System.out.println("neu: links");
} else if (rechts) {
System.out.println("Richtung: " + Richtung);
System.out.println("neu: rechts");
} else if (oben) {
System.out.println("Richtung: " + Richtung);
System.out.println("neu: oben");
} else if (unten) {
System.out.println("Richtung: " + Richtung);
System.out.println("neu: unten");
}
if(GeistWirdGefressen(geist1) || GeistWirdGefressen(geist2)){
// Game Over
}
}
public void GeistWirdGefressen(GEIST geist){
// wenn du das hier mit einer For prüfen willst musst du die Geister in ein Attay oder Liste packen
if(pacman.Schneidet(geist.getGeist())){
if(this.pacman.nenneVerwundbarkeit() == true){
geist.setzeMittelpunkt(400, 300);
return true; // Du musst wissen was hier richtig ist True oder False
}
else {
this.pacman.pacman.sesetzeMittelpunkt(315, 285);
return false; // Du musst wissen was hier richtig ist True oder False
}
}
}
import ea.*;
/**
* Beschreiben Sie hier die Klasse GEIST.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class GEIST
{
private BILD geist;
private String Richtung;
//Benötigt für Prüfung der Schneidungen
private LEVEL Levelprüfung;
private PACMAN pacmanprüfung;
//Legt die zukünftige gewollte Richtung vom Geist fest.
private boolean rechts;
private boolean links;
private boolean oben;
private boolean unten;
public GEIST(){
this.geist = new BILD(285,225,"GEIST.gif");
this.Levelprüfung = new LEVEL(); // falsch das ist nicht das Objekt was in LABYRINTH erstellt wurde.
this.pacmanprüfung = new PACMAN(); // falsch das ist ein neues Objekt nicht der Pacman der in LABYRINTH erstellt wurde.
this.pacmanprüfung.SetzeSichtbar(false);
// Gibt dem Geist eine Random Anfangsrichtung
int Zahl1 = this.RandomZahl(4);
if (Zahl1 == 1){
this.Richtung = "rechts";
}
else if (Zahl1 == 2){
this.Richtung = "links";
}
else if (Zahl1 == 3){
this.Richtung = "oben";
}
else if (Zahl1 == 4){
this.Richtung = "unten";
}
}
// getter da dein Bild private ist, dein Pacman in der Klasse Pacman ist public deshalb getter.
public Bild getGeist(){
return geist;
}
Klaus123456789 hat gesagt.:
Diesen getter habe ich doch schon in der Klasse Geist:
Java:
public boolean Schneidet(Raum raum){
return this.geist.beruehrt(raum);
}
Java:
public void GeistWirdGefressen(BILD geist){
for (PACMAN r: pacman){ //was soll das du hast nur einen Pacman
if(geist1.Schneidet(r)){ //r ist kein Raum objekt das ist dein Bild in der Klasse Pacman.
//r.pacman ist das Raumobjekt aus der Klasse.
// da es public ist kannst du ohne getter darauf zugreifen.
this.geist1.setzeMittelpunkt(400, 300);
}
else {
this.pacman.pacman.setzeMittelpunkt(315, 285);
}
}
}
}
import ea.*;
/**
* Beschreiben Sie hier die Klasse GEIST.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class GEIST {
private BILD geist;
private LEVEL Levelprüfung;
private String Richtung;
//Benötigt für Prüfung der Schneidungen
int tickSteps = 0;
public BILD getGeist() {
return geist;
}
public GEIST(LEVEL level) {
this.geist = new BILD(285, 225, "GEIST.gif");
this.Levelprüfung = level;
// Gibt dem Geist eine Random Anfangsrichtung
setRandomRichtung();
}
public int RandomZahl(int maxZahl) {
int zahl = (int) ((Math.random()) * maxZahl + 1);
return zahl;
}
public void setRandomRichtung() {
int Zahl1 = this.RandomZahl(4);
if (Zahl1 == 1) {
this.Richtung = "rechts";
} else if (Zahl1 == 2) {
this.Richtung = "links";
} else if (Zahl1 == 3) {
this.Richtung = "oben";
} else if (Zahl1 == 4) {
this.Richtung = "unten";
}
}
public void DrehenAuf(int Winkel) {
this.geist.setzeDrehwinkel(Winkel);
}
public void RandomMoves() {
if (tickSteps > 30) {
setRandomRichtung();
tickSteps = 0;
}
tickSteps++;
if (Richtung == "oben") {
DrehenAuf(90);
geist.verschiebenUm(0, -3);
if (testSchneiden(geist)) {
geist.verschiebenUm(0, +3);
geist.verschiebenUm(4, 0);
if (testSchneiden(geist) == false) {
Richtung = "rechts";
geist.verschiebenUm(-4, 0);
} else {
geist.verschiebenUm(-4, 0);
if (this.testSchneiden(geist) == false) {
Richtung = "links";
geist.verschiebenUm(4, 0);
} else {
DrehenAuf(270);
geist.verschiebenUm(0, 3);
Richtung = "unten";
}
}
}
}
if (Richtung == "unten") {
DrehenAuf(270);
geist.verschiebenUm(0, 3);
if (testSchneiden(geist)) {
geist.verschiebenUm(0, -3);
geist.verschiebenUm(4, 0);
if (testSchneiden(geist) == false) {
Richtung = "rechts";
geist.verschiebenUm(-4, 0);
} else {
geist.verschiebenUm(-4, 0);
if (this.testSchneiden(geist) == false) {
Richtung = "links";
geist.verschiebenUm(4, 0);
} else {
DrehenAuf(90);
geist.verschiebenUm(0, -3);
Richtung = "unten";
}
}
}
}
if (Richtung == "rechts") {
DrehenAuf(270);
geist.verschiebenUm(3, 0);
if (testSchneiden(geist)) {
geist.verschiebenUm(-3, 0);
geist.verschiebenUm(0, 4);
if (testSchneiden(geist) == false) {
Richtung = "unten";
geist.verschiebenUm(0, -4);
} else {
geist.verschiebenUm(0, -4);
if (this.testSchneiden(geist) == false) {
Richtung = "oben";
geist.verschiebenUm(0, 4);
} else {
DrehenAuf(90);
geist.verschiebenUm(-3, 0);
Richtung = "links";
}
}
}
}
if (Richtung == "links") {
DrehenAuf(180);
geist.verschiebenUm(-3, 0);
if (testSchneiden(geist)) {
geist.verschiebenUm(3, 0);
geist.verschiebenUm(0, 4);
if (testSchneiden(geist) == false) {
Richtung = "unten";
geist.verschiebenUm(0, -4);
} else {
geist.verschiebenUm(0, -4);
if (this.testSchneiden(geist) == false) {
Richtung = "oben";
geist.verschiebenUm(0, 4);
} else {
DrehenAuf(90);
geist.verschiebenUm(3, 0);
Richtung = "rechts";
}
}
}
}
}
public boolean Schneidet(Raum raum) {
return this.geist.beruehrt(raum);
}
public boolean testSchneiden(BILD geist) {
//alle Rechtecke aus LEVEL werden geprüft
for (RECHTECK r : Levelprüfung.wandstück) {
//If Schleife: Geist-Schneidet Raum methode
if (Schneidet(r)) {
return true;
}
}
return false;
}
}
Wie kann ich dies dann lösen? Zeile 3,4Java:public GEIST(){ this.geist = new BILD(285,225,"GEIST.gif"); this.Levelprüfung = new LEVEL(); // falsch das ist nicht das Objekt was in LABYRINTH erstellt wurde. this.pacmanprüfung = new PACMAN(); // falsch das ist ein neues Objekt nicht der Pacman der in LABYRINTH erstellt wurde. this.pacmanprüfung.SetzeSichtbar(false);
Vielen, Vielen Dank, das ist mir eine sehr große Hilfe, ich werde demnächst deine Vorschläge umsetzen und austesten. Es ist mir wirklich eine sehr große Hilfe, vor allem weil ich erst seit kurzem mit Java angefangen habe.Hallo habe deine Geiste mal angepasst so sollten sie sich sinnvoller bewegen.
Nicht wie bei dir immer den Weg nach oben zum Rand suchen . Warum das so bei dir so solltest du selber erkennen .
Denn wenn eine Wand in Laufrichtung erkannt wurde, wurde immer als erster aufweicht der Weg nach oben genommen.
Dem Konstruktor der Klasse musst du jetzt auch das Layout was in der LABYRINTH Klasse erstellt wird mitgeben. Somit hat der Geist auch die richtige Labyrinth Instanz und keine neue.
Java:import ea.*; /** * Beschreiben Sie hier die Klasse GEIST. * * @author (Ihr Name) * @version (eine Versionsnummer oder ein Datum) */ public class GEIST { private BILD geist; private LEVEL Levelprüfung; private String Richtung; //Benötigt für Prüfung der Schneidungen int tickSteps = 0; public BILD getGeist() { return geist; } public GEIST(LEVEL level) { this.geist = new BILD(285, 225, "GEIST.gif"); this.Levelprüfung = level; // Gibt dem Geist eine Random Anfangsrichtung setRandomRichtung(); } public int RandomZahl(int maxZahl) { int zahl = (int) ((Math.random()) * maxZahl + 1); return zahl; } public void setRandomRichtung() { int Zahl1 = this.RandomZahl(4); if (Zahl1 == 1) { this.Richtung = "rechts"; } else if (Zahl1 == 2) { this.Richtung = "links"; } else if (Zahl1 == 3) { this.Richtung = "oben"; } else if (Zahl1 == 4) { this.Richtung = "unten"; } } public void DrehenAuf(int Winkel) { this.geist.setzeDrehwinkel(Winkel); } public void RandomMoves() { if (tickSteps > 30) { setRandomRichtung(); tickSteps = 0; } tickSteps++; if (Richtung == "oben") { DrehenAuf(90); geist.verschiebenUm(0, -3); if (testSchneiden(geist)) { geist.verschiebenUm(0, +3); geist.verschiebenUm(4, 0); if (testSchneiden(geist) == false) { Richtung = "rechts"; geist.verschiebenUm(-4, 0); } else { geist.verschiebenUm(-4, 0); if (this.testSchneiden(geist) == false) { Richtung = "links"; geist.verschiebenUm(4, 0); } else { DrehenAuf(270); geist.verschiebenUm(0, 3); Richtung = "unten"; } } } } if (Richtung == "unten") { DrehenAuf(270); geist.verschiebenUm(0, 3); if (testSchneiden(geist)) { geist.verschiebenUm(0, -3); geist.verschiebenUm(4, 0); if (testSchneiden(geist) == false) { Richtung = "rechts"; geist.verschiebenUm(-4, 0); } else { geist.verschiebenUm(-4, 0); if (this.testSchneiden(geist) == false) { Richtung = "links"; geist.verschiebenUm(4, 0); } else { DrehenAuf(90); geist.verschiebenUm(0, -3); Richtung = "unten"; } } } } if (Richtung == "rechts") { DrehenAuf(270); geist.verschiebenUm(3, 0); if (testSchneiden(geist)) { geist.verschiebenUm(-3, 0); geist.verschiebenUm(0, 4); if (testSchneiden(geist) == false) { Richtung = "unten"; geist.verschiebenUm(0, -4); } else { geist.verschiebenUm(0, -4); if (this.testSchneiden(geist) == false) { Richtung = "oben"; geist.verschiebenUm(0, 4); } else { DrehenAuf(90); geist.verschiebenUm(-3, 0); Richtung = "links"; } } } } if (Richtung == "links") { DrehenAuf(180); geist.verschiebenUm(-3, 0); if (testSchneiden(geist)) { geist.verschiebenUm(3, 0); geist.verschiebenUm(0, 4); if (testSchneiden(geist) == false) { Richtung = "unten"; geist.verschiebenUm(0, -4); } else { geist.verschiebenUm(0, -4); if (this.testSchneiden(geist) == false) { Richtung = "oben"; geist.verschiebenUm(0, 4); } else { DrehenAuf(90); geist.verschiebenUm(3, 0); Richtung = "rechts"; } } } } } public boolean Schneidet(Raum raum) { return this.geist.beruehrt(raum); } public boolean testSchneiden(BILD geist) { //alle Rechtecke aus LEVEL werden geprüft for (RECHTECK r : Levelprüfung.wandstück) { //If Schleife: Geist-Schneidet Raum methode if (Schneidet(r)) { return true; } } return false; } }
Tipp: halte dich an die Names Convention von Java . Das habe ich nicht angepasst.
Naming Conventions in Java - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.www.geeksforgeeks.org
Ich verstehe dass mit Raum nicht. Das habe ich noch nicht gelernt. Wie mache ich dann diese Klasse GeistWirdGefressen?Java:Klaus123456789 hat gesagt.: Diesen getter habe ich doch schon in der Klasse Geist: Java: public boolean Schneidet(Raum raum){ return this.geist.beruehrt(raum); } Java: public void GeistWirdGefressen(BILD geist){ for (PACMAN r: pacman){ //was soll das du hast nur einen Pacman if(geist1.Schneidet(r)){ //r ist kein Raum objekt das ist dein Bild in der Klasse Pacman. //r.pacman ist das Raumobjekt aus der Klasse. // da es public ist kannst du ohne getter darauf zugreifen. this.geist1.setzeMittelpunkt(400, 300); } else { this.pacman.pacman.setzeMittelpunkt(315, 285); } } } }
boolean testGeistPacman (GEIST geist){
return geist.Schneidet(pacman.pacman); //"pacman" ist die Instanz der Kasse
// und "pacman" heist auch das Atrtribut "Bild" in der Klasse.
// deshalb pacman.pacman
// "Bild" ist ja das Objekt was von Raum extendet also dein RaumObjekt.
}
du musst die Methode SpielStarten() aufrufen, dann startet sich der tickeres bewegt sich nichts du hast den Ticker vergessen zu starten.
die ist in Labyrinth die Methode.in welcher Klasse soll die Methode sein .
Ich arbeite nicht mit BlueJ sondern mit IntelliJ und starte den Labyrint Konstruktor
// ist immer true
if (this.level.nenneAnzahlKleinePunkte() == 0){
this.tickerStoppen();
this.PacmanStartposition();
this.GeistStartposition(geist1);
this.GeistStartposition(geist2);
//this.nächstesLevel(); oder übergangsweise:
this.level.level2();
this.NeuesLevel.setzeSichtbar(true);
this.CountdownVon3();
this.NeuesLevel.setzeSichtbar(false);
this.tickerNeuStarten(30);
}
Sind schon sichtbar. Werden im Konstruktor in der Klasse LEVEL sichtbar gemacht.Deine Punkte sind nicht sichtbar deshalb bleibst du in deiner Ticker Methode hängen.
das if ist immer True
Java:// ist immer true if (this.level.nenneAnzahlKleinePunkte() == 0){ this.tickerStoppen(); this.PacmanStartposition(); this.GeistStartposition(geist1); this.GeistStartposition(geist2); //this.nächstesLevel(); oder übergangsweise: this.level.level2(); this.NeuesLevel.setzeSichtbar(true); this.CountdownVon3(); this.NeuesLevel.setzeSichtbar(false); this.tickerNeuStarten(30); }
public int nenneAnzahlKleinePunkte(){
int counter = 0;//5- AnzahlPunkte insgesamt
for(int i=0; i<5;i++){
if (this.kleinepunkte[i].nenneSichtbar() == true){
counter++;
}
}
return counter;
}
public void PunkteSetzen() {
for(int i= 1; i>=567;i++){
for(int e=1; e>=19;e++){
this.Punktsetzen(i,e+1,2);
}
}
}
das mag sein ein sinnvolles setzen machst du nicht.
schaue mit dem Debugger der counter wird nicht hoch gezählt. //Warum wird der counter nicht hochgezählt, müsste doch eigentlich funktionieren.
Code:public int nenneAnzahlKleinePunkte(){ int counter = 0;//5- AnzahlPunkte insgesamt for(int i=0; i<5;i++){ if (this.kleinepunkte[i].nenneSichtbar() == true){ counter++; } } return counter; }
diese Methode wird nicht benutzt nie aufgrerufen //Diese geht auch noch nicht, hat ein Freund versucht.
Code:public void PunkteSetzen() { for(int i= 1; i>=567;i++){ for(int e=1; e>=19;e++){ this.Punktsetzen(i,e+1,2); } } }
Kann ich nicht mit BlueJ öffnen: The folder does not contain a BlueJ project.hier mal etwas von mir schaue es dir an.
public void PacmanSchneidetPunktPrüfung() {
//5 = AnzahlKleinePunkte
for (int i = 0; i < 5; i++) {
if (this.pacman.Schneidet(level.kleinepunkte[i]) || this.level.kleinepunkte[i].nenneSichtbar() == true) {
this.level.kleinepunkte[i].setzeSichtbar(false);
this.Punktefresssound.play();
this.punkte++;
}
}
Das Problem hast du immer noch. Schaue wo das ist. Tipp +4 / -4Ps. Deine Steuerung des Pacman ist auch nicht gut lasse ihn doch mal oben oder unten an eine Wand laufen und versuche zurück zugehen nicht rechts oder links.
Leider noch nie gehört :Mal eine Frage das Word Debugger ist dir hoffentlich nicht fremd.
BlueJ wird auch einen Debugger haben und du wirst BreakPoints setzen können.
Denn da hättest du gesehen das deine Punkte nicht sichtbar sind.
Ich setzte die ja nur aus unsichtbar wennn sie vom pacman gefressen werden. Und das gehört ja so. Ich finde den fehler nichtJava:public void PacmanSchneidetPunktPrüfung() { //5 = AnzahlKleinePunkte for (int i = 0; i < 5; i++) { if (this.pacman.Schneidet(level.kleinepunkte[i]) || this.level.kleinepunkte[i].nenneSichtbar() == true) { this.level.kleinepunkte[i].setzeSichtbar(false); this.Punktefresssound.play(); this.punkte++; } }
hier scheint dein Problem zu sein. Du setzt die Punkte auf unsichtbar.
überlege ob das oder hier richtig ist.
Dann wird es Zeit.Leider noch nie gehört :
Ja aber was macht das OderIch setzte die ja nur aus unsichtbar wennn sie vom pacman gefressen werden. Und das gehört ja so. Ich finde den fehler nicht
//-----------------------
void pursuePacman(PACMAN pacman) {
int xGoast = geist.berechneAbstandX(pacman.pacman);
int yGoast = geist.berechneAbstandY(pacman.pacman);
if (Math.abs(xGoast) < 30 || Math.abs(yGoast) < 30) {
if (Math.abs(xGoast) > Math.abs(yGoast)) {
Richtung = xGoast <= 0 ? "rechts" : "links";
moveGost();
} else {
Richtung = yGoast <= 0 ? "unten" : "oben";
moveGost();
}
} else {
RandomMoves();
}
}
//--------------------
public void RandomMoves() {
if (this.tickSteps > 30) {
this.setRandomRichtung();
this.tickSteps = 0;
}
this.tickSteps++;
moveGost();
}
//--------------------
void moveGost() {
if (this.Richtung == "oben") {
this.geist.verschiebenUm(0, -3);
if (this.testSchneiden(geist)) {
this.geist.verschiebenUm(0, +3);
this.geist.verschiebenUm(4, 0);
if (this.testSchneiden(geist) == false) {
this.Richtung = "rechts";
this.geist.verschiebenUm(-4, 0);
} else {
this.geist.verschiebenUm(-4, 0);
....
Ein einfaches primitves verfolgen etwa so.
Java://----------------------- void pursuePacman(PACMAN pacman) { int xGoast = geist.berechneAbstandX(pacman.pacman); int yGoast = geist.berechneAbstandY(pacman.pacman); if (Math.abs(xGoast) < 30 || Math.abs(yGoast) < 30) { if (Math.abs(xGoast) > Math.abs(yGoast)) { Richtung = xGoast <= 0 ? "rechts" : "links"; moveGost(); } else { Richtung = yGoast <= 0 ? "unten" : "oben"; moveGost(); } } else { RandomMoves(); } } //-------------------- public void RandomMoves() { if (this.tickSteps > 30) { this.setRandomRichtung(); this.tickSteps = 0; } this.tickSteps++; moveGost(); } //-------------------- void moveGost() { if (this.Richtung == "oben") { this.geist.verschiebenUm(0, -3); if (this.testSchneiden(geist)) { this.geist.verschiebenUm(0, +3); this.geist.verschiebenUm(4, 0); if (this.testSchneiden(geist) == false) { this.Richtung = "rechts"; this.geist.verschiebenUm(-4, 0); } else { this.geist.verschiebenUm(-4, 0); ....
//Warum funktioniert folgendes nicht? Ich will dass wenn man diese Methode aufruft man true bekommt, wenn der Kleinepunkt ein Wandstück schneidet
//In klasse LEVEL
public boolean Schneidet(Raum raum){
return beruehrt(raum);
}
public boolean SchneidetKleinerPunktWand(LEVEL kleinepunkte){
for(RECHTECK r: this.wandstück){
if(kleinepunkte.Schneidet(r)){
return true;
}
}
}
Mit dem Hängenbleiben in der tick schleife gelöst ja.. statt oder || musste und && geschrieben werden.Interessant wäre erstmal zu wissen ob du das problem mit den Punkten gelöst hast. Auch ob das Problem mit dem pacman oben oder unten an der Wand und der user Tipp einfach nur in umgekehrter Richtung nicht rechts oder links.