Tim Hovius
Gebruiker
- Lid geworden
- 25 jan 2008
- Berichten
- 788
Hallo allemaal,
Ik ben bezig met een applicatie met bubbels. Als de bubbels tegen de boom-bubbel botsen, ontploft die. De boom-bubbel wordt toegevoegd met een muisklik.
Ik heb alleen een paar probleempjes:
De code:
BubbleApp
[CPP]package magicBubbles;
import javax.swing.*;
public class BubbleApp extends JFrame
{
public BubbleApp()
{
this.setBounds(50, 50, 1000, 600);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setResizable(false);
this.setTitle("Magic Bubbles");
BubblePaneel bubblePaneel = new BubblePaneel();
this.add(bubblePaneel);
this.setVisible(true);
}
public static void main(String[] args)
{
new BubbleApp();
}
}
[/CPP]
BubblePaneel
[CPP]package magicBubbles;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class BubblePaneel extends JPanel implements MouseListener
{
private ArrayList<MagicBubble> magicBubble;
public BubblePaneel()
{
this.setLayout(null);
magicBubble = new ArrayList<MagicBubble>();
this.addMouseListener(this);
for (int i = 0; i < 50; i++)
{
Random random = new Random();
Point middelpunt = new Point();
middelpunt.setLocation(random.nextInt(946), random.nextInt(541));
MagicBubble bubble = new MagicBubble(middelpunt, 15, Color.blue,
"BEWEGEN");
this.add(bubble);
this.magicBubble.add(bubble);
}
}
public void mousePressed(MouseEvent e)
{
@SuppressWarnings("unused")
CollisionChecker checker = new CollisionChecker(magicBubble);
repaint();
}
public void mouseClicked(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
}
[/CPP]
CollisionChecker
[CPP]package magicBubbles;
import java.awt.*;
import java.util.*;
public class CollisionChecker implements Runnable
{
MagicBubble bubble;
MagicBubble boom;
Point middelpunt;
BubblePaneel paneel;
private ArrayList<MagicBubble> magicBubble;
public CollisionChecker(ArrayList<MagicBubble> magicBubble)
{
Thread thread = new Thread(this);
thread.start();
this.magicBubble = new ArrayList<MagicBubble>();
this.magicBubble = magicBubble;
}
private boolean collision(MagicBubble boom, MagicBubble bubble)
{
Point m1 = boom.getMiddelpunt();
int r1 = boom.getStraal();
Point m2 = bubble.getMiddelpunt();
int r2 = bubble.getStraal();
return ((Math.pow(m1.x - m2.x, 2) + Math.pow(m1.y - m2.y, 2)) < Math
.pow(r1 + r2, 2));
}
public void run()
{
Point middelpunt = new Point();
middelpunt.setLocation(120, 120);
System.out.println(middelpunt);
this.boom = new MagicBubble(middelpunt, 5, Color.red, "EXPLODEREN");
while (true)
{
for (int i = 0; i < magicBubble.size(); i++)
{
bubble = magicBubble.get(i);
if (collision(boom, bubble) == true)
{
if (bubble.getStatus() == "BEWEGEN")
{
bubble.setStatus("EXPLODEREN");
}
}
}
}
}
}
[/CPP]
MagicBubble
[CPP]package magicBubbles;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
public class MagicBubble extends JPanel implements ActionListener,
MouseListener
{
private Timer timer;
private Color kleur;
private Point middelpunt;
private int straal, dx, dy;
private String status;
public MagicBubble(Point middelpunt, int straal, Color kleur, String status)
{
this.addMouseListener(this);
this.setOpaque(false);
this.setBounds(middelpunt.x - straal, middelpunt.y - straal,
straal * 2, straal * 2);
this.timer = new Timer(20, this);
timer.start();
this.middelpunt = middelpunt;
this.straal = straal;
this.kleur = kleur;
this.status = status;
}
public void beweeg()
{
if (middelpunt.x <= 0)
{
dx = 1;
middelpunt.x += dx;
}
if (middelpunt.y <= 0)
{
dy = 1;
middelpunt.y += dy;
}
if (middelpunt.x >= 964)
{
dx = -1;
middelpunt.x += dx;
}
if (middelpunt.y >= 541)
{
dy = -1;
middelpunt.y += dy;
}
}
public void animeer()
{
if (status == "BEWEGEN")
{
Random random = new Random();
int nummer = random.nextInt(50);
if (nummer == 0)
{
dx = random.nextInt(3) - 1;
dy = random.nextInt(3) - 1;
}
this.middelpunt.x += dx;
this.middelpunt.y += dy;
this.setLocation(middelpunt);
beweeg();
}
}
public void explodeer()
{
if (status == "EXPLODEREN")
{
middelpunt.x -= 1;
middelpunt.y -= 1;
this.straal += 1;
this.setSize(straal * 2 + 1, straal * 2 + 1);
this.setLocation(this.getX() - 1, this.getY() - 1);
repaint();
}
if (straal >= 100)
{
status = "KRIMPEN";
}
}
public void krimp()
{
if (status == "KRIMPEN")
{
middelpunt.x += 1;
middelpunt.y += 1;
this.straal -= 1;
this.setSize(straal * 2 - 1, straal * 2 - 1);
this.setLocation(this.getX() + 1, this.getY() + 1);
repaint();
}
if (straal <= 0)
{
status = "KLAAR";
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(kleur);
g.fillOval(0, 0, straal * 2, straal * 2);
}
public void actionPerformed(ActionEvent e)
{
this.animeer();
this.explodeer();
this.krimp();
this.repaint();
}
public void mousePressed(MouseEvent arg0)
{
this.requestFocus();
this.status = "EXPLODEREN";
}
public void mouseClicked(MouseEvent arg0)
{
}
public void mouseEntered(MouseEvent arg0)
{
}
public void mouseExited(MouseEvent arg0)
{
}
public void mouseReleased(MouseEvent arg0)
{
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public Point getMiddelpunt()
{
return this.middelpunt;
}
public int getStraal()
{
return this.straal;
}
}
[/CPP]
Ik ben bezig met een applicatie met bubbels. Als de bubbels tegen de boom-bubbel botsen, ontploft die. De boom-bubbel wordt toegevoegd met een muisklik.
Ik heb alleen een paar probleempjes:
- Hoe voeg ik de boom bubbel toe zodat deze zichtbaar is in het JPanel BubblePaneel? Ik voeg de boom-bubbel nu in de CollisionChecker toe.
- Hoe krijg ik de x- en y coördinaten van de boom-bubbel? Ik heb de x en y nu een vaste waarde gegeven (Point).
De code:
BubbleApp
[CPP]package magicBubbles;
import javax.swing.*;
public class BubbleApp extends JFrame
{
public BubbleApp()
{
this.setBounds(50, 50, 1000, 600);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setResizable(false);
this.setTitle("Magic Bubbles");
BubblePaneel bubblePaneel = new BubblePaneel();
this.add(bubblePaneel);
this.setVisible(true);
}
public static void main(String[] args)
{
new BubbleApp();
}
}
[/CPP]
BubblePaneel
[CPP]package magicBubbles;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class BubblePaneel extends JPanel implements MouseListener
{
private ArrayList<MagicBubble> magicBubble;
public BubblePaneel()
{
this.setLayout(null);
magicBubble = new ArrayList<MagicBubble>();
this.addMouseListener(this);
for (int i = 0; i < 50; i++)
{
Random random = new Random();
Point middelpunt = new Point();
middelpunt.setLocation(random.nextInt(946), random.nextInt(541));
MagicBubble bubble = new MagicBubble(middelpunt, 15, Color.blue,
"BEWEGEN");
this.add(bubble);
this.magicBubble.add(bubble);
}
}
public void mousePressed(MouseEvent e)
{
@SuppressWarnings("unused")
CollisionChecker checker = new CollisionChecker(magicBubble);
repaint();
}
public void mouseClicked(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
}
[/CPP]
CollisionChecker
[CPP]package magicBubbles;
import java.awt.*;
import java.util.*;
public class CollisionChecker implements Runnable
{
MagicBubble bubble;
MagicBubble boom;
Point middelpunt;
BubblePaneel paneel;
private ArrayList<MagicBubble> magicBubble;
public CollisionChecker(ArrayList<MagicBubble> magicBubble)
{
Thread thread = new Thread(this);
thread.start();
this.magicBubble = new ArrayList<MagicBubble>();
this.magicBubble = magicBubble;
}
private boolean collision(MagicBubble boom, MagicBubble bubble)
{
Point m1 = boom.getMiddelpunt();
int r1 = boom.getStraal();
Point m2 = bubble.getMiddelpunt();
int r2 = bubble.getStraal();
return ((Math.pow(m1.x - m2.x, 2) + Math.pow(m1.y - m2.y, 2)) < Math
.pow(r1 + r2, 2));
}
public void run()
{
Point middelpunt = new Point();
middelpunt.setLocation(120, 120);
System.out.println(middelpunt);
this.boom = new MagicBubble(middelpunt, 5, Color.red, "EXPLODEREN");
while (true)
{
for (int i = 0; i < magicBubble.size(); i++)
{
bubble = magicBubble.get(i);
if (collision(boom, bubble) == true)
{
if (bubble.getStatus() == "BEWEGEN")
{
bubble.setStatus("EXPLODEREN");
}
}
}
}
}
}
[/CPP]
MagicBubble
[CPP]package magicBubbles;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
public class MagicBubble extends JPanel implements ActionListener,
MouseListener
{
private Timer timer;
private Color kleur;
private Point middelpunt;
private int straal, dx, dy;
private String status;
public MagicBubble(Point middelpunt, int straal, Color kleur, String status)
{
this.addMouseListener(this);
this.setOpaque(false);
this.setBounds(middelpunt.x - straal, middelpunt.y - straal,
straal * 2, straal * 2);
this.timer = new Timer(20, this);
timer.start();
this.middelpunt = middelpunt;
this.straal = straal;
this.kleur = kleur;
this.status = status;
}
public void beweeg()
{
if (middelpunt.x <= 0)
{
dx = 1;
middelpunt.x += dx;
}
if (middelpunt.y <= 0)
{
dy = 1;
middelpunt.y += dy;
}
if (middelpunt.x >= 964)
{
dx = -1;
middelpunt.x += dx;
}
if (middelpunt.y >= 541)
{
dy = -1;
middelpunt.y += dy;
}
}
public void animeer()
{
if (status == "BEWEGEN")
{
Random random = new Random();
int nummer = random.nextInt(50);
if (nummer == 0)
{
dx = random.nextInt(3) - 1;
dy = random.nextInt(3) - 1;
}
this.middelpunt.x += dx;
this.middelpunt.y += dy;
this.setLocation(middelpunt);
beweeg();
}
}
public void explodeer()
{
if (status == "EXPLODEREN")
{
middelpunt.x -= 1;
middelpunt.y -= 1;
this.straal += 1;
this.setSize(straal * 2 + 1, straal * 2 + 1);
this.setLocation(this.getX() - 1, this.getY() - 1);
repaint();
}
if (straal >= 100)
{
status = "KRIMPEN";
}
}
public void krimp()
{
if (status == "KRIMPEN")
{
middelpunt.x += 1;
middelpunt.y += 1;
this.straal -= 1;
this.setSize(straal * 2 - 1, straal * 2 - 1);
this.setLocation(this.getX() + 1, this.getY() + 1);
repaint();
}
if (straal <= 0)
{
status = "KLAAR";
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(kleur);
g.fillOval(0, 0, straal * 2, straal * 2);
}
public void actionPerformed(ActionEvent e)
{
this.animeer();
this.explodeer();
this.krimp();
this.repaint();
}
public void mousePressed(MouseEvent arg0)
{
this.requestFocus();
this.status = "EXPLODEREN";
}
public void mouseClicked(MouseEvent arg0)
{
}
public void mouseEntered(MouseEvent arg0)
{
}
public void mouseExited(MouseEvent arg0)
{
}
public void mouseReleased(MouseEvent arg0)
{
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public Point getMiddelpunt()
{
return this.middelpunt;
}
public int getStraal()
{
return this.straal;
}
}
[/CPP]