Moin Leute,
ich bin ein Anfänger in Sachen GUI und auch in Java allgemein. Unser Lehrer hat uns für GUI Aufgaben 2 Klassen zur verfügung gestellt, eine View und eine Logic Klasse.
Ich habe damit ein Space Invader Spiel erstellt welches funktionstüchtig ist. Jetzt möchte ich es aber gerne verschönern indem ich beispielsweise ein Hintergrundbild einfüge. Im Internet finde ich nur lösungen mit einem JLabel, damit arbeite ich aber nicht wie ihr in den unteren Codes erkennen könnt.
Hättet ihr eine Lösung für mich?
Gruß Takar
View:
Logic:
Invader:
Shuttle:
Schuss:
ich bin ein Anfänger in Sachen GUI und auch in Java allgemein. Unser Lehrer hat uns für GUI Aufgaben 2 Klassen zur verfügung gestellt, eine View und eine Logic Klasse.
Ich habe damit ein Space Invader Spiel erstellt welches funktionstüchtig ist. Jetzt möchte ich es aber gerne verschönern indem ich beispielsweise ein Hintergrundbild einfüge. Im Internet finde ich nur lösungen mit einem JLabel, damit arbeite ich aber nicht wie ihr in den unteren Codes erkennen könnt.
Hättet ihr eine Lösung für mich?
Gruß Takar
View:
Java:
package spaceInvaders;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class View extends JFrame {
private static final long serialVersionUID = 1L;
public static View instance = null;
private JPanel gamePanel = new JPanel();
private BufferedImage img;
public BufferedImage getImg() {
return img;
}
public void setImg(BufferedImage img) {
this.img = img;
repaint();
}
public static View getInstance() {
if (instance == null)
instance = new View();
return instance;
}
private View() {
super("Space Invaders");
Shuttle shuttle = Logic.getShuttle();
instance = this;
setDefaultCloseOperation(EXIT_ON_CLOSE);
setContentPane(gamePanel);
setSize(470, 650);
setLocation(400, 300);
setVisible(true);
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT) {
int aktuellerxPunkt = shuttle.getXpunkt();
if (aktuellerxPunkt != 0) {
aktuellerxPunkt -= 10;
}
shuttle.setXpunkt(aktuellerxPunkt);
}
if (key == KeyEvent.VK_RIGHT) {
int aktuellerxPunkt = shuttle.getXpunkt();
if (aktuellerxPunkt != 390) {
aktuellerxPunkt += 10;
}
shuttle.setXpunkt(aktuellerxPunkt);
}
if (key == KeyEvent.VK_UP) {
Logic.schuss = true;
}
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT) {
}
if (key == KeyEvent.VK_RIGHT) {
}
if (key == KeyEvent.VK_UP) {
Logic.schuss = false;
}
}
});
Thread t = new Thread(new Logic());
t.start();
}
public void paint(Graphics g) {
g.drawImage(img, 5, 22, 460, 650, new ImageObserver() {
@Override
public boolean imageUpdate(Image arg0, int arg1, int arg2,
int arg3, int arg4, int arg5) {
return true;
}
});
}
public static void main(String[] args) {
View.getInstance();
}
}
Logic:
Java:
package spaceInvaders;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import javax.swing.JOptionPane;
public class Logic implements Runnable {
int xSpielfeld = 400;
int ySpielfeld = 390;
long zaehler = 0;
int punkte = 00;
int invaderRate = 13;
public static boolean schuss = false;
boolean rateErhoehen = false;
private static Shuttle shuttle = new Shuttle();
private BufferedImage img = new BufferedImage(400, 400, BufferedImage.TYPE_INT_ARGB);
ArrayList<Invader> invaders = new ArrayList<Invader>();
ArrayList<Schuss> schuesse = new ArrayList<Schuss>();
@Override
public void run() {
while (true) {
zaehler++;
// Hintergrund
Graphics grafik = img.getGraphics();
grafik.setColor(Color.black);
grafik.fillRect(0, 0, 450, 650);
if ((zaehler % invaderRate) == 0) {
invaders.add(new Invader());
}
for (int i = 0; i < invaders.size(); i++) {
int aktuellerYPunkt = invaders.get(i).getyPunkt();
aktuellerYPunkt++;
invaders.get(i).setyPunkt(aktuellerYPunkt);
}
grafik.setColor(Color.lightGray);
grafik.fillOval(shuttle.getXpunkt(), shuttle.getStartpunktY(), 9, 9);
grafik.setColor(Color.GREEN);
for (int i = 0; i < invaders.size(); i++) {
grafik.fillOval(invaders.get(i).getStartpunktX(), invaders.get(i).getyPunkt(), 5, 7);
}
for (int i = 0; i < invaders.size(); i++) {
int aktuellerYPunkt = invaders.get(i).getyPunkt();
if (aktuellerYPunkt == (ySpielfeld - 10)) {
JOptionPane.showMessageDialog(null, "Game Over " + punkte);
System.exit(0);
}
}
for (int j = 0; j < schuesse.size(); j++) {
if (schuesse.get(j).getyPunkt() <= 13) {
schuesse.remove(j);
}
}
abschießen();
grafik.setColor(Color.red);
if (schuss == true && (zaehler % 4 == 0)) {
schuesse.add(new Schuss(shuttle.getXpunkt() + 4));
}
for (int amk = 0; amk < schuesse.size(); amk++) {
int aktuellerYPunkt = schuesse.get(amk).getyPunkt();
aktuellerYPunkt = (aktuellerYPunkt - 2);
schuesse.get(amk).setyPunkt(aktuellerYPunkt);
}
grafik.setColor(Color.red);
for (int i = 0; i < schuesse.size(); i++) {
grafik.fillOval(schuesse.get(i).getStartpunktX(), schuesse.get(i).getyPunkt(), 2, 2);
}
grafik.setColor(Color.white);
if ((punkte % 100) == 0 && punkte != 0) {
grafik.drawString("NEXT LEVEL", 180, 200);
}
View.getInstance().setImg(img);
grafik.setColor(Color.white);
grafik.drawString(" " + punkte, 20, 370);
try {
Thread.sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static Shuttle getShuttle() {
return shuttle;
}
public void abschießen() {
for (int i = 0; i < invaders.size(); i++) {
for (int j = 0; j < schuesse.size(); j++) {
if ((invaders.get(i).getyPunkt() <= (schuesse.get(j).getyPunkt() + 2)
&& (invaders.get(i).getyPunkt() >= (schuesse.get(j).getyPunkt() - 2))
&& (invaders.get(i).getStartpunktX() - 3 <= schuesse.get(j).getStartpunktX() + 3)
&& invaders.get(i).getStartpunktX() + 3 >= (schuesse.get(j).getStartpunktX()) - 3)) {
punkte++;
invaders.remove(i);
schuesse.remove(j);
}
}
}
}
}
Invader:
Java:
package spaceInvaders;
public class Invader {
private int startpunktX;
private int yPunkt = 0;
public Invader () {
startpunktX = (int) (Math.random()*390);
}
public int getStartpunktX() {
return startpunktX;
}
public int getyPunkt() {
return yPunkt;
}
public void setyPunkt(int yPunkt) {
this.yPunkt = yPunkt;
}
}
Shuttle:
Java:
package spaceInvaders;
public class Shuttle {
private int Xpunkt = 200;
private int startpunktY;
public Shuttle() {
startpunktY = 365;
}
public int getXpunkt() {
return Xpunkt;
}
public void setXpunkt(int xpunkt) {
Xpunkt = xpunkt;
}
public int getStartpunktY() {
return startpunktY;
}
}
Schuss:
Java:
package spaceInvaders;
public class Schuss {
private int startpunktX;
private int yPunkt = 363;
public Schuss (int x) {
startpunktX = x;
}
public int getStartpunktX() {
return startpunktX;
}
public int getyPunkt() {
return yPunkt;
}
public void setyPunkt(int yPunkt) {
this.yPunkt = yPunkt;
}
}