Hallo,
Ich habe bereits ein Programm erstellt, welches eine SEHR! verfrühte Version von SpaceInvanders sein soll. (Man steuert ein Rechteck, kann Laser schießen und es gibt zurzeit 1 Gegnger (größeres Rechteck) welches man abschießen kann.)
Bevor ich aber jetzt weitermache, möchte ich erstmal ein Label einfügen, auf dem man ein paar Infos anzeigen lassen kann wie z.b. "Anzahl Treffer", "verbleibende Gegner" usw...
Überlegt habe ich mir eine 70:30 aufteilung ca. 70% das Spielfeld und 30% das Label (rechts). Das ganze mit dem BorderLayout mit Center fürs Spielfeld und East fürs Label.
Allerdings bekomme ich es einfach nicht hin...
Ich hatte vor eine SpaceInvanderLabel-Klasse zu erzeugen... Und wo genau im Programm "aktualisiere" ich die Texte, die auf dem Label angezeigt werden? In der paintComponent?
Ich habe bereits ein Programm erstellt, welches eine SEHR! verfrühte Version von SpaceInvanders sein soll. (Man steuert ein Rechteck, kann Laser schießen und es gibt zurzeit 1 Gegnger (größeres Rechteck) welches man abschießen kann.)
Bevor ich aber jetzt weitermache, möchte ich erstmal ein Label einfügen, auf dem man ein paar Infos anzeigen lassen kann wie z.b. "Anzahl Treffer", "verbleibende Gegner" usw...
Überlegt habe ich mir eine 70:30 aufteilung ca. 70% das Spielfeld und 30% das Label (rechts). Das ganze mit dem BorderLayout mit Center fürs Spielfeld und East fürs Label.
Allerdings bekomme ich es einfach nicht hin...
Ich hatte vor eine SpaceInvanderLabel-Klasse zu erzeugen... Und wo genau im Programm "aktualisiere" ich die Texte, die auf dem Label angezeigt werden? In der paintComponent?
Java:
package ABC;
import java.awt.BorderLayout;
public class SpaceInvenderStart {
public static void main(String[] args) {
SpaceInvenderFrame frame = new SpaceInvenderFrame(700, 500, "Space Invander");
SpaceInvenderPanel panel = new SpaceInvenderPanel(frame);
SpaceInvanderLabel label = new SpaceInvanderLabel(frame);
}
}
Java:
package ABC;
import javax.swing.JFrame;
public class SpaceInvenderFrame extends JFrame {
public SpaceInvenderFrame(int frameSizeX, int frameSizeY, String frameName) {
this.setSize(frameSizeX, frameSizeY);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle(frameName);
this.setLocation(500, 200);
}
}
Java:
package ABC;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class SpaceInvenderPanel extends JPanel implements KeyListener, ActionListener {
private int x = 300;
private int y = 400;
private int dx = 0;
private int dy = 0;
public double lastDistance = 99999999;
public int laserLength = 20;
public int zielx = 300;
public int ziely = 100;
public int zielwidth = 60;
public int zielheight = 60;
public boolean zielxpositiv =false;
boolean links = false;
boolean rechts = false;
boolean oben = false;
boolean unten = false;
boolean leertaste = false;
boolean getroffen = false;
private final List<Line2D> laserListe = new ArrayList<Line2D>();
public List<Rectangle> gegnerListe = new ArrayList<Rectangle>();
Timer t = new Timer(5, this);
public SpaceInvenderPanel(JFrame frame) {
frame.add(this);
setFocusable(true);
addKeyListener(this);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.BLACK);
g2.fillRect(x, y, 30, 30);
if(getroffen==false) {
g2.fillRect(zielx, ziely, zielwidth, zielheight);
}
for (Line2D laser: laserListe) {
g2.draw(laser);
}
t.start();
}
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if(code==KeyEvent.VK_UP) {
oben = true;
} else if(code==KeyEvent.VK_DOWN) {
unten = true;
} else if(code==KeyEvent.VK_RIGHT) {
rechts = true;
} else if(code==KeyEvent.VK_LEFT) {
links = true;
}
if(code==32) {
leertaste = true;
}
}
public void keyReleased(KeyEvent e) {
int code = e.getKeyCode();
if(code==KeyEvent.VK_UP) {
oben = false;
} else if(code==KeyEvent.VK_DOWN) {
unten = false;
} else if(code==KeyEvent.VK_RIGHT) {
rechts = false;
} else if(code==KeyEvent.VK_LEFT) {
links = false;
}
if(code==32) {
leertaste = false;
}
}
public void keyTyped(KeyEvent e) {
}
public void actionPerformed(ActionEvent e) {
if(oben) {
dy = -1;
dx = 0;
}
if(unten) {
dy = 1;
dx = 0;
}
if (links) {
dy = 0;
dx = -1;
}
if (rechts) {
dy = 0;
dx = 1;
}
if (lastDistance>laserLength*2) {
if (leertaste) {
laserListe.add(new Line2D.Double(x+15, y, x+15, y+laserLength));
lastDistance = 0;
}
} else
{
lastDistance += 0.7;
}
List<Line2D> toRemove = new ArrayList<Line2D>();
for (Line2D laser : laserListe) {
double x1 = laser.getX1();
double y1 = laser.getY1();
double x2 = laser.getX2();
double y2 = laser.getY2();
y1 -= 10;
y2 -= 10;
laser.setLine(x1, y1, x2, y2);
if (y1 < 0)
{
toRemove.add(laser);
}
for (double i = zielx; i<=zielx+60; i++) {
if (x1 == i) {
zielxpositiv = true;
getroffen = true;
}
}
if (y1 == ziely+50 && zielxpositiv==true && getroffen == true) {
toRemove.add(laser);
System.out.print("Treffer");
zielxpositiv=false;
ziely=-999;
}
}
laserListe.removeAll(toRemove);
x +=dx;
y +=dy;
repaint();
dx = 0;
dy = 0;
}
}
Java:
package ABC;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class SpaceInvanderLabel extends JLabel {
public SpaceInvanderLabel(JFrame frame) {
frame.getContentPane().add(BorderLayout.EAST, this);
}
}