Guten Abend zusammen,
mein Freund und ich verzweifeln derzeit an unserem Informatik-Projekt und wären froh, etwas Hilfe zu erhalten.
Es geht um die Programmierung des Spieleklassikers 'Pacman' mithilfe der Bibliothek GLOOP, mit der wir diverse Objekte und Methoden für unsere Programmierungen in der Schule nutzen können.
Das Spiel soll letztendlich die Kollisionen überprüfen. Das heißt, wenn die Spielerfigur gegen eine Mauer läuft, soll sie nicht dadurch laufen können (derzeit soll er nur verlangsamt durchlaufen können, da die komplette Unterbrechung ebenfalls nicht ganz funktionieren will...
Ebenso soll die Spielerfigur zurückgesetzt werden, wenn sie gegen die sich zufällig bewegenden Monster läuft und nach dem Einsammeln der 4 Münzen in das nächste Level schalten (das weiterschalten soll vorerst zweitrangig sein).
Jedoch werden mittels 'gibX' und 'gibY' nicht wie gewünscht die Koordinaten übergeben, die dann überprüft werden sollen.
Damit der Programmablauf nicht in einer Schleife hängen bleibt haben wir eine Scheife für alle Überprüfungen gemacht, welche wie folgt lautet:
Die for-Schleife soll einen Array durchlaufen, der alle Koordinaten der 50*50 großen Würfel enthalten soll. Mit einem Radius, in den der Spieler nicht rein läuft, wäre uns schon geholfen, jedoch hakt der ganze Spielablauf und der Spieler kann einfach durch die Objekte durchlaufen (bei erhöhtem Sys.warte() kommt man dennoch hindurch).
Ebenso sollen die Münzen, nachdem sie berührt werden, ihre Sichtbarkeit (vorerst) ausschalten (und später eine Variable hochzählen).
Jedoch scheint immer etwas falsch berechnet zu werden und ein Teil der Münzen ist entweder schon beim Start unsichtbar, oder es setzen mehrere Münzen ihre Sichtbarkeit aus, wenn nur ein berührt wird.
Über Tipps, wie wir die Kollision der Münzen und der Mauern testen können, wären wir mit unseren derzeit nicht sehr großen Java-Kenntnissen sehr dankbar.
Vielen Dank schon für eure Bemühungen, euch mit diesem Thema auseinander zu setzen.
Hier noch ein Klassendiagramm zur Struktur des Projektes
Viele Grüße
Aragorm und setX
mein Freund und ich verzweifeln derzeit an unserem Informatik-Projekt und wären froh, etwas Hilfe zu erhalten.
Es geht um die Programmierung des Spieleklassikers 'Pacman' mithilfe der Bibliothek GLOOP, mit der wir diverse Objekte und Methoden für unsere Programmierungen in der Schule nutzen können.
Das Spiel soll letztendlich die Kollisionen überprüfen. Das heißt, wenn die Spielerfigur gegen eine Mauer läuft, soll sie nicht dadurch laufen können (derzeit soll er nur verlangsamt durchlaufen können, da die komplette Unterbrechung ebenfalls nicht ganz funktionieren will...
Ebenso soll die Spielerfigur zurückgesetzt werden, wenn sie gegen die sich zufällig bewegenden Monster läuft und nach dem Einsammeln der 4 Münzen in das nächste Level schalten (das weiterschalten soll vorerst zweitrangig sein).
Jedoch werden mittels 'gibX' und 'gibY' nicht wie gewünscht die Koordinaten übergeben, die dann überprüft werden sollen.
Damit der Programmablauf nicht in einer Schleife hängen bleibt haben wir eine Scheife für alle Überprüfungen gemacht, welche wie folgt lautet:
Java:
import GLOOP.*;
public class ABKSchleife
{
GLTastatur tastatur;
Muenzen1 muenzen1;
Muenzen2 muenzen2;
Muenzen3 muenzen3;
Muenzen4 muenzen4;
Spieler spieler;
Monster1 monster1;
Monster2 monster2;
Monster3 monster3;
Monster4 monster4;
Level1 level1;
Level2 level2;
Level3 level3;
public ABKSchleife()
{
tastatur = new GLTastatur();
muenzen1 = new Muenzen1();
muenzen2 = new Muenzen2();
muenzen3 = new Muenzen3();
muenzen4 = new Muenzen4();
spieler = new Spieler();
monster1 = new Monster1();
monster2 = new Monster2();
monster3 = new Monster3();
monster4 = new Monster4();
level1 = new Level1();
level2 = new Level2();
level3 = new Level3();
while(!tastatur.esc())
{
//Muenzendrehung
muenzen1.zyl1.drehe(0,0,10);
muenzen2.zyl2.drehe(0,0,10);
muenzen3.zyl3.drehe(0,0,10);
muenzen4.zyl4.drehe(0,0,10);
//Monster 1-4
int richtung = (int)(Math.random()*12);
if (richtung==0 || richtung==4 || richtung==8)
{
monster1.vorne();
monster2.hinten();
monster3.links();
monster4.rechts();
}
if (richtung==1 || richtung==5 || richtung==9)
{
monster1.hinten();
monster2.links();
monster3.rechts();
monster4.vorne();
}
if (richtung==2 || richtung==6 || richtung==10)
{
monster1.links();
monster2.rechts();
monster3.vorne();
monster4.hinten();
}
if (richtung==3 || richtung==7 || richtung==11)
{
monster1.rechts();
monster2.vorne();
monster3.hinten();
monster4.links();
}
//Bewegung
if(tastatur.oben())
{
spieler.steuerungVorne();
}
if(tastatur.unten())
{
spieler.steuerungHinten();
}
if(tastatur.links())
{
spieler.steuerungLinks();
}
if(tastatur.rechts())
{
spieler.steuerungRechts();
}
spieler.spieler.gibX();
spieler.spieler.gibY();
muenzen1.zyl1.gibX();
muenzen2.zyl2.gibX();
muenzen3.zyl3.gibX();
muenzen4.zyl4.gibX();
muenzen1.zyl1.gibY();
muenzen2.zyl2.gibY();
muenzen3.zyl3.gibY();
muenzen4.zyl4.gibY();
for(int i=0; i<level1.w.length; i++)
{
level1.w[i].gibX();
}
for(int i=0; i<level1.w.length; i++)
{
level1.w[i].gibY();
if(level1.w[i].gibY()+25 >= spieler.spieler.gibY() && level1.w[i].gibX()+25 >= spieler.spieler.gibX())
{
Sys.warte();
}
else
{
continue;
}
}
for(int i=0; i<level1.rand.length; i++)
{
level1.rand[i].gibX();
}
for(int i=0; i<level1.rand.length; i++)
{
level1.rand[i].gibY();
if(level1.rand[i].gibY()+25 >= spieler.spieler.gibY() && level1.rand[i].gibX()+25 >= spieler.spieler.gibX())
{
Sys.warte();
}
else
{
continue;
}
}
if(muenzen1.zyl1.gibX() <= spieler.spieler.gibX() || muenzen1.zyl1.gibY() <= spieler.spieler.gibY())
{
muenzen1.zyl1.setzeSichtbarkeit(false);
}
if(muenzen2.zyl2.gibX() <= spieler.spieler.gibX() || muenzen2.zyl2.gibY() <= spieler.spieler.gibY())
{
muenzen2.zyl2.setzeSichtbarkeit(false);
}
if(muenzen3.zyl3.gibX() <= spieler.spieler.gibX() || muenzen3.zyl3.gibY() <= spieler.spieler.gibY())
{
muenzen3.zyl3.setzeSichtbarkeit(false);
}
if(muenzen4.zyl4.gibX() <= spieler.spieler.gibX() || muenzen4.zyl4.gibY() <= spieler.spieler.gibY())
{
muenzen4.zyl4.setzeSichtbarkeit(false);
}
Sys.warte();
}
}
}
Die for-Schleife soll einen Array durchlaufen, der alle Koordinaten der 50*50 großen Würfel enthalten soll. Mit einem Radius, in den der Spieler nicht rein läuft, wäre uns schon geholfen, jedoch hakt der ganze Spielablauf und der Spieler kann einfach durch die Objekte durchlaufen (bei erhöhtem Sys.warte() kommt man dennoch hindurch).
Ebenso sollen die Münzen, nachdem sie berührt werden, ihre Sichtbarkeit (vorerst) ausschalten (und später eine Variable hochzählen).
Jedoch scheint immer etwas falsch berechnet zu werden und ein Teil der Münzen ist entweder schon beim Start unsichtbar, oder es setzen mehrere Münzen ihre Sichtbarkeit aus, wenn nur ein berührt wird.
Über Tipps, wie wir die Kollision der Münzen und der Mauern testen können, wären wir mit unseren derzeit nicht sehr großen Java-Kenntnissen sehr dankbar.
Vielen Dank schon für eure Bemühungen, euch mit diesem Thema auseinander zu setzen.
Hier noch ein Klassendiagramm zur Struktur des Projektes

Viele Grüße
Aragorm und setX
Zuletzt bearbeitet: