Rubax
Legacy Member
Beste,
Voor mijn studie ICT heb ik de opdracht gekregen om een Brick Breakout te maken. Tijdens het programmeren ben ik op de volgende fout gekomen; mijn brickBal beweegt niet, ik zie het probleem niet aangezien mijn thread toch gestart wordt.
Iemand die het probleem kan oplossen?
Alvast bedankt!!
Vriendelijke groeten
CODE:
package project_breakout;
import java.awt.event.*;
import javax.swing.BorderFactory;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import javax.swing.border.LineBorder;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Project_BreakOut extends JFrame {
public static void main(String[] args) {
//Maken van het frame (JFrame object)
JFrame BrickVeld = new Project_BreakOut();
BrickVeld.setSize(700, 680);
BrickVeld.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BrickVeld.setTitle("Brick Break");
BrickVeld.setContentPane(new BrickGUI());
BrickVeld.setVisible(true);
}
}
class BrickGUI extends JPanel {
private BrickPeddel modelPeddel;
private ArrayList<BrickBrick> modelBrickLijst;
private BrickBal modelBal;
private JPanel view;
private JPanel controller;
public BrickGUI() {
setLayout(new BorderLayout());
modelPeddel = new BrickPeddel(330, 600, 50, 10);
modelBrickLijst = new ArrayList();
modelBal = new BrickBal(modelPeddel, modelBrickLijst, view);
view = new BrickView(modelPeddel, modelBrickLijst, modelBal);
controller = new BrickController(modelPeddel, modelBrickLijst, modelBal, view);
add(view, BorderLayout.CENTER);
add(controller, BorderLayout.SOUTH);
}
}
class BrickPeddel {
private int xPos, yPos, breedte, hoogte;
public BrickPeddel(int xPos, int yPos, int breedte, int hoogte) {
this.xPos = xPos;
this.yPos = yPos;
this.breedte = breedte;
this.hoogte = hoogte;
}
public int getxPos() {
return xPos;
}
public int getyPos() {
return yPos;
}
public int getBreedte() {
return breedte;
}
public int getHoogte() {
return hoogte;
}
public void naarLinks() {
if (this.xPos <= 0) {
xPos += 0;
} else {
xPos -= 5;
}
}
public void naarRechts() {
if (this.xPos >= 635) {
xPos += 0;
} else {
xPos += 5;
}
}
public void setxPos(int xPos) {
this.xPos = xPos;
}
public void teken(Graphics g) {
g.setColor(Color.black);
g.fillRect(xPos, yPos, breedte, hoogte);
}
}
class BrickBrick {
private int xPos;
private int yPos;
private int breedte;
private int hoogte;
private int hitCount;
public BrickBrick(int xPos, int yPos) {
this.xPos = xPos;
this.yPos = yPos;
this.breedte = 50;
this.hoogte = 20;
this.hitCount = 1;
}
public int getHitCount() {
return this.hitCount;
}
public int getXPos() {
return this.xPos;
}
public int getYPos() {
return this.yPos;
}
public int getBreedte() {
return this.breedte;
}
public int getHoogte() {
return this.hoogte;
}
public void teken(Graphics g) {
g.setColor(Color.LIGHT_GRAY);
g.fillRect(this.xPos, this.yPos, this.breedte, this.hoogte);
g.setColor(Color.YELLOW);
g.fillRect(this.xPos + 1, this.yPos + 1, this.breedte - 2, this.hoogte - 2);
}
public void verlaagHitCount() {
this.hitCount -= 1;
}
}
class BrickBal extends Thread {
private int xPos;
private int yPos;
private int straal;
private int dx;
private int dy;
private boolean doorgaan;
private Graphics g;
private BrickPeddel modelPeddel;
private ArrayList<BrickBrick> modelBrickLijst;
private JPanel view;
public BrickBal( BrickPeddel modelPeddel, ArrayList<BrickBrick> modelBrickLijst, JPanel view) {
this.modelPeddel = modelPeddel;
this.modelBrickLijst = modelBrickLijst;
this.view = view;
this.dx = 1;
this.dy = -3;
doorgaan = true;
this.straal = 7;
this.xPos = (modelPeddel.getxPos() + modelPeddel.getBreedte() / 2 - this.straal);
this.yPos = (modelPeddel.getyPos() - 2 * this.straal);
}
public boolean getDoorgaan() {
return this.doorgaan;
}
@Override
public void run() {
while (this.doorgaan) {
view.repaint();
slaap(10);
verplaats();
}
}
public void nuStoppen() {
this.doorgaan = false;
}
public void setDoorgaan(boolean doorgaan) {
this.doorgaan = doorgaan;
}
public void setG(Graphics g) {
this.g = g;
}
public void slaap(int millisec) {
try {
Thread.sleep(millisec);
} catch (InterruptedException e) {
}
}
public void teken(Graphics g, Color kleur) {
g.setColor(kleur);
g.fillOval(this.xPos, this.yPos, 2 * this.straal, 2 * this.straal);
}
public void verplaats() {
xPos += this.dx;
yPos += this.dx;
}
}
class BrickController extends JPanel {
private BrickPeddel modelPeddel;
private BrickBal modelBal;
private ArrayList<BrickBrick> modelBrickLijst;
private JPanel view;
public BrickController(BrickPeddel modelPeddel, ArrayList<BrickBrick> modelBrickLijst, BrickBal modelBal, JPanel view) {
this.modelPeddel = modelPeddel;
this.modelBrickLijst = new ArrayList();
this.modelBal = modelBal;
this.view = view;
this.setFocusable(true);
addKeyListener(new ToetsenbordHandler());
}
class ToetsenbordHandler extends KeyAdapter {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
modelPeddel.naarRechts();
if (modelBal == null) {
modelBal = new BrickBal(modelPeddel, modelBrickLijst, view);
modelBal.start();
System.out.println("test");
}
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
modelPeddel.naarLinks();
modelBal = null;
}
view.repaint();
}
}
}
class BrickView extends JPanel {
private BrickPeddel modelPeddel;
private ArrayList<BrickBrick> modelBrickLijst;
private BrickBal modelBal;
public BrickView(BrickPeddel modelPeddel, ArrayList<BrickBrick> modelBrickLijst, BrickBal modelBal) {
this.modelPeddel = modelPeddel;
this.modelBrickLijst = new ArrayList();
this.modelBal = modelBal;
for (int x = 25; x <= 625; x += 50) {
for (int y = 25; y <= 225; y += 20) {
this.modelBrickLijst.add(new BrickBrick(x, y));
}
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
modelPeddel.teken(g);
modelBal.teken(g, Color.BLACK);
for (BrickBrick blok : this.modelBrickLijst) {
if (blok.getHitCount() > 0) {
blok.teken(g);
}
}
}
}
Voor mijn studie ICT heb ik de opdracht gekregen om een Brick Breakout te maken. Tijdens het programmeren ben ik op de volgende fout gekomen; mijn brickBal beweegt niet, ik zie het probleem niet aangezien mijn thread toch gestart wordt.
Iemand die het probleem kan oplossen?
Alvast bedankt!!
Vriendelijke groeten
CODE:
package project_breakout;
import java.awt.event.*;
import javax.swing.BorderFactory;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import javax.swing.border.LineBorder;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Project_BreakOut extends JFrame {
public static void main(String[] args) {
//Maken van het frame (JFrame object)
JFrame BrickVeld = new Project_BreakOut();
BrickVeld.setSize(700, 680);
BrickVeld.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BrickVeld.setTitle("Brick Break");
BrickVeld.setContentPane(new BrickGUI());
BrickVeld.setVisible(true);
}
}
class BrickGUI extends JPanel {
private BrickPeddel modelPeddel;
private ArrayList<BrickBrick> modelBrickLijst;
private BrickBal modelBal;
private JPanel view;
private JPanel controller;
public BrickGUI() {
setLayout(new BorderLayout());
modelPeddel = new BrickPeddel(330, 600, 50, 10);
modelBrickLijst = new ArrayList();
modelBal = new BrickBal(modelPeddel, modelBrickLijst, view);
view = new BrickView(modelPeddel, modelBrickLijst, modelBal);
controller = new BrickController(modelPeddel, modelBrickLijst, modelBal, view);
add(view, BorderLayout.CENTER);
add(controller, BorderLayout.SOUTH);
}
}
class BrickPeddel {
private int xPos, yPos, breedte, hoogte;
public BrickPeddel(int xPos, int yPos, int breedte, int hoogte) {
this.xPos = xPos;
this.yPos = yPos;
this.breedte = breedte;
this.hoogte = hoogte;
}
public int getxPos() {
return xPos;
}
public int getyPos() {
return yPos;
}
public int getBreedte() {
return breedte;
}
public int getHoogte() {
return hoogte;
}
public void naarLinks() {
if (this.xPos <= 0) {
xPos += 0;
} else {
xPos -= 5;
}
}
public void naarRechts() {
if (this.xPos >= 635) {
xPos += 0;
} else {
xPos += 5;
}
}
public void setxPos(int xPos) {
this.xPos = xPos;
}
public void teken(Graphics g) {
g.setColor(Color.black);
g.fillRect(xPos, yPos, breedte, hoogte);
}
}
class BrickBrick {
private int xPos;
private int yPos;
private int breedte;
private int hoogte;
private int hitCount;
public BrickBrick(int xPos, int yPos) {
this.xPos = xPos;
this.yPos = yPos;
this.breedte = 50;
this.hoogte = 20;
this.hitCount = 1;
}
public int getHitCount() {
return this.hitCount;
}
public int getXPos() {
return this.xPos;
}
public int getYPos() {
return this.yPos;
}
public int getBreedte() {
return this.breedte;
}
public int getHoogte() {
return this.hoogte;
}
public void teken(Graphics g) {
g.setColor(Color.LIGHT_GRAY);
g.fillRect(this.xPos, this.yPos, this.breedte, this.hoogte);
g.setColor(Color.YELLOW);
g.fillRect(this.xPos + 1, this.yPos + 1, this.breedte - 2, this.hoogte - 2);
}
public void verlaagHitCount() {
this.hitCount -= 1;
}
}
class BrickBal extends Thread {
private int xPos;
private int yPos;
private int straal;
private int dx;
private int dy;
private boolean doorgaan;
private Graphics g;
private BrickPeddel modelPeddel;
private ArrayList<BrickBrick> modelBrickLijst;
private JPanel view;
public BrickBal( BrickPeddel modelPeddel, ArrayList<BrickBrick> modelBrickLijst, JPanel view) {
this.modelPeddel = modelPeddel;
this.modelBrickLijst = modelBrickLijst;
this.view = view;
this.dx = 1;
this.dy = -3;
doorgaan = true;
this.straal = 7;
this.xPos = (modelPeddel.getxPos() + modelPeddel.getBreedte() / 2 - this.straal);
this.yPos = (modelPeddel.getyPos() - 2 * this.straal);
}
public boolean getDoorgaan() {
return this.doorgaan;
}
@Override
public void run() {
while (this.doorgaan) {
view.repaint();
slaap(10);
verplaats();
}
}
public void nuStoppen() {
this.doorgaan = false;
}
public void setDoorgaan(boolean doorgaan) {
this.doorgaan = doorgaan;
}
public void setG(Graphics g) {
this.g = g;
}
public void slaap(int millisec) {
try {
Thread.sleep(millisec);
} catch (InterruptedException e) {
}
}
public void teken(Graphics g, Color kleur) {
g.setColor(kleur);
g.fillOval(this.xPos, this.yPos, 2 * this.straal, 2 * this.straal);
}
public void verplaats() {
xPos += this.dx;
yPos += this.dx;
}
}
class BrickController extends JPanel {
private BrickPeddel modelPeddel;
private BrickBal modelBal;
private ArrayList<BrickBrick> modelBrickLijst;
private JPanel view;
public BrickController(BrickPeddel modelPeddel, ArrayList<BrickBrick> modelBrickLijst, BrickBal modelBal, JPanel view) {
this.modelPeddel = modelPeddel;
this.modelBrickLijst = new ArrayList();
this.modelBal = modelBal;
this.view = view;
this.setFocusable(true);
addKeyListener(new ToetsenbordHandler());
}
class ToetsenbordHandler extends KeyAdapter {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
modelPeddel.naarRechts();
if (modelBal == null) {
modelBal = new BrickBal(modelPeddel, modelBrickLijst, view);
modelBal.start();
System.out.println("test");
}
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
modelPeddel.naarLinks();
modelBal = null;
}
view.repaint();
}
}
}
class BrickView extends JPanel {
private BrickPeddel modelPeddel;
private ArrayList<BrickBrick> modelBrickLijst;
private BrickBal modelBal;
public BrickView(BrickPeddel modelPeddel, ArrayList<BrickBrick> modelBrickLijst, BrickBal modelBal) {
this.modelPeddel = modelPeddel;
this.modelBrickLijst = new ArrayList();
this.modelBal = modelBal;
for (int x = 25; x <= 625; x += 50) {
for (int y = 25; y <= 225; y += 20) {
this.modelBrickLijst.add(new BrickBrick(x, y));
}
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
modelPeddel.teken(g);
modelBal.teken(g, Color.BLACK);
for (BrickBrick blok : this.modelBrickLijst) {
if (blok.getHitCount() > 0) {
blok.teken(g);
}
}
}
}