Hallo,
Ich versuche mich gerade an einem Moorhuhn-Klon und bin aktuell soweit, dass alle 3 Sekunden von rechts nach links fliegend ein neues Huhn spawnt. Die Hühner sollten per Mausklick abgeschossen werden können. Auf der Konsole erfolgt testweise bei erfolgtem Treffer eines Huhns die Meldung "Treffer!".
Mein Problem ist, dass nur das 1. Huhn treffbar ist. Alle anderen Hühner sind nicht treffbar. Ich verstehe nicht wieso....
Ich habe das ganze Projekt im Anhang als .jar Datei samt .java und .class Datein angehangen.
Von .jar Datein habe ich keine Ahnung, lässt sich so nicht starten die Datei, jedoch läuft es über Eclipse...
Alternativ habe ich meine Klassen unten aufgelistet:
Ob das ganze jetzt schön sauber nach Konventionen gecodet ist, ist mir erstmal egal. Darum kümmere ich mich später.
Ich versuche mich gerade an einem Moorhuhn-Klon und bin aktuell soweit, dass alle 3 Sekunden von rechts nach links fliegend ein neues Huhn spawnt. Die Hühner sollten per Mausklick abgeschossen werden können. Auf der Konsole erfolgt testweise bei erfolgtem Treffer eines Huhns die Meldung "Treffer!".
Mein Problem ist, dass nur das 1. Huhn treffbar ist. Alle anderen Hühner sind nicht treffbar. Ich verstehe nicht wieso....
Ich habe das ganze Projekt im Anhang als .jar Datei samt .java und .class Datein angehangen.
Von .jar Datein habe ich keine Ahnung, lässt sich so nicht starten die Datei, jedoch läuft es über Eclipse...
Alternativ habe ich meine Klassen unten aufgelistet:
Ob das ganze jetzt schön sauber nach Konventionen gecodet ist, ist mir erstmal egal. Darum kümmere ich mich später.
Java:
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class App {
public static Panel p1;
public static int mousex;
public static int mousey;
public static void main(String[] args) {
Frame f1 = new Frame();
p1 = new Panel(f1);
Thread1 t1 = new Thread1();
t1.start();
Thread2 t2 = new Thread2();
t2.start();
Thread3 t3 = new Thread3();
t3.start();
MouseListener a = new MouseListener(){
@Override
public void mouseClicked(MouseEvent arg0) {
System.out.println("geklickt an Position X: "+arg0.getX()+" Y: "+arg0.getY());
mousex = arg0.getX();
mousey = arg0.getY();
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
};
f1.addMouseListener(a);
}
}
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Panel extends JPanel {
Image mh = Toolkit.getDefaultToolkit().getImage( "mh.gif" );
public Panel(JFrame a) {
a.add(this);
}
public void paintComponent(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(0, 0, 1000, 700);
g.setColor(Color.BLACK);
//Moorhühner zeichnen
for(Moorhuhn mh : Thread2.mhliste) {
g.drawImage(mh.getImage(), mh.getX(), mh.getY(), null);
}
//Für alle Moorhühner prüfen, ob Mausklickposition mit Moorhuhn übereintrifft. Falls ja -> Treffer.
for(Moorhuhn mh : Thread2.mhliste) {
if(App.mousex>mh.getX() && App.mousex<mh.getX()+80 && App.mousey>mh.getY()+20 && App.mousey<mh.getY()+80) {
System.out.println("TREFFER");
}else {
App.mousex=0;
App.mousey=0;
}
}
}
}
Java:
import java.awt.Image;
import java.awt.Toolkit;
public class Moorhuhn {
public int x;
public int y;
public Image img;
public Moorhuhn() {
setX(800);
setY(249);
loadImage();
}
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
private void loadImage() {
img = Toolkit.getDefaultToolkit().getImage( "mh.gif" );
}
public Image getImage() {
return img;
}
}
Java:
import javax.swing.JFrame;
public class Frame extends JFrame {
public Frame() {
this.setSize(1000, 600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
}
Java:
public class Thread1 extends Thread {
public void run() {
while(true) {
App.p1.repaint();
}
}
}
Java:
import java.util.Vector;
public class Thread2 extends Thread {
public static Vector<Moorhuhn> mhliste;
public void run() {
mhliste = new Vector<Moorhuhn>();
while (true) {
mhliste.add(new Moorhuhn());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mhliste.add(new Moorhuhn());
}
}
}
Java:
public class Thread3 extends Thread {
public void run() {
while(true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//Moorhühner bewegen
for(Moorhuhn mh: Thread2.mhliste) {
mh.setX(mh.getX()-5);
}
}
}
}