[Java] Klikken op punten (kamertjeverhuur)

Status
Niet open voor verdere reacties.

niekfct

Terugkerende gebruiker
Lid geworden
19 jul 2006
Berichten
1.563
Hoi

Ik heb een soort van Quattro/kamertjeverhuur gemaakt, waarbij 2 (of meer) computerspelers tegen elkaar spelen. Nu is het mooiste natuurlijk dat er ook een 'mens' mee kan doen, door een lijn te kiezen door op 2 punten te klikken, of op de lijn zelf.

Hoe moet ik dit aanpakken? De punten en lijnen die worden getekend zijn geen objecten, maar worden gewoon met de methode paint getekend.

Een voorbeeld van het programma:
attachment.php


Een domme computer kiest een willekeurige lijn,
een slimme computer kijkt of hij een vakje vol kan maken, en doet dat, anders willekeurig
een perfecte computer kijkt of hij een vakje vol kan maken, doet dat, anders willekeurig, TENZIJ hij hierdoor de tegenstander de kans geeft om een vakje vol te maken.

Het eerste venster (op het plaatje rechts) is slechts een heel simpel startvenster. Het aantal spelers, aantal vakjes en natuurlijk de mensspeler moeten nog toegevoegd worden.


Een .jar file en de source code staat in de bijlage (jar staat in 'dist').

Hoe pak ik het mensspeler probleem aan?

p.s. de JComboBox-en op het plaatje hebben geen pijl rechts. Hoe zit dit?
 

Bijlagen

  • Quattro.jpg
    Quattro.jpg
    37,8 KB · Weergaven: 56
  • Quattro v2.zip
    63,4 KB · Weergaven: 12
Laatst bewerkt:
Je zou gebruik kunnen maken van een MouseListener
Zodra je een onClick event triggered dat hij dan de x en y coordinaat opvraagt op het geklikte punt. Vervolgens zal hij het dichtstbijzijnde punt waar een lijn of een hoekpunt zit pakken en deze dan gebruiken als referentiepunt.
 
Zoiets had ik ook al gedacht, maar hoe kom ik dan bij het benodigde punt? (Een punt heeft wel instantievariabelen met de X en Y coordinaten).

Dat dichtstbijzijnde helpt in ieder geval al, ik zat zelf dus ook aan dit te denken, maar dan op het punt zelf, en het is best lastig om precies op (50,50) te klikken :p
 
Als jij vakken hebt van 50x50
Dan heb je dus punten zitten op: 0, 50, 100, 150, etc.

Als jij dan op 145, 49 klikt (x,y)
dan weet je dat bij de eerste 150 het dichtsbijzijnde is en bij de tweede 50 dichtsbijzijnde is.
Dus moet je dan coördinaat 150,50 hebben.
 
ah, het is me gelukt :D Heb op de canvas een mouselistener aangemaakt, en hier in o.a. het volgende staan:

Code:
for (punt=0; !gevonden && punt < bord.getAantalPunten(); punt++)
            {
                if ((bord.getPunt(punt).getX() - e.getX()) <= (20) && (e.getX() - bord.getPunt(punt).getX()) <= (20) && (bord.getPunt(punt).getY() - e.getY()) <= (20) && (e.getY() - bord.getPunt(punt).getY()) <= (20))
                    gevonden=true;
            }

Bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan