[java] speler bewegen aan de hand van buurobjecten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DonnyR
  • Registratie: November 2009
  • Laatst online: 28-04 09:56
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 ]


Acties:
  • 0 Henk 'm!

  • 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."


Acties:
  • 0 Henk 'm!

  • DonnyR
  • Registratie: November 2009
  • Laatst online: 28-04 09:56
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 ]


Acties:
  • 0 Henk 'm!

  • gerbennn
  • Registratie: November 2003
  • Laatst online: 10-09 17:42
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>


Acties:
  • 0 Henk 'm!

  • 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."


Acties:
  • 0 Henk 'm!

  • DonnyR
  • Registratie: November 2009
  • Laatst online: 28-04 09:56
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 ]


Acties:
  • 0 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 22:20
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.


Acties:
  • 0 Henk 'm!

  • 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."


Acties:
  • 0 Henk 'm!

  • DonnyR
  • Registratie: November 2009
  • Laatst online: 28-04 09:56
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

Acties:
  • 0 Henk 'm!

  • DonnyR
  • Registratie: November 2009
  • Laatst online: 28-04 09:56
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

Acties:
  • 0 Henk 'm!

  • 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."


Acties:
  • 0 Henk 'm!

  • DonnyR
  • Registratie: November 2009
  • Laatst online: 28-04 09:56
Heb hem nu aan de praat gekregen, echt onwijs bedankt iedereen !!!!

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:41
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.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
^ 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.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

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

zozo 255%
Pagina: 1