Hallo, in der Schule müssen wir ein Ufospiel programmieren, in welchem man mit einem Ufo einem Meteoritenfeld ausweichen muss. (GLOOP)
Klasse Scene: (Verwendungspfeil zu Klasse Meteor und Klasse Ufo)
Klasse Ufo:
Klasse Meteor: (Verwendungspfeil zu Klasse Ufo)
Wenn ihr das Programm startet, wird euch direkt auffallen, was fehlerhaft ist. Das Berechnen, ob ein Meteorit das Ufo berührt.
Wo ist der Fehler, und wie kann ich es richtig machen. Bitte um sofortige Tipps
Klasse Scene: (Verwendungspfeil zu Klasse Meteor und Klasse Ufo)
Java:
import GLOOP.*;
public class Scene{
Meteor hMeteor;
GLKamera hKamera;
GLLicht hLicht1, hLicht2, hLicht3;
Ufo hUfo;
GLTastatur hTastatur;
public Scene(){
hKamera = new GLSchwenkkamera();
hLicht1 = new GLLicht(0,-10000,0);
hLicht2 = new GLLicht(0,10000,0);
hLicht3 = new GLLicht(0,0,10000);
hMeteor = new Meteor(hUfo);
hUfo = new Ufo();
hTastatur = new GLTastatur();
while (true)
{
hMeteor.falle();
if(hTastatur.oben()){
hUfo.verschiebeOben();
}
if(hTastatur.unten()){
hUfo.verschiebeUnten();
}
if(hTastatur.links()){
hUfo.verschiebeLinks();
}
if(hTastatur.rechts()){
hUfo.verschiebeRechts();
}
Sys.warte(3);
}
}
}
Java:
import GLOOP.*;
public class Ufo{
GLTorus hUmriss;
GLKugel hGlas;
GLZylinder hBoden;
GLPrismoid hFluegel1, hFluegel2;
public Ufo(){
hUmriss = new GLTorus(0,-200,0,20,10);
hUmriss.skaliere(2,3,2);
hBoden = new GLZylinder(0,-200,-10,20,10);
hBoden.skaliere(2,3,2);
hBoden.setzeMaterial(GLMaterial.SILBER_POLIERT);
hUmriss.setzeMaterial(GLMaterial.SILBER_POLIERT);
hGlas = new GLKugel(0,-200,10,20);
hGlas.skaliere(2,3,1);
hGlas.setzeMaterial(GLMaterial.RUBIN);
hFluegel1 = new GLPrismoid(40,-230,0,10,10,3,2);
hFluegel1.skaliere(3,9,3);
hFluegel2 = new GLPrismoid(-40,-230,0,10,10,3,2);
hFluegel2.skaliere(3,9,3);
hFluegel1.setzeFarbe(0,0,1);
hFluegel2.setzeFarbe(0,0,1);
hUmriss.drehe(270,0,0,hUmriss.gibX(),hUmriss.gibY(),hUmriss.gibZ());
hBoden.drehe(270,0,0,hUmriss.gibX(),hUmriss.gibY(),hUmriss.gibZ());
hGlas.drehe(270,0,0,hUmriss.gibX(),hUmriss.gibY(),hUmriss.gibZ());
hFluegel1.drehe(270,0,0,hUmriss.gibX(),hUmriss.gibY(),hUmriss.gibZ());
hFluegel2.drehe(270,0,0,hUmriss.gibX(),hUmriss.gibY(),hUmriss.gibZ());
}
public void explodiere(){
hUmriss.verschiebe(1,-1,-0.5);
hUmriss.drehe(0.5,0.5,0.5);
hBoden.verschiebe(-1,1,-0.5);
hBoden.drehe(-0.5,0.5,0.5);
hGlas.verschiebe(1,-1,-0.5);
hGlas.drehe(0.5,-0.5,-0.5);
hFluegel1.verschiebe(1,1,0.5);
hFluegel1.drehe(-0.5,0.5,-0.5);
hFluegel2.verschiebe(1,1,-0.5);
hFluegel2.drehe(0.5,-0.5,0.5);
}
public void verschiebeLinks(){
if(hUmriss.gibX()>-500){
hUmriss.verschiebe(-1,0,0);
hBoden.verschiebe(-1,0,0);
hGlas.verschiebe(-1,0,0);
hFluegel1.verschiebe(-1,0,0);
hFluegel2.verschiebe(-1,0,0);
}
}
public void verschiebeRechts(){
if(hUmriss.gibX()<500){
hUmriss.verschiebe(1,0,0);
hBoden.verschiebe(1,0,0);
hGlas.verschiebe(1,0,0);
hFluegel1.verschiebe(1,0,0);
hFluegel2.verschiebe(1,0,0);
}
}
public void verschiebeOben(){
if(hUmriss.gibY()<300){
hUmriss.verschiebe(0,1,0);
hBoden.verschiebe(0,1,0);
hGlas.verschiebe(0,1,0);
hFluegel1.verschiebe(0,1,0);
hFluegel2.verschiebe(0,1,0);
}
}
public void verschiebeUnten(){
if(hUmriss.gibY()>-300){
hUmriss.verschiebe(0,-1,0);
hBoden.verschiebe(0,-1,0);
hGlas.verschiebe(0,-1,0);
hFluegel1.verschiebe(0,-1,0);
hFluegel2.verschiebe(0,-1,0);
}
}
public double ufoX(){
return hUmriss.gibX();
}
public double ufoY(){
return hUmriss.gibY();
}
public double ufoZ(){
return hUmriss.gibZ();
}
}
Klasse Meteor: (Verwendungspfeil zu Klasse Ufo)
Java:
import GLOOP.*;
public class Meteor
{
GLKugel[] hMeteor;
Ufo hUfo;
double pRadius;
public Meteor(Ufo pUfo)
{
hUfo = pUfo;
hMeteor = new GLKugel[10];
for(int i = 0; i < 10; i++)
{
pRadius = Math.random()*50+20;
hMeteor[i] = new GLKugel(Math.random() * 2000 - 1000, Math.random() * 100 - 500, -Math.random()*10000,pRadius);
}
}
public void falle()
{
{
for(int i = 0; i < 10; i++)
{
hMeteor[i].verschiebe(0,0,3);
if(hMeteor[i].gibZ()>-90){
if((hUfo.ufoX()-hMeteor[i].gibX())*(hUfo.ufoX()-hMeteor[i].gibX())+(hUfo.ufoY()-hMeteor[i].gibY())*(hUfo.ufoY()-hMeteor[i].gibY())<(pRadius+50)*(pRadius+50)){
hUfo.explodiere();
}
}
if(hMeteor[i].gibZ()>500)
{
hMeteor[i].setzePosition(Math.random() * 2000 - 1000, Math.random() * 1000 - 500, -10000);
}
}
}
}
}
Wenn ihr das Programm startet, wird euch direkt auffallen, was fehlerhaft ist. Das Berechnen, ob ein Meteorit das Ufo berührt.
Java:
if(hMeteor[i].gibZ()>-90){
if((hUfo.ufoX()-hMeteor[i].gibX())*(hUfo.ufoX()-hMeteor[i].gibX())+(hUfo.ufoY()-hMeteor[i].gibY())*(hUfo.ufoY()-hMeteor[i].gibY())<(pRadius+50)*(pRadius+50)){
hUfo.explodiere();
Wo ist der Fehler, und wie kann ich es richtig machen. Bitte um sofortige Tipps
Zuletzt bearbeitet: