-
20-08-2013, 17:09 #16Platinum VIP
- Registered
- 23/07/09
- Location
- Oostende
- Posts
- 2,383
- iTrader
- 23 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/851
2de zit projecten I, altijd tof ^^
#RIP9lives - met zijn allen een nieuwe start op BeyondGamingno votes
-
-
02-09-2013, 04:18 #17no votes
-
02-09-2013, 11:34 #18Member
- Registered
- 25/07/02
- Location
- Brussel
- Posts
- 1,001
- iTrader
- 5 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 2/2
Effe snel bekeken: als het aantal landen in elk continent niet hetzelfde is, loopt ge dat risico inderdaad (uw test is sowieso raar als niet alle continenten hetzelfde aantal landen hebben)
no votes
-
02-09-2013, 13:46 #19
Maar ik snap niet goed waarom hij die fout zou geven als alle landen niet gelijk zijn
Verstuurd vanaf mijn Joyz met Tapatalk 4no votes
-
02-09-2013, 16:10 #20Member
- Registered
- 08/09/02
- Location
- -
- Posts
- 2,044
- iTrader
- 9 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 3/6
// never mind
no votes
-
02-09-2013, 18:50 #21Member
- Registered
- 15/05/06
- Location
- Lint
- Posts
- 107
- iTrader
- 0
- Mentioned
- 0 Post(s)
de variabele i itereert over alle landen van continent j:
En een beetje verder op, gebruik je i om een land op te roepen voor continenten 0, 1, 3, 4 en 5:Code:for(int i=0;i<continenten.get(j).getLanden().size();i++)
Niets garandeert dat die continenten een i-de land hebben. Als een van die contenten minder dan i landen heeft, krijg je dus een IndexOutOfBoundsException.Code:if(sp.getSymbool() == continenten.get(2).getLanden().get(i).getSymboolSp eler() && sp.getSymbool() == continenten.get(3).getLanden().get(i).getSymboolSp eler() && (sp.getSymbool() == continenten.get(4).getLanden().get(i).getSymboolSp eler() || sp.getSymbool() == continenten.get(5).getLanden().get(i).getSymboolSp eler() || sp.getSymbool() == continenten.get(0).getLanden().get(i).getSymboolSp eler() || sp.getSymbool() == continenten.get(1).getLanden().get(i).getSymboolSp eler()))
no votes
-
02-09-2013, 18:55 #22Approved 9-lifer
- Registered
- 06/11/09
- Location
- Turnhout
- Posts
- 841
- iTrader
- 8 (100%)
- Mentioned
- 0 Post(s)
Ik zou het properder doen zoals al is voorgesteld hierboven
of wat dan ook voor die laatste regel als je het enkel voor de current player ofzo wilt checken.Code:for(Continent cont:continenten) for(Land l:cont.getLanden) land.ownedByPlayer(player);
in die ownedByPlayer check je dan in 1 regel of het symbool van dat land overeenkomt met dat van de meegegeven speler.
Passieve verantwoordelijkheden zoals dat moet je altijd zo diep mogelijk duwen.
no votes
-
04-09-2013, 01:41 #23
In de klasse continent heb ik de volgende methode toegevoegd:
public boolean isVeroverdDoor(String naamSpeler)
{
for(Land l : landen)
{
if(!l.getNaamSpeler().equals(naamSpeler))
return false;
}
return true;
}
---------------------------------------
In de klasse Wereldkaart heb ik het volgende gedaan (vorige foute code weggedaan ook trouwens):
if(sp.getOpdracht().contains("Afrika"))
{
if(continenten.get(0).isVeroverdDoor(sp.getNaam()) && continenten.get(1).isVeroverdDoor(sp.getNaam()) &&
(continenten.get(2).isVeroverdDoor(sp.getNaam()) || continenten.get(3).isVeroverdDoor(sp.getNaam())
|| continenten.get(4).isVeroverdDoor(sp.getNaam()) || continenten.get(5).isVeroverdDoor(sp.getNaam())))
{
isGewonnen = true;
}
}
Ik heb er over nagedacht en dit leek me toch de kortste versie om te controleren of de 2 verplichte continenten te controleren of ze veroverd waren en dan nog 1 optionele continent.
Alvast bedankt voor jullie hulp, hetgeen jullie zeggen houdt ook steek voor me, die fout zal ik in de toekomst dus niet meer maken ^^no votes
-
04-09-2013, 09:49 #24Member
- Registered
- 25/07/02
- Location
- Brussel
- Posts
- 1,001
- iTrader
- 5 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 2/2
Dus uw klasse Wereldkaart (brrr) staat vol met dergelijke code? As in, voor elke mogelijke opdracht? Vind je dat zelf niet 'lelijk'? Of anders gezegd: vind je het makkelijk om je code aan te passen of om een bepaalde opdracht terug te vinden in al die lijnen code?
Uw Wereldkaart zou eigenlijk niet veel meer moeten zijn dan een collection van uw continenten.no votes
-
04-09-2013, 12:27 #25
Mja ik zou nie direct weten hoe ik het nog compacter kan maken? Ik werkte verder op het project van iemand anders (dit moest ik doen) en die had de methode isGewonnen in de klasse Wereldkaart gezet. Daarom had ik al deze code bij in die methode gezet.
Verstuurd vanaf mijn Joyz met Tapatalk 4no votes
-
04-09-2013, 12:28 #26
Ik snap wel wa ge wilt zeggen, deze code in de klasse Continent zetten, maar maakt het een verschil?
Verstuurd vanaf mijn Joyz met Tapatalk 4no votes
-
04-09-2013, 14:32 #27
Oftewel een eigen klasse Opdracht maken, en daar dan alle wincondities in verwerken. Maar da zou wel alles omvergooien van mijn gemaakte code, en daar heb ik spijtig genoeg niet meer de tijd voor
no votes
-
04-09-2013, 15:26 #28
Nog een vraag:
Met deze methode:
public boolean isVeroverdDoor(String naamSpeler)
{
boolean isVeroverdDoor = true;
for(Land l : landen)
{
if(!l.getNaamSpeler().equals(naamSpeler))
isVeroverdDoor = false;
}
return isVeroverdDoor;
}
Als ik deze dan oproep met Continenten.get(1).isVeroverdDoor()
Gaat hij dan gwn de landen af die tot dat continent behoren, of gaat hij alle landen af die in het spel zijn?no votes
-
04-09-2013, 16:34 #29
Ik heb nu de volgende code:
- klasse Wereldkaart http://pastebin.com/b5Rt3FT3
- klasse Continent klasse Continent - Pastebin.comLast edited by godf@ther; 04-09-2013 at 18:23.
no votes
-
04-09-2013, 16:56 #30Member
- Registered
- 08/09/02
- Location
- -
- Posts
- 2,044
- iTrader
- 9 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 3/6
Maak van uw opdrachten een enum en check de win in een specifieke klasse. Bvb WinConditionFactory.getInstance (sp.getOpdracht());
12 if-else if-else if- stukken zijn niet leesbaar en niet te onderhoudenno votes

