Toon posts:

[java]redeneringsfout in code

Pagina: 1
Acties:
  • 46 views sinds 30-01-2008

Verwijderd

Topicstarter
hoi, in onderstaande code staat dus ergens een fout, het is dus een deel van het spelletje breakout of arkanoid. Er zou fout moeten verschijnen als het balletje de peddel mist maar hij toont altijd fout, of het balletje de peddel nu raakt of niet. Volgens mij ligt de fout bij de code in methode controlleerPeddel() maar heb al verschillende dingen geprobeerd, hij geeft altijd hetzelfde


import javax.swing.*;

public class Bal implements Runnable{
private Class image;
private JLabel balLabel;
private int x,y;
private boolean lOmhoog, rOmhoog, lOmlaag, rOmlaag;
private JFrame frame;
private Thread thread;
private int xPeddel;
private int breedte;
private int hoogte;


//constructor
public Bal(JFrame frame,int xPeddel){
image = this.getClass();
ImageIcon balleke = new ImageIcon(image.getResource("bal.gif"));
balLabel = new JLabel(balleke);
this.x = 200;
this.y = 300;
this.breedte = 23;
this.hoogte = 24;
balLabel.setBounds(x,y,breedte,hoogte);
frame.getContentPane().add(balLabel);
lOmhoog = false;
rOmhoog = false;
lOmlaag = false;
rOmlaag = true;
this.frame = frame;
thread = new Thread(this);
thread.setDaemon(true);//bij sluiten programma en dus hoofdtread sluiten de subtreads ook
thread.start();

}

// de getters

public int getX() { return this.x = x; }
public int getY() { return this.y = y; }
public boolean getLOmhoog() { return this.lOmhoog = lOmhoog; }
public boolean getLOmlaag (){ return this.lOmlaag = lOmlaag; }
public boolean getROmhoog() { return this.rOmhoog = rOmhoog; }
public boolean getROmlaag (){ return this.rOmlaag = rOmlaag; }
public int getBreedte(){return this.breedte = breedte;}
public int getHoogte(){return this.hoogte = hoogte; }


public void run(){
try{
while(true)
{
controlleer();
Thread.sleep(10);
}
}
catch(Exception e){
System.out.println("fout in Bal");

}
}

public void controlleer(){
if(x<0 && lOmhoog) rechtsomhoog();
else if (x<0 && lOmlaag) rechtsomlaag();
else if (x+30 > frame.getWidth() && rOmhoog) linksomhoog();
else if (x+30 > frame.getWidth() && rOmlaag) linksomlaag();
else if (y<0 && lOmhoog) linksomlaag();
else if (y<0 && rOmhoog) rechtsomlaag();
else if (y > frame.getHeight()-100 && rOmlaag) controlleerPeddel();
else if (y > frame.getHeight()-100 && lOmlaag) controlleerPeddel();
else
{
if (lOmhoog) linksomhoog();
else if (lOmlaag) linksomlaag();
else if (rOmhoog) rechtsomhoog();
else if (rOmlaag) rechtsomlaag();
}
balLabel.setLocation(x,y);

}

public void controlleerPeddel(){
if (x+30 > xPeddel && x-30 < xPeddel+60 &&rOmlaag) rechtsomhoog();
else if (x+30+ y > y && y+10 > y- 30 && lOmlaag) linksomhoog();
else System.out.println("dood");

}

public void linksomhoog(){

x--;
y--;
valseMaken();
lOmhoog = true;

}

public void rechtsomhoog(){
x++;
y--;
valseMaken();
rOmhoog = true;

}

public void linksomlaag(){
x--;
y++;
valseMaken();
lOmlaag = true;
}

public void rechtsomlaag(){
x++;
y++;
valseMaken();
rOmlaag = true;
}

private void valseMaken(){
rOmhoog = false;
rOmlaag = false;
lOmhoog = false;
lOmlaag = false;
}

}


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Peddel implements KeyListener, Runnable{
private Class image;
private JLabel peddelLabel;
private int x= 5;
private int y;
private JFrame frame;
private Thread thread;


//constructor
public Peddel(JFrame frame){

image = this.getClass();
ImageIcon peddelke = new ImageIcon(image.getResource("peddel.gif"));
peddelLabel = new JLabel(peddelke);
this.x = x;
this.y = 430;

frame.getContentPane().add(peddelLabel);
this.frame = frame;
thread = new Thread(this);
thread.setDaemon(true);//bij sluiten programma en dus hoofdtread sluiten de subtreads ook
thread.start();
peddelLabel.addKeyListener(this);
peddelLabel.requestFocus();


}

public void run(){
try{
while(true)
{
//controlleer();
Thread.sleep(10);
peddelLabel.setBounds(x,y,60,10);
peddelLabel.requestFocus();


}
}
catch(Exception e){
System.out.println("fout in Peddel");

}
}

//de getters

public int getX(){ return this.x = x; }
public int getY() { return this.y = y; }

//de setters
public int setX(int nieuweX){return this.x = nieuweX; }
public int setY(int nieuweY){return this.y = nieuweY; }


public void keyTyped(KeyEvent e){ }
public void keyPressed(KeyEvent e){
switch(e.getKeyCode()){

case(KeyEvent.VK_LEFT) :
if(x < 0)
x = 0;
if (x > 400)
x = 400;

this.x = x-20;break;


/*case(KeyEvent.VK_P):
pauze=!pauze;
break;*/
case(KeyEvent.VK_RIGHT):
if(x < 0)
x = 80;
if (x > 430)
x = 430;

this.x = x +20;

break;

}
}

public void keyReleased(KeyEvent e){}


}

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
ahem. code tags zou helpen, plus de foutmelding die je krijgt. Je verwacht toch niet serieus dat we dit stuk code helemaal gaan doorspitten of wel?

[edit] ik lees het nu even door, maar ik snap er geen hout van. Wordt je zelf wel wijs uit deze code? Tip: spring goed in, en plemp die ingewikkelde if statements met meerdere condities niet zo plat achter elkaar. Als ik jou was zou ik eerst eens beginnen met op papier zetten wat er nu precies moet gebeuren, en dan pas beginnen met programmeren.

[ Voor 55% gewijzigd door zneek op 04-08-2004 20:26 ]


Verwijderd

Topicstarter
dat is em juist, ik krijg geen foutmelding en neen ik verwacht dit helemaal niet
maar ik dacht dat de code wel handig zou zijn om te zien wat er mis is, met de klasse Peddel zou er niets moeten gebeuren dus dat stuk valt al helemaal weg, het is gewoon het stukje code hieronder waar er iets mis aan zou zijn

public void controlleerPeddel(){
if (x+30 > xPeddel && x-30 < xPeddel+60 &&rOmlaag) rechtsomhoog();
else if (x+30+ y > y && y+10 > y- 30 && lOmlaag) linksomhoog();
else System.out.println("dood");

}

De code is versprongen door te copy pasten

[ Voor 16% gewijzigd door Verwijderd op 04-08-2004 20:29 ]


  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 14:07
Wilde gok hoor maar wat gebeurd er als je een paar haajes in je if-statement doet? Ik weet zo niet uit het hoofd wat de prioriteiten van "&&, ||, <, >, etc" is. Alleen is het maar om het leesbaar te maken. Dan krijg je zoiets (voorbeeld dus):

Java:
1
2
3
4
5
6
7
8
public void controlleerPeddel(){
  if ((x+30 > xPeddel) && (x-30 < xPeddel+60 ) && rOmlaag)
    rechtsomhoog();
  else if ((x+30+y > y) && (y+10 > y-30) && lOmlaag)
    linksomhoog();
  else
    System.out.println("dood");
}

  • nxt
  • Registratie: November 2001
  • Laatst online: 04-02 09:36

nxt

Verwijderd schreef op 04 augustus 2004 @ 20:27:...
De code is versprongen door te copy pasten
zneek bedoeld of je de code ff tussen [ code] en [ /code] tags wilt zetten
dan blijft de opmaak behouden

maar als ik er zo doorheen scroll, vraag ik me het volgende af
- wordt de variabele xPeddel in de class Bal wel geupdate?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Afgezien van de enorme onleesbare lap code gaan wij niet voor je debuggen, dat mag je zelf doen.

Isoleer het probleem, breng wat logging aan (!!!) maak het probleem zichtbaar op het scherm of wat dan ook. En als je dan 10~20 regels code hebt met een probleem waar je niet uitkomt, maak dan met [code]-tags en volgens P&W FAQ - De "quickstart" een nieuw topic :)

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Zie trouwens ook het slot op je vorige topic: [rml]gorgi_19 in "[ JAVA]Arkanoid"[/rml]

Professionele website nodig?

Pagina: 1

Dit topic is gesloten.