Bespreking testpracticum Javaconventies! ◦ KlasseNamen beginnen met Hoofdletter ◦ objectNamen/methodeNamen met kleine letter Aanspreken GUI ◦ Zie ook World of Zuul ◦ Aanspreken GUI moet beperkt worden tot minimum aantal klassen Bv: voldoende in klasse Spel ◦ Alle andere klassen kennen GUI niet! Duidelijke naamgeving! ◦ Variabelen/klassenamen zijn zelfstandig naamwoord Bv. Hut, aantal, … ◦ Methodenamen bevatten werkwoord isRaak, plaatsHut,… Concepten uit boek ◦ High cohesion Vermijd code duplicatie ◦ Low coupling Beperk # bindingen OO ◦ > 1 object Vermijd code duplicatie! ◦ NIET 1 lange methode met alle variaties voor het maken van hutten ◦ WEL een aparte methode aanroepen die overlappende code bevat ◦ NIET: maakKleineHutVoorSpeler1Horizontaal, maakGroteHutVoorSpeler2, ... ◦ WEL: bv. maakHut(speler, grootteHut, orientatieHut) Belangrijk: ◦ Correct splitsen van functionaliteit NIET klasse HuttenBouwen, Schieten, … WEL klasse Spel, Dorp, Hut, Schot, … DUS splitsen volgens eigenschappen, NIET volgens acties Disclaimer ◦ er is GEEN ideale (model)oplossing Spel Gui gui; Speler speler1; Speler speler2; Weet enkel zijn positie en het feit of het schot raak was of niet Voorbeeld methodes: •public Position geefPositie() •public boolean isRaak() Speler ArrayList<Position> hutten; ArrayList <Schot> schoten; Schot Position plaats; boolean geraakt; Spel Gui gui; Speler speler1; Speler speler2; Speler ArrayList<Position> hutten; ArrayList <Schot> schoten; Kent enkel zijn eigen hutten en schoten Voorbeeld methodes: •public boolean heeftHut(Position pos) •public boolean isRaak(Position pos) • public boolean heeftAlGeschoten (Position pos) Schot Position plaats; boolean geraakt; Spel Gui gui; Speler speler1; Speler speler2; • Zorgt voor verloop van spel • mbv klasse Speler en Speler ArrayList<Position> hutten; ArrayList <Schot> schoten; Schot Schot •Zorgt voor communicatie met GUI Position plaats; boolean geraakt; Spel Gui gui; Speler speler1; Speler speler2; Speler ArrayList<Hut> hutten; ArrayList <Schot> schoten; Hut ArrayList<Position> plaatsen; Schot Position plaats; boolean geraakt; Vraag aan gebruiker de beginpositie Vraag aan gebruiker de richting Bereken de posities van de hut Controleer of de nieuwe hut geen geplaatste hutten overlapt Voeg de hut toe Vraag aan gebruiker de beginpositie ◦ Position positie=gui.choosePosition(playerID) Vraag aan gebruiker de richting ◦ Orientation richting = gui.orientationInputBox() Bereken de posities van de hut Controleer of de nieuwe hut geen geplaatste hutten overlapt Voeg de hut toe Vraag aan gebruiker de beginpositie Vraag aan gebruiker de richting Bereken de posities van de hut ◦ EERST bereken aantal kleine en grote hutten Hou bij welke hut je aan het plaatsen bent Controleer of de nieuwe hut geen geplaatste hutten overlapt Voeg de hut toe int aantal = berekenAantalHutten() Doe aantal keer voor kleine hutten + aantal keer voor grote ◦ Vraag aan gebruiker de beginpositie ◦ Vraag aan gebruiker de richting ◦ Bereken de posities van de (grote/kleine) hut Controleer of de hut nog binnen het speelveld ligt ◦ Controleer of de nieuwe hut geen geplaatste hutten overlapt ◦ Voeg de hut toe int aantal = berekenAantalHutten() Doe aantal keer (voor kleine en grote hutten) ◦ Vraag aan gebruiker de beginpositie ◦ Vraag aan gebruiker de richting ◦ Bereken de posities van de (grote/kleine) hut ◦ Controleer of de nieuwe hut geen geplaatste hutten overlapt SPEL: huidigeSpeler.heeftOverlap(nieuweHut) SPELER: ∀ hut: hut.heeftOverlap(nieuweHut) HUT: ∀ positie: hut.bevatPositie(positie) ◦ Voeg de hut toe int aantal = berekenAantalHutten() Doe aantal keer (voor kleine en grote hutten) ◦ Vraag aan gebruiker de beginpositie ◦ Vraag aan gebruiker de richting ◦ Bereken de posities van de (grote/kleine) hut ◦ Controleer of de nieuwe hut geen geplaatste hutten overlapt ◦ Voeg de hut toe huidigeSpeler.voegToe(nieuweHut) Laat zowel speler1 als speler2 hutten plaatsen ◦ Begin met speler1 int aantal = berekenAantalHutten() Doe aantal keer (voor kleine en grote hutten) Vraag aan gebruiker de beginpositie Vraag aan gebruiker de richting Bereken de posities van de (grote/kleine) hut Controleer of de nieuwe hut geen geplaatste hutten overlapt Voeg de hut toe ◦ Maak speler2 de huidige speler en herhaal Spel Gui gui; Speler speler1; Speler speler2; Voorstelling van 1 plaats op het bord Voorbeeld methodes: •public void plaatsHut() •public boolean heeftHut() • public void schiet() •public boolean heeftAlGeschoten() • public boolean isRaak() Speler Veld [] [] bord; Veld boolean hut; boolean schot; Spel Gui gui; Speler speler1; Speler speler2; Voorstelling van het speelveld als 2D bord Voorbeeld methodes: •public void plaatsHut(Position p) •public boolean heeftHut(Position p) • public void schiet(Position p) •public boolean heeftAlGeschoten (Position p) • public boolean isRaak(Position p) Speler Veld [] [] bord; Veld boolean hut; boolean schot;