[java] Bewegen met recursie door portals

Pagina: 1
Acties:
  • 188 views

Onderwerpen


Acties:
  • 0 Henk 'm!

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

Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 10-07 21:58

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.

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


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 04-07 15: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.