Ik ben begonnen met het maken van een pong spelletje voor 1 persoon. Ik ben al een aardig eind gekomen maar liep tegen een muur aan.
De bal moet door het gehele applet bouncen maar wanneer de bal aan de rechter komt komt is de bal uit en begint het opnieuw. uiteraard moet deze bal kunnen worden tegengehouden door een klein balkje en weer terugbouncen het veld in. dit balkje moet te bedienen zijn met de up en down toetsen.
echter heb ik een probleempje om mijn keylistener te laten luisteren en daarmee mijn balkje te laten bewegen en de bal ervan af te laten stuiteren.
Ik hoop dat jullie mij kunnen helpen.
Alvast bedankt.
De bal moet door het gehele applet bouncen maar wanneer de bal aan de rechter komt komt is de bal uit en begint het opnieuw. uiteraard moet deze bal kunnen worden tegengehouden door een klein balkje en weer terugbouncen het veld in. dit balkje moet te bedienen zijn met de up en down toetsen.
echter heb ik een probleempje om mijn keylistener te laten luisteren en daarmee mijn balkje te laten bewegen en de bal ervan af te laten stuiteren.
Code:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
@SuppressWarnings("serial")
public class opdracht extends Applet {
private Veld veld;
private Bal bal;
private Button startKnop, pauzeKnop, gadoorKnop, stopKnop;
private Plank plank;
//public int x = 300;
//public int y = 100;
public void init() {
veld = new Veld( this, 50, 320, 200, 50 );
plank = new Plank (this,300,130,0 );
startKnop = new Button( "Start" );
pauzeKnop = new Button( "Pauze" );
gadoorKnop = new Button( "Ga door" );
stopKnop = new Button( "Stop" );
KnopHandler handler = new KnopHandler();
startKnop.addActionListener( handler );
stopKnop.addActionListener( handler );
gadoorKnop.addActionListener( handler );
pauzeKnop.addActionListener( handler );
add( startKnop );
add( pauzeKnop );
add( gadoorKnop );
add( stopKnop );
addKeyListener (new toetsenHandler());
System.out.println("keyboardhandler");
requestFocus();
}
class toetsenHandler extends KeyAdapter implements KeyListener{
//private int x;
//private int y;
public void keyPressed(KeyEvent e){
int keyCode = e.getKeyCode();
switch(keyCode){
case KeyEvent.VK_DOWN:
plank.y += 10;
System.out.println("down");
break;
case KeyEvent.VK_UP:
plank.y -= 10;
System.out.println("up");
break;
}
repaint();
}
}
public void paint( Graphics g ) {
veld.teken();
plank.teken();
//g.fillRect(x,y,10,60);
}
public void start() {
if( bal == null ) {
bal = new Bal( this, plank, 10, getBackground(), veld );
bal.start();
}
}
public void stop() {
if( bal != null ) {
bal.nuStoppen();
bal = null;
}
}
class KnopHandler implements ActionListener {
public void actionPerformed( ActionEvent e ) {
if( e.getSource() == startKnop ) {
start();
}
if( e.getSource() == pauzeKnop ) {
if( bal != null ) {
bal.pauzeer();
}
}
if( e.getSource() == gadoorKnop ) {
if( bal != null ) {
bal.pauzeVoorbij();
}
}
if ( e.getSource() == stopKnop ) {
stop();
}
}
}
}
class Veld {
private Graphics g;
public int links, boven, rechts, onder;
Veld( Applet applet, int links, int rechts, int onder, int boven ) {
g = applet.getGraphics();
this.links = links;
this.rechts = rechts;
this.onder = onder;
this.boven = boven;
}
void teken() {
int breedte = rechts - links, hoogte = onder - boven;
g.setColor( Color.black );
g.drawRect( links, boven, breedte, hoogte );
g.setColor( Color.white );
g.fillRect( links + 1, boven + 1, breedte - 1, hoogte - 1 );
}
}
class Bal extends Thread {
private Graphics g;
private int grootte;
private int x, y;
private int dx = 3, dy = 2;
private Color wisKleur;
private Veld veld;
private boolean isPauze, doorgaan;
public Bal( Applet applet, Plank mijnPlank, int grootte, Color wisKleur, Veld veld ) {
g = applet.getGraphics();
this.grootte = grootte;
this.wisKleur = wisKleur;
this.veld = veld;
doorgaan = true;
}
public void teken() {
g.setColor( Color.red );
g.fillOval( x, y, grootte, grootte );
}
public void wis() {
g.setColor( wisKleur );
g.fillOval( x, y, grootte, grootte );
}
public void verplaats() {
if( x + dx <= veld.links) dx = -dx;
if( y + dy <= veld.boven ||
y + dy + grootte >= veld.onder ) dy = -dy;
if(x +dy + grootte >= veld.rechts) run();
//if(x +dy + grootte >= mijnPlank) dx = -dx;
x += dx; y += dy;
}
public void nuStoppen() {
doorgaan = false;
}
public void pauzeer() {
isPauze = true;
}
public synchronized void pauzeVoorbij() {
isPauze = false;
notify();
}
private synchronized void controleerPauze()
throws InterruptedException {
while( isPauze ) {
wait();
}
}
public void run() {
x = veld.links + 1;
y = veld.boven + 1;
while( doorgaan ) {
teken();
slaap( 50 );
wis();
verplaats();
}
}
public void slaap( int millisec ) {
try {
sleep( millisec );
controleerPauze();
}
catch( InterruptedException e ) {
}
}
}
class Plank extends Thread {
private Graphics g;
private int x;
public int y;
private int BREEDTE =10;
private int HOOGTE =50;
private int maxY;
public Plank (Applet applet,int x, int y, int hoogte) {
g = applet.getGraphics();
this.x = x;
this.y = y;
this.maxY = hoogte;
}
void teken(){
g.setColor(Color.black);
g.fillRect(x,y,BREEDTE,HOOGTE);
}
}
Ik hoop dat jullie mij kunnen helpen.
Alvast bedankt.
Laatst bewerkt: