Research and Development 1/^Archief/2009-2010/07/Fase 2/Theoretisch Kader
(Turn-Based) Strategy games
Turn-Based Strategy games, of Strategy games in het algemeen, worden meestal gespeeld met 2 of meer groepen die elkaar proberen uit te schakelen. Een groep kan alles van 1 tot een groot aantal spelers bevatten. Het hoofddoel is dus de vijand uitschakelen, en de manier waarop dit gebeurt is vaak anders per spel. In veel Strategy-games worden basissen gebruikt. Dit zijn groepen gebouwen die gebruikt worden om eenheden te produceren om de vijand aan te vallen, maar ook zitten er vaak dingen zoals power plants tussen om stroom te genereren, etc. Vaak heeft elke speler 1 hoofdgebouw, dat ook vaak nodig is om andere gebouwen te kunnen bouwen. Er zijn ook zogenaamde turrets, dit zijn gebouwen met een of ander wapen zodat ze zichzelf kunnen verdedigen.
Een speler bestuurt zijn eigen eenheden (tanks, soldaten, vliegende reusachtige ufo's, etc) over het speelveld, en confronteerd hiermee de vijand. Gevechten worden meestal bepaald door wie er de meeste eenheden heeft, wie er het beste de eenheden van de tegenstander tegenwerkt, etc. Strategische plaatsing is ook vaak belangrijk, aangezien alle eenheden een verschillend bereik hebben van waar ze naar kunnen vuren.
Om al deze dingen te kunnen doen zijn er vaak grondstoffen nodig. Een gebouw kost bijvoorbeeld 20 blokken hout. De hoeveelheid verschillende grondstoffen en hun namen verschillen natuurlijk per spel. Om deze grondstoffen (of resources) te verkrijgen zijn er vaak gespecializeerde gebouwen nodig, en eventueel speciale eenheden die eropuit gaan om de grondstoffen te verzamelen. Soms moeten de grondstoffen-gebouwen recht op grondstoffenlocaties gebouwd worden. Ook zijn er soms verschillende grondstoffen in verschillende maten aanwezig op het speelveld.
Turn-Based Strategy games zijn wat verschillend. In plaats van Real-time, zoals "normale" Strategy games, krijgt elke speler een beurt om dingen in te doen. Tijdens deze beurt kan de vijand dus niets doen. De speler heeft vaak een bepaald aantal punten, waarmee hij dan dingen kan doen. Vaak heeft elke eenheid afzonderlijk een aantal punten, zodat elke eenheid in een beurt een klein stuk bewogen kan worden, vijanden kan aanvallen etc.
Netwerk
Voor communicatie tussen computers zijn er 2 voor de hand liggende keuzes wat betreft het protocol. We leggen hier even kort de verschillende protocollen (UDP en TCP) uit.
UDP: het User Datagram Protocol is een low-level connectieloos protocol dat makkelijk te gebruiken is. UDP werkt met pakketjes data van een vaste grootte die verstuurd en ontvangen kunnen worden. In JAVA worden die Datagrams genoemd.
De defenitie van een datagram is als volgt: “ A datagram is an independent, self-contained message sent over the network whose arrival, arrival time, and content are not guaranteed. “ 1)
Dit maakt UDP een onbetrouwbaar protocol, maar het is wel makkelijk te gebruiken. Als je iets wil verzenden, verzend je het gewoon. Het is wel heel makkelijk om data te versturen of om te wachten op data die binnenkomt. Het enige wat je hoeft te doen is een new zogenaamd DatagramSocket object aanmaken en een DatagramPacket van een vaste grootte waarin je data kunt ontvangen of die je kunt verzenden. En dan kun je gewoon random data proberen te versturen naar welk ipadres je ook wil. Maar je hebt geen garantie dat het aankomt of dat het in z’n geheel goed aankomt, of als je meerdere pakketten tegelijk verstuurd dat ze in de goede volgorde aankomen. Verzenden lukt altijd, maar of het goed aankomt, dat is de vraag.
Met TCP werkt het anders. Via Het Transmission Control Protocol wordt een verbinding gemaakt tussen een server en een client. Hierdoor is dit een betrouwbaar protocol, maar ook minder efficient. Wat je verstuurt komt ook aan en ook in dezelfde volgorde, anders dan wordt er een exception gegooid. Het is ook moeilijker te implementeren.
Er is een duidelijk onderscheid tussen de server en de client. De server wordt gemaakt door een new serverSocket object aan te maken. Vervolgens kun je de blocking methode accept() aanroepen, die wacht tot er een client probeert te verbinden. Als er dan succesvol een verbinding gemaakt is, moet je de input en output streams van de clientsocket opvragen en dan kun je daar op schrijven. Met behulp van threads kan je de server laten wachten op meerdere binnenkomende connecties en tegelijk laten lezen en schrijven. De client probeert te verbinden met de server door een ander, normaal Socket object aan te maken (bij UDP wordt dezelfde soort socket gebruikt). En vervolgens wordt op dezelfde manier gecommuniceerd via input en output streams.