Toon posts:

[java] speler bewegen aan de hand van buurobjecten

Pagina: 1
Acties:

Onderwerpen


  • DonnyR
  • Registratie: November 2009
  • Laatst online: 03-05 21:22
Beste tweakers,

Ik heb een speler en deze moet ik laten bewegen aan de hand van zijn buurvelden(objecten)
De buurvelden worden bijgehouden in een HashMap<Richting r, Veld v>
Richting is een enum met rechts,links,enz

Ik kan nu naar boven,links,linksboven en rechtsboven

Naar mijn weten is
links c-1
rechts c+1
boven row-1
onder row+1
Of zie ik dit verkeerd?

Probleem: Hij wilt niet naar onder, rechts, rechtsonder of linksonder.

code voor de buren te zetten per veld:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
                 Veld v = this.veld[row][c];
                    if (row > 0)
                        v.setBuurvelden(Richting.BOVEN, this.veld[row-1][c]);
                    if (row > 0 && c > 0)
                        v.setBuurvelden(Richting.LINKSBOVEN, this.veld[row-1][c-1]);
                    if (row > 0 && c < veld[row].length)
                        v.setBuurvelden(Richting.RECHTSBOVEN, this.veld[row-1][c+1]);
                    if (row < veld.length)
                        v.setBuurvelden(Richting.ONDER, this.veld[row+1][c]);
                    if (row < veld.length && c > 0)
                        v.setBuurvelden(Richting.LINKSONDER, this.veld[row+1][c-1]);
                    if (row < veld.length && c < veld[row].length)
                        v.setBuurvelden(Richting.RECHTSONDER, this.veld[row+1][c+1]);
                    if (c > 0)
                        v.setBuurvelden(Richting.LINKS, this.veld[row][c-1]);
                    if (c < veld[row].length)
                        v.setBuurvelden(Richting.RECHTS, this.veld[row][c+1]);


kan ook nog de hele method neerzetten maar dan wordt het wel erg veel code

Als iemand de oplossing weet hoor ik dat graag

Bij voorbaat dank,

Donny

[Voor 255% gewijzigd door RobIII op 08-06-2011 19:27]


  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Wat bedoel je met "Hij wilt niet naar onder, rechts, rechtsonder of linksonder"? Krijg je een foutmelding? Waar in je code? Heb je al gedebugged of de waardes van de buurvelden zijn wat je er van verwacht?

"Any sufficiently advanced technology is indistinguishable from magic."


  • DonnyR
  • Registratie: November 2009
  • Laatst online: 03-05 21:22
Herko_ter_Horst schreef op woensdag 08 juni 2011 @ 15:28:
Wat bedoel je met "Hij wilt niet naar onder, rechts, rechtsonder of linksonder"? Krijg je een foutmelding? Waar in je code? Heb je al gedebugged of de waardes van de buurvelden zijn wat je er van verwacht?
Wat ik bedoel is, de buren onder, rechts, rechtsonder en linksonder worden niet geset.
Deze zet hij op null. En ik wil dat deze ook veld objecten krijgen.
Omdat deze posities null zijn kan ik er nu niet naartoe worden bewogen.

Krijg geen errors tijdens compile of runtime.

De waardes van boven,links,linksboven,rechtsboven zijn zoals verwacht.
Alleen de andere richtingen niet.

[Voor 8% gewijzigd door DonnyR op 08-06-2011 15:42]


  • gerbennn
  • Registratie: November 2003
  • Laatst online: 27-05 13:03
Je zult wel wat meer informatie moeten geven over de code die je nu hebt en wat het probleem nu eigenlijk is.
Ik heb een speler en deze moet ik laten bewegen aan de hand van zijn buurvelden(objecten)
Een speler (object neem ik aan?) wil je laten bewegen (naar een ander veld neem ik aan?) aan de hand van zijn buurvelden (wat is het criteria voor die beweging dan?).
De speler staat nu ook al op een veld? Zo ja, waar wordt dat bijgehouden.
De buurvelden worden bijgehouden in een HashMap<Richting r, Veld v>
Richting is een enum met rechts,links,enz

Ik kan nu naar boven,links,linksboven en rechtsboven

Naar mijn weten is
links c-1
rechts c+1
boven row-1
onder row+1
Of zie ik dit verkeerd?


Probleem: Hij wilt niet naar onder, rechts, rechtsonder of linksonder.
Zonder nadere informatie over de datastructuur die je gebruikt is hier niets zinnigs over te zeggen. Misschien is het verstandig om je probleem eerst goed, ondubbelzinnig onder woorden te brengen. Anders wordt het wel heel lastig om je te helpen :)

</signature>


  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Hoe wordt het veld-array gevuld? Als je dit met twee geneste for-loops van linksboven naar rechtsonder doet en voor elk veld direct probeert de buurvelden te zetten, is het niet zo gek dat de buurvelden die later komen nog niet gezet zijn...

"Any sufficiently advanced technology is indistinguishable from magic."


  • DonnyR
  • Registratie: November 2009
  • Laatst online: 03-05 21:22
Herko_ter_Horst schreef op woensdag 08 juni 2011 @ 16:03:
Hoe wordt het veld-array gevuld? Als je dit met twee geneste for-loops van linksboven naar rechtsonder doet en voor elk veld direct probeert de buurvelden te zetten, is het niet zo gek dat de buurvelden die later komen nog niet gezet zijn...
En ik heb 1 for each en 1 for loop.
De positie van de speler wordt in een andere classe bepaald dit gaat gewoon goed.
En speler is idd een object.

[Voor 86% gewijzigd door DonnyR op 08-06-2011 16:36]


  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 18:24
Wat doet de methode setBuurVelden(). Die zou de waardes moeten zetten en dat doet hij niet. Lijkt me dat daar de fout zit.

Verder, je zou je enum Richting kunnen uitbreiden met een methode die de betreffende veld uitrekent en teruggeeft (of null)

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public enum Richting {
  LINKS(0, -1), RECHTS(0, 1), BOVEN(-1, 0), ONDER(1,0);

  final int positionRow;
  final int positionColumn;

  private Richting(int row, int col){
    positionRow = row;
    posistionColumn = col;
  }

  public Veld getBuurVeld(Object[][] speelveld, int currentrow, int currentcolumn){
    int expRow = currentrow + positionRow;
    int expColumn = currentcolumn + positionColumn;

    if( expRow == -1 || expColumn == -1 || expRow >= speelveld.length || exprColumn >= speelveld[0].length ){
      return null; // buiten speelveld
    }
    return speelveld[expRow][expColumn];
  }
}

// buurvelden ophalen
for(Richting r : Richting.values() ){
  v.setBuurVeld(r, r.getBuurVeld(this.veld, row, c));
}

let the past be the past.


  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Wat snapte je niet aan mijn post? Je doet precies wat ik al zei: je vult het veld-array van links naar rechts en van boven naar beneden.

Op het moment dat je veld[row][col] vult zijn alle velden met een grotere row en een grotere col nog niet gezet (en dus null). Raadt eens wat dat voor gevolg heeft voor het zetten van de buurvelden...

"Any sufficiently advanced technology is indistinguishable from magic."


  • DonnyR
  • Registratie: November 2009
  • Laatst online: 03-05 21:22
SPee schreef op woensdag 08 juni 2011 @ 16:15:
Wat doet de methode setBuurVelden(). Die zou de waardes moeten zetten en dat doet hij niet. Lijkt me dat daar de fout zit.

Verder, je zou je enum Richting kunnen uitbreiden met een methode die de betreffende veld uitrekent en teruggeeft (of null)
De methode setBuurVelden() werkt wel voor de buren boven,rechts,rechtsboven en linksboven.
Dus hier zou het in principe niet fout mogen gaan.
En bedankt voor de enum tip eerst wil ik hem zo aan de praat krijgen en dan daarna is verder uitwerken

  • DonnyR
  • Registratie: November 2009
  • Laatst online: 03-05 21:22
Herko_ter_Horst schreef op woensdag 08 juni 2011 @ 16:19:
Wat snapte je niet aan mijn post? Je doet precies wat ik al zei: je vult het veld-array van links naar rechts en van boven naar beneden.

Op het moment dat je veld[row][col] vult zijn alle velden met een grotere row en een grotere col nog niet gezet (en dus null). Raadt eens wat dat voor gevolg heeft voor het zetten van de buurvelden...
Aha ja nu snap ik hem.
Dan wordt het een aparte method schrijven voor buren zetten

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Je moet in elk geval twee keer over het veld-array.

Een aparte methode voor het zetten van de buren lijkt me inderdaad een zeer goed plan, je hebt nu al 4x onnodig dezelfde code staan (met direct al verschillen = bugs tussen de 4 implementaties).

[Voor 3% gewijzigd door Herko_ter_Horst op 08-06-2011 16:27]

"Any sufficiently advanced technology is indistinguishable from magic."


  • DonnyR
  • Registratie: November 2009
  • Laatst online: 03-05 21:22
Heb hem nu aan de praat gekregen, echt onwijs bedankt iedereen !!!!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 21:47
Mooi dat je het hebt opgelost, maar je hoeft je vraag daarom niet weg te editen hoor. ;) Als je je oorspronkelijke probleembeschrijving laat staan, hebben anderen later misschien nog wat aan het topic.

  • RobIII
  • Registratie: December 2001
  • Laatst online: 21:52

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

^ Wat hij zegt. Ik heb je topicstart hersteld. Je topic leegroven is niet nodig als je je oplossing hebt. Zie daarvoor ook onze faq betreffende topiceinde.

[Voor 65% gewijzigd door RobIII op 08-06-2011 19:27]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


Anoniem: 30795

RobIII wijzigde dit bericht 08-06-2011 19:27 (255%)

zozo 255%
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee