Toon posts:

[java] Bewegen met recursie door portals

Pagina: 1
Acties:
  • 157 views

Onderwerpen


  • DonnyR
  • Registratie: November 2009
  • Laatst online: 03-05 21:22
Hey, ik ben bezig met een project. We maken een spelletje waarin je met een speler kan bewegen en aan de hand van de speler dozen kan laten bewegen.

Wat werkt wel:
- normal bewegen
- bewegen door portal zonder doos
- 1 of meer dozen bewegen zonder door de portal te gaan.

Mijn probleem:
- 1 of meer dozen verplaatsen door de portal (regel 41-68).

de dozen worden wel verplaats door de portal, maar nadat ze zijn verplaats kan ik als speler niet meer de portal in. Ook zijn de dozen die zijn verplaats door de portal niet meer beweegbaar, soms hap ik ze op met mijn speler.

Wat ik wil is dat de dozen worden verplaats naar de teleport locatie, mocht er op de teleport locatie ook een doos staan moet deze dezelfde kant op bewegen als de speler bewoog.

Aantal dingen die wel handig zijn om te vermelden:
- huidigVeld is het veld waar de speler op staat.
- ik beweeg met enum Richting
- een Staveld is een veld die objecten mag bevatten zoals (speler, doos, portal). Andere velden mogen geen objecten bevatten
- de method move() roept de private method aan wanneer er true is teruggegeven.

de hele method
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
private boolean kindmodeBoolean(Richting r, Staveld s) {
        bewogen = false;
        Staveld buurveld = (Staveld) huidigVeld.getBuurveld(r);
        BeweegbaarObject speler = this.huidigVeld.getBevatObject();

        if (buurveld instanceof Staveld) {
            // normal bewegen
            if (buurveld.getBevatObject() == null && buurveld.getBevatPortal() == null) {
                huidigVeld.removeBevatObject();
                buurveld.setBevatObject(speler);
                huidigVeld = (Staveld) buurveld;
                return true;
            }
            // bewegen door portal, zonder doos
            if (buurveld.getBevatPortal() != null && this instanceof Speler){
                Portal p = buurveld.getBevatPortal();
                Staveld teleportLoc = p.getTeleportLoc();
                if (teleportLoc.getBevatObject() instanceof Doos){
                    Doos d = (Doos)teleportLoc.getBevatObject();
                    if (d.move(r, true)) {
                        teleportLoc.removeBevatObject();
                        teleportLoc.getBuurveld(r).setBevatObject(d);
                        huidigVeld.removeBevatObject();
                        teleportLoc.setBevatObject(speler);
                        huidigVeld = (Staveld) teleportLoc;
                        return true;
                    }
                }
                else{
                    huidigVeld.removeBevatObject();
                    teleportLoc.setBevatObject(speler);
                    huidigVeld = (Staveld) teleportLoc;
                }                
            }            
            // doos bewegen
            else {
                if (buurveld.getBevatObject() instanceof Doos
                        && buurveld.getBuurveld(r) instanceof Staveld) {
                    Doos d = (Doos)buurveld.getBevatObject();

                    // doos bewegen door portal
                    if (buurveld.getBuurveld(r).getBevatPortal() != null){
                        Portal p = buurveld.getBuurveld(r).getBevatPortal();
                        Staveld teleportLoc = p.getTeleportLoc();
                        // doos bewegen door portal wanneer teleportloc WEL een doos bevat
                        if (teleportLoc.getBevatObject() instanceof Doos){
                            Doos dd = (Doos)teleportLoc.getBevatObject();
                            if (dd.move(r, true)) {
                                teleportLoc.removeBevatObject();                                
                                buurveld.removeBevatObject();                                
                                huidigVeld.removeBevatObject();
                                teleportLoc.getBuurveld(r).setBevatObject(dd);
                                teleportLoc.setBevatObject(d);
                                buurveld.setBevatObject(speler);
                                huidigVeld = (Staveld) buurveld;
                                return true;
                            }
                        }
                        // doos bewegen door portal wanneer teleportloc GEEN doos bevat
                        else{
                            huidigVeld.removeBevatObject();
                            buurveld.removeBevatObject();
                            buurveld.setBevatObject(speler);
                            teleportLoc.setBevatObject(d);
                            huidigVeld = (Staveld) buurveld;
                            return true;
                        }                        
                    }
                    // doos bewegen zonder portal
                    else{
                        if (d.move(r, true)) {
                        huidigVeld.removeBevatObject();
                        buurveld.setBevatObject(this);
                        huidigVeld = (Staveld) buurveld;
                        return true;
                        }
                    }                    
                }
            }            
        }
        return false;
    }


Ik ben zelf al een hele tijd hiermee bezig geweest maar ik kom er nog altijd niet uit.
Als iemand de tijd neemt om dit allemaal door te lezen stel ik dit erg op prijs.
Als iemand de oplossing weet hoor ik dit natuurlijk heel erg graag.

Bij voorbaat dank,

Donny

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 29-05 10:02

CoolGamer

What is it? Dragons?

Heb je al door de code heen gelopen met behulp van een debugger? Aan zo'n stuk code is heel erg moeilijk voor een buitenstaander waar de fout de fout zit. Vaak is het in zo'n geval makkelijker om zelf gewoon een breakpoint aan het begin van de methode te zetten en dan te kijken hoe door de code heen gelopen wordt.

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-05 17:03

NMe

Quia Ego Sic Dico.

En nu verwacht je dat wij je code voor je gaan debuggen? Kort samengevat heb je waarschijnlijk geen rekening gehouden met het feit dat een buurveld als het een portal bevat als proxy moet dienen voor de informatie aan de andere kant van die portal in plaats van voor zichzelf. Maar dat kun je alleen uitvogelen door zélf te debuggen, dat gaan wij niet voor je doen. Even snel je code dumpen en zeggen wat je wilt dat het doet is in elk geval niet de bedoeling hier.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Dit topic is gesloten.


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