Archief - Schaken in java

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Arboris

Legacy Member
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 :)

MilM

Legacy Member
Arboris zei:
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 :p

Best dus -1 van maken ofzo.

Arboris

Legacy Member
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.

cuinhel

Legacy Member
Arboris zei:
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 :D

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.

cuinhel

Legacy Member
MilM zei:
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

Dit heb ik een beetje aangepast, wel ongeveer dezelfde redenering gebruikt:

public void mouseClicked(MouseEvent e)
{
int schermX = e.getX();
int schermY = e.getY();

int bordX = view.getKolom(schermX);
int bordY = view.getRij(schermY);

// ofwel is dit de eerste klik
if (gekozenX == -1) {
gekozenX = bordX;
gekozenY = bordY;
// view.selecteer(gekozenX,gekozenY);
}
// ofwel is de tweede klik
else {
// hetzelfde
if (gekozenX == bordX && gekozenY == bordY) {
gekozenX = -1;
gekozenY = -1;
}
else {
// of een nieuwe
level.beweegStuk(gekozenX, gekozenY, bordX, bordY);
gekozenX = -1;
gekozenY = -1;
}
}
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan