Voorbehouden op fouten, bevat ook de oplossing, lees de Disclaimer aub.
----------------
1. Inhoudsopgave
----------------
1. Inhoudsopgave
2. De opdracht
3. Oplossing
4. Disclaimer
----------------
2. De opdracht
----------------
Afspraken
- Zet al de module bestanden die je gebruikt hebt in een archief met als naam "srolnummer.Arc". Zoals bijvoorbeeld "s045480.Arc".
- Gebruik enkel en alleen het Oberon lettertype voor je code (geen kleurtjes).
- Hou je strikt aan de Oberon Code Conventions.
- Je mag al de code die je ZELF hebt geschreven gebruiken.
- Je mag je cursus gebruiken.
- Elke vorm van communicatie is verboden.
Opdracht
Je maakt een elektronische versie van het gezelschap spel Zeeslag. Bij Zeeslag is het de bedoeling te ontdekken waar de vloot van je tegenspeler ligt. Dit doe je simpelweg door bommen af te vuren op de vloot van jouw tegenspeler. Om met dit spel te kunnen beginnen moet je eerst je vloot in de zee plaatsen. Dit mag horizontaal en verticaal zolang de boten elkaar maar niet direct horizontaal of verticaal raken.
Concreet maak je een systeem dat 2 spelers bevat en per speler een aantal boten op zijn deel van het speelveld. Elke speler voegt om de beurt een boot toe. Het is toegestaan met ee nvast aantal boten te werken, een dynamische oplossing is natuurlijk beter en verdient meer punten, Het spel start als Speler 1 zijn eerste schot afvuurt, hierna is elke speler om de beurt aan zet.
Alle vereiste functionaliteit in volgorde van belangrijkheid. Het spreekt voor zich dat je punten afhankelijk zijn van de hoeveelheid functionaliteit die geïmplementeerd en getest is. Zorg ervoor dat er een scenario is (opeenvolging van stappen in de Tool file) die dit duidelijk toont. Vergeet ook niet om duidelijk te specificeren welke functionaliteit geïmplementeerd is.
1. In het basisprogramma mag je er vanuit gaan dat het speelveld een vaste grootte (10x10 heeft. Het systeem moet de volgende functionaliteit bevatten:
- Je moet speler 1 en speler 2 een naam kunnen geven.
- Je moet per speler een lijst van boten kunnen toevoegen met de volgende eigenschappen:
- Naam
- Coördinaten (controleer of ze binnen het veld liggen en niet overlappen met andere boten)
- Elke speler moet om de beurt een schot kunnen afvuren (via de Tool file), er wordt weergegeven of een schot raak was of niet. Bij het zinken van een boot verschijnt er ee nboodschap. Bij het zinken van de laatste boot verschijnt er een overwinningsboodschap.
- Je moet per speler een lijst kunnen geven van de reeds geprobeerde schoten en of het raak was.
- Je moet per speler een overzicht kunnen geven van zijn naam en alle boten met hun naam en hun toestand. Dus clear, sunk met coördinaten of een lijst van (eventueel) geraakte compartimenten en een lijst van (eventueel) niet geraakte compartimenten.
Speler1: Sam
SS Wiekvorst:
- Clear: (2,2),(2,3)
SS Antwerpen:
- Clear: (1,1),(1,2),(1,3)
- Hit: (1,4)
SS Retie:
- Sunk: (3,3),(3,4)
- Je moet per speler een lijst bijhouden van schepen die hij heeft doen zinken en deze kunnen weergeven.
Sunck:
- SS Eindhoven (0,1),(0,2),(0,3)
- SS Rotterdam (1,1),(1,2)
2. Om het basis programma uit te breiden gaan we extra functionaliteit toevoegen:
- Je moet voor we beginnen met het spel de lengte en de breedte van het speelveld kunnen aanpassen.
- Voeg een lijst van commandanten toe. Een commandant heeft de volgende eigenschappen:
- Naam
- Lijst met 1 of meerdere boten.
Deze lijst van commandanten moet je kunnen afdrukken samen met de huidige van hun schepen.
- Je moet per speler het schotenveld en het botenveld grafisch kunnen weergeven in twee aparte delen. Een compartiment van een boot is een B, een geraakt compartiment is een H en de zee een G. Voor het schotenveld gelijkaardig met B mis en H raak.
3. Om de overige punten te implementeren:
- Schrijf het geheel door gebruik te maken van OO.
- Geef de keuze om speler 1 en speler 2 te vervangen door een computer speler nadat de boten geplaatst zijn. Het volstaat deze speler ad random schoten te laten afvuren.
- Mogelijkheid om het spel naar een bestand weg te schrijven en weer terug uit te lezen.
BELANGRIJK: Een schip is één entiteit en komt slecht één keer voor in de database. Dit wil dus zeggen dat als een schip moet voorkomen in verschillende lijsten, er niet voor elke lijst (speler, commandant) een nieuw schip wordt aangemaakt.
Veel succes
----------------
3. Oplossing
----------------
Mijn implementatie kan je downloaden door te klikken op deze link.
In deze implementatie heb ik de basis, "aanpasbare grootte" en "OO" van de extras af. (We kregen hier 4 uur de tijd voor)
Ze zijn niet helemaal efficient, maar ik heb geprobeerd het uiteraard zo efficient mogelijk te houden. (Er is geen tijd om inefficiente dingen nog helemaal te gaan veranderen, ook heb ik niet vooraf met zoiets groot geoefend)
Bij elke procedure staat er duidelijk commentaar bij waarvoor de procedure dient, ook heb ik hier en daar nog wel een blok commentaar tussen geworpen.
Ook heb ik ernaar gestreeft zoveel mogelijk OO en Nodes te gebruiken, en het gebruik van het geheugen minimaal te houden.
(Wou eerst zelfs shortints gebruiken, maar INC blijkt hier niet te werken, werkt waarschijnlijk wel met :=)
----------------
4. Disclaimer
----------------
Deze topic heeft als bedoeling toekomstige studenten te helpen en hun te laten zien wat er hun verwacht wordt.
"De opdracht" is afkomstig van de uitgedeelde papieren van het Praktijkexamen, ik ben hier dus niet de auteur van. De auteur heeft het recht om de opdracht weg te laten halen. (Contacteer me hiervoor via mijn UA Student e-mailadres (20072150) of Blackboard)
"Oplossing" is de code die door mij is geschreven (Basislijst.Mod is gebaseerd (vertaald enz...) op die van Arickx) en dient enkel ter inzage om te begrijpen hoe je zo'n opdracht oplost, ga hier dus niet klakkeloos code uit kopiëren, maar gebruik het enkel educatief als een voorbeeld. Het is niet toegestaan om zonder voorafgaande toestemming van mij Zeeslag.Arc of grote gedeelten daarvan over te nemen.
Edit 1: Link gefixt. (15:19)
Edit 2: Disclaimer gefixt. (15:22)