Page 3 of 4 First 1234 Last

Thread: Schaken in java

  1. #31

    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:

    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)
    {
    }
    }
    }
    De errors komen als ik mijn muis indruk in het scherm en loslaat.
    no votes  

  2. #32
    Arboris's Avatar
    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?
    Code:
    this.level = level
    Uitleg (altijd duidelijk dan dat ik het zelf zou proberen ): 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  

  3. #33

    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  

  4. #34
    Arboris's Avatar
    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  

  5. #35

    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  

  6. #36

    Registered
    18/02/05
    Posts
    106
    iTrader
    0
    Mentioned
    0 Post(s)
    Quote Originally Posted by MilM View Post
    This quote is hidden because you are ignoring this member. Show
    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)
    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  

  7. #37

    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 it
    no votes  

  8. #38
    Arboris's Avatar
    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  

  9. #39

    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 0
    no votes  

  10. #40

    Registered
    18/02/05
    Posts
    106
    iTrader
    0
    Mentioned
    0 Post(s)
    Quote Originally Posted by MilM View Post
    This quote is hidden because you are ignoring this member. Show
    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 0
    Ik denk dat dit idd wel een goede oplossing is bedankt!
    ik ga het zo proberen, en daarna men code nog eens uploaden
    no votes  

  11. #41

    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  

  12. #42
    Arboris's Avatar
    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).

    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);
                             }
                         }
                    }
    Kan pakken korter.
    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  

  13. #43

    Registered
    20/09/04
    Location
    Kortrijk / Gent
    Posts
    7,177
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    3/43
    Quote Originally Posted by Arboris View Post
    This quote is hidden because you are ignoring this member. Show
    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).
    Aangezien [0][0] normaal gezien inderdaad een bestaande positie is in een tabel, was dat geen goedgekozen waarde in mijn voorbeeld

    Best dus -1 van maken ofzo.
    no votes  

  14. #44
    Arboris's Avatar
    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  

  15. #45

    Registered
    18/02/05
    Posts
    106
    iTrader
    0
    Mentioned
    0 Post(s)
    Quote Originally Posted by Arboris View Post
    This quote is hidden because you are ignoring this member. Show
    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).

    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);
                             }
                         }
                    }
    Kan pakken korter.
    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
    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  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in