Thread: Schaken in java
-
01-05-2011, 17:35 #31Member
- Registered
- 18/02/05
- Posts
- 106
- iTrader
- 0
- Mentioned
- 0 Post(s)
hoi allemaal,
Ik heb het eff wat druk gehad, maar ben nu terug vollop bezig aan men spel
Maar ik heb weer een fout waar ik niet vanaf geraak. Dit is bij mijn mouselistener. Ik krijg een exception maar weet niet waarom.
code:
De errors komen als ik mijn muis indruk in het scherm en loslaat.import java.awt.event.*;
public class Controller implements MouseListener
{
private View view;
private Level level;
private int z, f, breedte;
public Controller(Level level, View view)
{
level = level;
view = view;
z = 0;
f = 0;
view.addMouseListener(this);
}
public void mousePressed(MouseEvent e)
{
try
{
level.setCoordinaten(e.getX(), e.getY());
}
catch(Exception f)
{
System.out.println("some Exception");
}
}
public void mouseExited(MouseEvent e)
{
}
public void mouseClicked(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
try
{
level.beweeg(e.getX(),e.getY());
}
catch(Exception f)
{
}
}
}no votes
-
-
01-05-2011, 17:53 #32Member
- Registered
- 29/03/10
- Location
- Temse
- Posts
- 51
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 1/1
Wat is de stacktrace die je krijgt? (je slikt nu exceptions in, is niet altijd een goeie zaak
Wat je wel al kunt doen, is ipv System.out.println(some string) te doen, gewoon de stacktrace naar je console sturen (door f.printStackTrace(); op te roepen; dit onderbreekt je programma nog altijd niet, maar geeft wel een hoop meer informatie)
In je constructor maak je een fout: je assignt level aan level (beide dezelfde, lokale variabele); hierdoor blijft de class variabele level null.
Hierdoor krijg je dus nullpointers.
Hoe dan wel?
Uitleg (altijd duidelijk dan dat ik het zelf zou proberenCode:this.level = level
): Using the this Keyword (The Java™ Tutorials > Learning the Java Language > Classes and Objects)
Not every story has explosions and car chases. That's why they have nudity and espionage.no votes
-
01-05-2011, 18:00 #33Member
- Registered
- 18/02/05
- Posts
- 106
- iTrader
- 0
- Mentioned
- 0 Post(s)
dat was inderdaad een van de fouten
de andere fouten zitten blijkbaar in men level
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 318
at Level.beweeg(Level.java:85)
at Controller.mouseReleased(Controller.java:45)
at java.awt.Component.processMouseEvent(Component.jav a:6289)
at java.awt.Component.processEvent(Component.java:605 4)
at java.awt.Component.dispatchEventImpl(Component.jav a:4652)
at java.awt.Component.dispatchEvent(Component.java:44 82)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.j ava:644)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:603)
at java.awt.EventQueue$1.run(EventQueue.java:601)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectio nPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectio nPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:617)
at java.awt.EventQueue$2.run(EventQueue.java:615)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectio nPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 614)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(E ventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:122)
public void setCoordinaten( int z, int f)
{
z = z/80;
f = f/80;
}
public void beweeg (int r, int o)
{
Schaakstuk vw = rooster[z][f];
if(vw instanceof Pion)
{
Pion pion = (Pion)vw;
rooster[r][o] = vw;
rooster[z][f] = null;
}
}no votes
-
01-05-2011, 18:08 #34Member
- Registered
- 29/03/10
- Location
- Temse
- Posts
- 51
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 1/1
Als regel 85 -> Schaakstuk vw = rooster[z][f];
z of f is 318
Als regel 85 -> rooster[r][o] = vw;
r of o is 318
Kan je debuggen met je IDE? Dan kan je kijken waar dat getal vandaan komt. En anders moet je het doen met system outs.Not every story has explosions and car chases. That's why they have nudity and espionage.no votes
-
01-05-2011, 19:39 #35Member
- Registered
- 20/09/04
- Location
- Kortrijk / Gent
- Posts
- 7,177
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 3/43
Bij uw mouseReleased gebruik je de X en Y positie van de muis rechtstreeks in uw tabel in de beweeg methode.
Je moet die r en o ook delen door 80 veronderstel ik.
Ik veronderstel dat je die 80 trouwens uitgerekend hebt aan de hand van de fixed grootte van uw View?
Je kan trouwens ook overwegen om met MouseClicked te werken. Is mss handiger voor een gebruiker dat hij eerst op het schaakstuk klikt en daarna op de bestemming? (zonder dus ingedrukt te moeten houden)no votes
-
01-05-2011, 21:02 #36Member
- Registered
- 18/02/05
- Posts
- 106
- iTrader
- 0
- Mentioned
- 0 Post(s)
je hebt gelijk!!
man man zo dom, en daar heb ik zo lang achter liggen zoeken xD
Ja dat is idd makkelijker, alleen om het te programmeren vind ik wat moeilijker.
Misschien een tip?
Moet ik dan als ik klik iets true maken, en dan als ik nog eens klik ook kijken bij elk stuk als er iets true is geworden?no votes
-
01-05-2011, 21:10 #37Member
- Registered
- 18/02/05
- Posts
- 106
- iTrader
- 0
- Mentioned
- 0 Post(s)
nog een gek probleem, als ik een pion beweeg, kan ik daarna geen meer bewegen

dus ik kan maar 1 x een zet doen, and thats itno votes
-
01-05-2011, 21:10 #38Member
- Registered
- 29/03/10
- Location
- Temse
- Posts
- 51
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 1/1
Dat zou inderdaad een oplossing kunnen zijn, in 'Schaakstuk' een variabele 'activated' bijhouden, en die dan iedere keer op- of afzetten. (dat laatste zeker niet vergeten :P )
Kan je nog fancy gaan; als er een 2e keer gedrukt wordt, zet je activated terug af; verander background van activated stukken;...
Zet anders uw code nog eens online, is gemakkelijker om te volgen
Not every story has explosions and car chases. That's why they have nudity and espionage.no votes
-
01-05-2011, 21:11 #39Member
- Registered
- 20/09/04
- Location
- Kortrijk / Gent
- Posts
- 7,177
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 3/43
Kan met boolean, maar hoeft niet.
Je houdt ergens de waarde bij van waar geklikt werd. Bijvoorbeeld private int r en private int c (van row en column).
In mouseClicked() werk je met drie if/else lussen.
Pak dat x en y de positie van de muis is gedeeld door 80.
if(r == 0 || c == 0)
Indien zo: er is nog geen vakje geklikt, dus r = y en c = x
else if(r == y && c == x)
User klikt op zelfde vakje nog eens -> user wil zijn selectie dus cancellen
doe r == 0 en c ==0
else
Beweeg stuk van r,c naar y,x
zet r en c terug op 0no votes
-
01-05-2011, 21:16 #40Member
- Registered
- 18/02/05
- Posts
- 106
- iTrader
- 0
- Mentioned
- 0 Post(s)
no votes
-
01-05-2011, 21:47 #41Member
- Registered
- 18/02/05
- Posts
- 106
- iTrader
- 0
- Mentioned
- 0 Post(s)
mijn heel spel:
MEGAUPLOAD - The leading online storage and file delivery service
Maar ik kan niks meer bewegen. Hij slaat wel waardes op enz, maar hij doet de stap beweeg niet. En ik zie niet onmiddelijk waarom niet.no votes
-
02-05-2011, 20:47 #42Member
- Registered
- 29/03/10
- Location
- Temse
- Posts
- 51
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 1/1
Ik zie zelf geen stukken verschijnen als ik het run

Edit: zie het al, image wordt niet gevonden als ik het run.
Ik zie dat je het stukje code van MilM hebt overgenomen; ben je zeker dat dit klopt? ( is [0][0] niet de beginpositie van een toren? Dat betekent dat je je toren nooit gaat kunnen verplaatsen).
Kan pakken korter.Code:if (vw instanceof Pion) { Pion p = (Pion)vw; if (p.getSpeler() == 1) // 1 = wit { if ((i+j)%2 ==0) { Image image = Toolkit.getDefaultToolkit().getImage("PionRood.jpg"); g2.drawImage(image, x, y, breedte,breedte , null); } else { Image image = Toolkit.getDefaultToolkit().getImage("PionWit.jpg"); g2.drawImage(image, x, y, breedte,breedte , null); } } else { if ((i+j)%2 ==0) { Image image = Toolkit.getDefaultToolkit().getImage("PionRoodZ.jpg"); g2.drawImage(image, x, y, breedte,breedte , null); } else { Image image = Toolkit.getDefaultToolkit().getImage("PionWitZ.jpg"); g2.drawImage(image, x, y, breedte,breedte , null); } } }
1. je berekent welke achtergrond het moet zijn. Maak achtergrond gewoon transparant van uw gifs, en die logica kan weg.
2. zet de image naam in de implementaties van Schaakstuk. Als je een abstracte methode aanmaakt in Schaakstuk (bv 'geefImageNaam()', en je implementeert die op de individuele stukken (bv pion: if(getSpeler==1 return "pionWit" else return "pionRood" ) kan je gewoon vw.geefImageNaam() oproepen.
En check je pms
Not every story has explosions and car chases. That's why they have nudity and espionage.no votes
-
02-05-2011, 21:58 #43Member
- Registered
- 20/09/04
- Location
- Kortrijk / Gent
- Posts
- 7,177
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 3/43
no votes
-
02-05-2011, 22:06 #44Member
- Registered
- 29/03/10
- Location
- Temse
- Posts
- 51
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 1/1
Ik had het daarstraks al gezien, maar heb gewoon eventjes gewacht om het te vermelden
En de vraag of het klopte was dan ook meer naar cuinhel gericht dan naar jou 
En inderdaad, -1 of een andere, duidelijk constante is even goed
Voor mij zou het zelfs het properste zijn als je die static final declareert in je klasse.
Not every story has explosions and car chases. That's why they have nudity and espionage.no votes
-
04-05-2011, 13:42 #45Member
- Registered
- 18/02/05
- Posts
- 106
- iTrader
- 0
- Mentioned
- 0 Post(s)
ja dat had ik geprobeerd, maar het was me niet gelukt

ik wou het spel eigenlijk ongeveer afkrijgen en dan verbeteren, zodat ik toch al wat heb wat ik zou kunnen laten zien aan de docent.
Op het moment bewegen men paardjes juist en men pionnen.
Voor de lopers ben ik een algemene code aan het zoeken.no votes


