Hallo Leute, ich versuche grad SpaceInvader zu programmienen. Hab dazu ein Raumschiff, der ganz unten am Bildschirm platziert ist. Dieser muss herunterfallende Gegner abschießen.
Damit die Gegner auch an verschiedenen X-Koordinaten auftauchen, habe ich Math.random() benutzt. Zwar funktioniert dies, aber irgendwie habe ich das Gefühl, dass die Gegner nur von der linken Hälfte des Bildschirms fallen...
Zudem kann mein Raumschiff manchmal die Gegner nicht treffen, wenn ich z.B. x=x+10 setze (raumschiff bewegt sich nach rechts). Nur wenn ich x=x+1 setze, kriegt das Raumschiff auch die Koordinaten von den Gegnern, die ja per Zufall generiert werden. Ich möchte aber nicht dass das Raumschiff sich mit 1PS nach rechts/links bewegt sondern mit 10 oder 20z.B.
Ich hatte das so gemacht, dass ich die generierte Zahl geprüft habe, ob sie durch 2 teilbar ist oder sagen wir mal durch 10. Wenn nicht, sollte z.B. 5 abgezogen werden, wenn Rest = 5..
also Bsp:
Zufallszahl=156
156%10=6
156-6=150
Wenn ich mich jetzt mit 10PS bewege, müsste ich doch die X-Koordinaten von den herunterfallenden Gegner erwischen können..nur irgendwie ist das nicht der Fall bei mir..
wäre dankbar wenn ich mir helfen könntet..
bin noch nicht lange dabei, also seid mir nicht böse, wenn mein Code etwas unübersichtlich geworden ist..
Hier das Hauptfenster..
Damit die Gegner auch an verschiedenen X-Koordinaten auftauchen, habe ich Math.random() benutzt. Zwar funktioniert dies, aber irgendwie habe ich das Gefühl, dass die Gegner nur von der linken Hälfte des Bildschirms fallen...
Zudem kann mein Raumschiff manchmal die Gegner nicht treffen, wenn ich z.B. x=x+10 setze (raumschiff bewegt sich nach rechts). Nur wenn ich x=x+1 setze, kriegt das Raumschiff auch die Koordinaten von den Gegnern, die ja per Zufall generiert werden. Ich möchte aber nicht dass das Raumschiff sich mit 1PS nach rechts/links bewegt sondern mit 10 oder 20z.B.
Ich hatte das so gemacht, dass ich die generierte Zahl geprüft habe, ob sie durch 2 teilbar ist oder sagen wir mal durch 10. Wenn nicht, sollte z.B. 5 abgezogen werden, wenn Rest = 5..
also Bsp:
Zufallszahl=156
156%10=6
156-6=150
Wenn ich mich jetzt mit 10PS bewege, müsste ich doch die X-Koordinaten von den herunterfallenden Gegner erwischen können..nur irgendwie ist das nicht der Fall bei mir..
wäre dankbar wenn ich mir helfen könntet..
bin noch nicht lange dabei, also seid mir nicht böse, wenn mein Code etwas unübersichtlich geworden ist..
Hier das Hauptfenster..
Code:
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
import java.awt.*;
public class Hauptfenster extends JFrame implements KeyListener
{
public JLabel Raumschiff,Laser,Gegner,exp; //LABELS
public JButton button; //BUTTON
int x=0,y=550,yg=-100, yexp, lasersave, expPoint=1; //KOORDINATEN
int zeit= 25,gzeit=50000; //ZEIT IN MILLISEKUNDEN
boolean feuer=false,gegnerda=false, explosion=false, zufall=false;
java.util.Random random = new java.util.Random();
int zufallszahl = random.nextInt(650);
{
if(zufallszahl%2==1)
{
zufallszahl=zufallszahl-1;
}
}
//HAUPTFENSTER
public Hauptfenster()
{
super("Fenstername");
addKeyListener(this);
setExtendedState(MAXIMIZED_BOTH);
this.setTitle("JLabel");
this.getContentPane().setLayout(null);
Laser = new JLabel("",JLabel.CENTER);
Raumschiff = new JLabel("",JLabel.CENTER);
Gegner = new JLabel("",JLabel.CENTER);
exp = new JLabel("",JLabel.CENTER);
ImageIcon laser = new ImageIcon("Laser.gif");
ImageIcon icon = new ImageIcon("Raumschiff.gif");
ImageIcon gegner = new ImageIcon("gegner.gif");
ImageIcon explosion = new ImageIcon("gegnerexp.gif");
exp.setIcon(explosion);
Raumschiff.setIcon(icon);
Laser.setIcon(laser);
Gegner.setIcon(gegner);
Raumschiff.setBounds(x, 550, 160, 230);
Laser.setVisible(false);
Gegner.setBounds(zufallszahl,-100, 160, 230);
Gegner.setVisible(false);
this.getContentPane().add(Raumschiff);
this.getContentPane().add(Laser);
this.getContentPane().add(Gegner);
this.getContentPane().add(exp);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//BEWEGUNG
public void keyPressed(KeyEvent event)
{
switch(event.getKeyCode())
{
case KeyEvent.VK_LEFT : {
x=x-2; //LINKS,
Raumschiff.setBounds(x, 550, 160, 230);
break;
}
case KeyEvent.VK_RIGHT : {
x=x+2; //RECHTS,
Raumschiff.setBounds(x, 550, 160, 230);
break;
}
case KeyEvent.VK_SPACE : {
new Timer(zeit, taskPerformer).start();
Laser.setVisible(true);
if (feuer==false)
{
lasersave=x;
}
feuer=true;
break;
}
case KeyEvent.VK_UP : {
new Timer(500, Gegnerf).start();
gegnerda=true;
break;
}
}
}
//SCHUSS
ActionListener taskPerformer = new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
{
if (feuer==true)
{
y=y-1;
Laser.setBounds(lasersave,y, 160, 230);
if (yg==y&&x==zufallszahl)
{
Gegner.setVisible(false);
Gegner.setBounds(zufallszahl,-100, 160, 230);
TrefferSound treffer = new TrefferSound();
Laser.setVisible(false);
Laser.setBounds(x,550,160,230);
feuer=false;
y=550;
new Timer(0, gegnerExplosion).start();
explosion=true;
gegnerda=true;
zufall=true;
}
}
if (y<-180)
{
feuer=false;
SchussSound schuss = new SchussSound();
y=550;
}
else {};
if(yg>=800)
{
yg=-150;
}
}
}
};
//GEGNER FÄLLT RUNTER!!!
ActionListener Gegnerf = new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
Random rand = new Random();
if(zufall==true)
{
zufallszahl=zufallszahl-Math.abs(rand.nextInt()%600+1);
if(zufallszahl%10==1)
{
zufallszahl=zufallszahl-1;
}
if(zufallszahl<=10)
{
zufallszahl=zufallszahl+200;
}
zufall=false;
gegnerda=true;
if(zufallszahl<=0)
{
zufallszahl=zufallszahl+Math.abs(rand.nextInt()%600+1);
if(zufallszahl%2==1)
{
zufallszahl=zufallszahl-1;
}
if(zufallszahl>=600)
{
zufallszahl=zufallszahl-200;
}
zufall=false;
gegnerda=true;
}
if(zufallszahl>=600)
{
zufallszahl=zufallszahl-Math.abs(rand.nextInt()%600+1);
if(zufallszahl%2==1)
{
zufallszahl=zufallszahl-1;
}
if(zufallszahl<=10)
{
zufallszahl=zufallszahl+200;
}
zufall=false;
gegnerda=true;
}
}
if (gegnerda==true&&zufall==false)
{
Gegner.setBounds(zufallszahl,-150, 160, 230);
Gegner.setVisible(true);
exp.setVisible(false);
yg=yg+10;
Gegner.setBounds(zufallszahl,yg, 160, 230);
if (yg>=800)
{
gegnerda=false;
TrefferSound sound = new TrefferSound();
zufall=true;
gegnerda=true;
return;
}
else
{
Gegner.setBounds(zufallszahl,yg, 160, 230);
gegnerda=true;
}
}
}
};
//GEGNER EXPLODIERT
ActionListener gegnerExplosion = new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
if(explosion==true)
{
exp.setBounds(zufallszahl,yg, 160, 230);
exp.setVisible(true);
VerlorenSound verloren = new VerlorenSound();
yg=-200;
}
explosion=false;
}
};
public void keyReleased(KeyEvent arg0) {}
public void keyTyped(KeyEvent arg0) {}
}