Collection

Status
Nicht offen für weitere Antworten.
S

Sinan

Gast
Hallo,

folgendes Problem :

Ich programmiere gerade ein Spiel in welchem Herzen vom Himmel fallen und ein Frosch diese aufsammeln soll.
Da mehrere Herzen fallen sollen habe ich eine Collection verwendet.


Code:
public static Collection<Herz> herzen=new ArrayList<Herz>();

Der Iterator sieht so aus:
Code:
Iterator iterator = herzen.iterator();
    
    while(iterator.hasNext())
        ((Herz) iterator.next()).paintMe(g);

Gezeichnet werden die Herzen so :

Code:
 public static void Zeichne() {
    	
    	for (int i=0;i<1;i++){
    		int bb=ZufallsZahl.zufaelligeZahl(1100); //Zufällige X Position
    		int tt=ZufallsZahl.zufaelligeZahl(7);	 // Zufällige Geschwindigkeit
    		int n=ZufallsZahl.zufaelligeZahl(8000);
    	herzen.add(new Herz ( bb, 0, 0 ,tt+1,n));
    	}	
    	
    	
	}

um nicht einfach nur ein stehendes Herz sondern ein fallendes Herz zeichnen zu können habe ich weiterhin :
Code:
Timer t2 = new Timer (5,new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				for (Herz herz:herzen){
					Herz.xPos=Herz.xPos+herz.dX;
					Herz.yPos=Herz.yPos+herz.dY;
					
					 
				    int yH = Herz.getYPos();
					if (yH==700){
						int n2 = Herz.getNum();
						System.out.println(n2);
						remove();
						}
					
				}
			   repaint();
			}
		 });
		t2.start();


Ich möchte nun, wenn ein Herz aus dem Fenster raus ist, dieses löschen.
Kann es allerdings nicht ansprechen, da ja manchmal mehrere Herzen gleichzeitig im Fenster sind...

kann mir da einer weiterhelfen??

Oder vielleicht einfacher, wie kann ich abgesehen von einer Collection die erzeugung von mehreren Herzen
einbauen??[/img]
 
S

Sinan

Gast
Hier mal die gesamten Klassen zum testen :

ZeigBild :
Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JPanel;


import tkoca001.KeyBoard;

@SuppressWarnings("serial")
public class ZeigBild extends JPanel{

    Image img2;
    
    public static Collection<Herz> herzen=new ArrayList<Herz>();
    static Frog frog = new Frog(550,580,0,0);
    
    
    public static void Zeichne() {
    	
    	for (int i=0;i<1;i++){
    		int bb=ZufallsZahl.zufaelligeZahl(1100); //Zufällige X Position
    		int tt=ZufallsZahl.zufaelligeZahl(7);	 // Zufällige Geschwindigkeit
    		int n=ZufallsZahl.zufaelligeZahl(8000);
    	herzen.add(new Herz ( bb, 0, 0 ,tt+1,n));
    	}	
    	
    	
	}
    
    
    ZeigBild(){
    	
    	 
    img2=		Toolkit.getDefaultToolkit().createImage(
    		    this.getClass()
    	        .getClassLoader().getResource("wiese.jpg")	    );
	
	MediaTracker mt=new MediaTracker(this);
	mt.addImage(img2,0);
	
	try{
		mt.waitForAll();
		}catch (InterruptedException e){
			e.printStackTrace();
		}
	
	// Timer 1
	Timer t1 = new Timer (3800,new ActionListener()
	{
		
		public void actionPerformed(ActionEvent e)
		{
			Zeichne();
		}
	
	 });
	t1.start();
	
	
		// Timer 2
		Timer t2 = new Timer (5,new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				for (Herz herz:herzen){
					Herz.xPos=Herz.xPos+herz.dX;
					Herz.yPos=Herz.yPos+herz.dY;
				
				}
			   repaint();
			}
		 });
		t2.start();		
	
    }
    
	@Override 
    public void paintComponent(java.awt.Graphics g){
	super.paintComponent(g);
	
	//zeichne Wiese
	g.drawImage(img2,0,0,this);
	
	//zeichne Frosch
	frog.paintMe(g); 
	
	Iterator iterator = herzen.iterator();
    
    while(iterator.hasNext())
        ((Herz) iterator.next()).paintMe(g);
   
    int yH = Herz.getYPos();
	if (yH==700){
		int n2 = Herz.getNum();
		System.out.println(n2);
		System.out.println(yH);
		iterator.remove();
		}
  }

    //Fenstergröße
    @Override
    public java.awt.Dimension getPreferredSize(){
	return new java.awt.Dimension(1200,700);
    }
 
   public static void main(String [] args){
	   KeyBoard frame = new KeyBoard();
       frame.addComponentsToPane();
       frame.add(new ZeigBild());
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.pack();
       frame.setVisible(true);
  }
}



KeyBoard:
Code:
import java.awt.event.*;
import javax.swing.*;
import tkoca001.Herz;
import java.util.LinkedList;
import tkoca001.ZeigBild;

@SuppressWarnings("serial")
public class KeyBoard extends JFrame
        implements KeyListener,ActionListener  {
	
	public KeyBoard(){ 
	      this.setTitle("Frosch König"); 
	   } 
	 
	void addComponentsToPane() {
      addKeyListener(this); 
    }
	
    public void keyTyped(KeyEvent e) {}  // Unused
    
    public void keyReleased(KeyEvent e) {}// Unused
   
    public void keyPressed(KeyEvent e) {
    	
    	 int a= ZeigBild.frog.getXPos();
    	 
    	int xF = ZeigBild.frog.getXPos();
 		int yF = ZeigBild.frog.getYPos();
 		int xH = Herz.getXPos();
 		int yH = Herz.getYPos();
 		int n = Herz.getNum();
 		
 		System.out.println(xF);
 		System.out.println(yF);
 		System.out.println(xH);
 		System.out.println(yH);
 		System.out.println(n);
    	
    	 if (e.getKeyCode() == 39 && a<1100) 
    		 ZeigBild.frog.setXPos(ZeigBild.frog.getXPos()+15); 
    	 
    	 else if (e.getKeyCode() == 37 && a>0) 
    		 ZeigBild.frog.setXPos(ZeigBild.frog.getXPos()-15);
    	 
         else ZeigBild.frog.setXPos(a);
    	 
          this.repaint(); //repaint 
          
    }
    

    /** Handle the button click. */
    public void actionPerformed(ActionEvent e) {
       requestFocusInWindow();
    } 
}

Frog:
Code:
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.*;

@SuppressWarnings("serial")
public class Frog extends JFrame{
	
	Image img2;

	 private int xPos = 0;      //x-Position des Balken 
	 private int yPos = 0;
	 int dX, dY;
	 int h;    //Höhe 
	 int w;    //Breite 
	
	public Frog(int xPos, int yPos, int dX, int dY)
	{
	      this.xPos = xPos; 
	      this.yPos = yPos; 
	      this.dX=dX;
		  this.dY=dY;
	     
		img2=new ImageIcon(this.getClass().getClassLoader().getResource("frog.gif")).getImage();
		this.h= img2.getWidth(this);
		this.w=img2.getHeight(this); 
	}

	void paintMe(Graphics g){
		super.paint(g);
		g.drawImage(img2,xPos,yPos,this);	
	}
	
	//Getter und Setter
	public int getXPos() { 
	      return xPos; 
	   } 

	   public void setXPos(int pos) { 
	      xPos = pos; 
	   } 

	   public int getYPos() { 
	      return yPos; 
	   } 

	   public void setYPos(int pos) { 
	      yPos = pos; 
	   } 
}

Herz:
Code:
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class Herz extends JPanel
{
	Image img;

	 public static int xPos = 0;      //x-Position des Balken 
	 public static int yPos = 0;
	 int dX, dY;
	 int h;    //Höhe 
	 int w;    //Breite 
	 public static int num;
	
	public Herz(int xPos, int yPos, int dX, int dY, int num)
	{
		 this.xPos = xPos; 
	     this.yPos = yPos; 
	     this.dX=dX;
		 this.dY=dY;
		 this.num=num;

		img=new ImageIcon(this.getClass().getClassLoader().getResource("herz.gif")).getImage();
		this.h=img.getWidth(this);
		this.w=img.getHeight(this);
	}
	
	void paintMe(Graphics g){
		super.paint(g);
		g.drawImage(img,xPos,yPos,this);	
	}
	
//	Getter und Setter
	public static int getXPos() { 
	      return xPos; 
	   } 

	   public void setXPos(int pos) { 
	      xPos = pos; 
	   } 

	   public static int getYPos() { 
	      return yPos; 
	   } 

	   public void setYPos(int pos) { 
	      yPos = pos; 
	   } 
	   
	   public static int getNum(){
		   return num;
	   }
	   
	   public void setNum(int Num){
		   num = Num;
	   }
	   
	
}


und ZufallsZahl:


@SuppressWarnings("serial")
public class ZufallsZahl extends ZeigBild
{
/**
* zufaelligeZahl-Methode generiert die zufaelligeZahl bis n
*/
public static int zufaelligeZahl(int n) {

// Zufallszahl zwischen 0.1 & 1.0 erzeugen
double dezimalZahl = Math.random();

// Wert in den Bereich 0 bis n strecken
int ganzZahl = (int)Math.round( dezimalZahl * n );

// Ergebnis zurueckgeben
return ganzZahl;

}


}
Code:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben