Deeldocumentatie Turn Based Multiplayer
No-Fi
Het idee dat ik heb voor de Turn Based Multiplayer is dat je op het begin van de game een team toegewezen krijgt. Dat je dit team ook op het beeld kan zien en dat team Nederland altijd beginnen mag. Verder wil ik dat als beide spelers een zet gedaan hebben een visuele Turn Counter eentje omhoog gaat om een indicatie te geven van welke turn je zit. Daarnaast moet je ook makkelijk een zet kunnen doen en van beurt kunnen wisselen.
Lo-Fi
Het idee wat wij hebben is dan hier visueel uitgebeeld. De speler die kan een column selecteren en dan word er een bal gedropt. Als de bal gedropt word dan gebeurd dit ook op de andere client en eindigt de turn van de speler. En dan mag de andere speler een zet doen.
Med-Fi
Speler een kan een zet doen. Deze zet stuur je naar de server toe met een EventName en de server stuurt een bericht eruit met deze EventName en de data die daarbij hoort. Op de client word met deze informatie de events in werking gezet door de informatie die binnenkomt. Verder wordt de zet ook opgeslagen voor een latere replay modus. Bij de andere speler spawnt er dan een balletje op de doorgegeven column en dan krijgt de andere speler de zet.
De speler selecteert een column in de game. De game geeft dan de playerID, RoomID, het team van de speler en de geselecteerde column dan door naar de server. De server zet deze informatie in de database. Vanaf de server krijg je het team, matchID, turn en de geselecteerde column. De tegenstander ziet dan dus als resultaat de move of het grid draaien wanneer nodig.
De idMatch is de primary key in zowel de Game Data als de Move Data. Verder is de roomID de naam van de room, en Time de huidige tijd dat de room gestart is. In de landen staan de namen van de speler van ieder team en de winnaar wordt geset als de game afgerond is.
De data in Move Data is de idMatch, de huidige turn in de game. Het team wat een move heeft gedaan, en de column die gekozen is voor de move.
Zie de uitwerking in ERD hieronder:
Hi-Fi
Start Game
Als er op de start game knop word gedrukt dan wordt er een pakketje uitgestuurd met het bericht dat er een game gestart word.
Dan wordt deze functie aangeroepen, hierin wordt gekeken of er 2 mensen in de lobby zitten zodat de lobby gestart kan worden. Daarnaast worden de teams ook aangemaakt en willekeurig verdeeld.
Dan worden de waarden van de game in de database neergezet, daarin staat onderandere welke room er gestart is, welke speler in welk team zit en de tijd waarop de game gestart is. Daarnaast wordt ook op iedere client apart de match gestart met bijbehorende informatie.
Als de StartGameData binnenkomt, worden de lokale variabelen gelijk gezet aan de data vanuit de StartGameData packet. Daarnaast wordt ook visueel laten zien op het scherm welk team je bent.
Move
Als de speler een zet wil doen dan moet er data verstuurd gaan worden naar de server toe, de data die gevraagd word door de MoveData zie je hieronder:
De MoveData stuurt op welke speler de bal heeft gedropt, in welke row deze gevallen is. De turn waarin dit gebeurd is en welke game dit was. Deze informatie wordt dan vervolgens als datapakketje opgestuurd naar de server.
Als de speler een row heeft geselecteerd, dan wordt er een pakketje aangemaakt. Als dan de zet is gedaan door de speler gebeurt het volgende:
De data van de MoveData wordt dan in de database neergezet en dan wordt er tegen iedere speler in de room dat er een zet is gedaan.
Als er een move binnenkomt wordt eerst de UI geupdate, als wij dit niet doen dan komen er problemen ivm dat de UI niet snel genoeg update voordat wij onze move willen laten zien. Daarna kijken wij of de zet niet van de speler zijn team is, aangezien hij anders al lokaal een bal inspawnt. Anders spawnen wij een bal in voor de tegenstander met de juiste informatie vanuit de MoveData.
Turn Switchen
Als de ene speler zijn zet heeft gedaan is het natuurlijk de bedoeling dat dan de andere speler een zet mag doen, aangezien wij altijd Nederland laten beginnen is het eerste gedeelte makkelijk gedaan.
De data die er opgestuurd wordt als wij van turn willen wisselen is welke game de turn in gewisseld moet worden, welke turn het daadwerkelijk was. En van welk team naar welk team de turn nou daadwerkelijk gaat.
Hier zie je dat als er een zet gebeurd is de functie SendTurnSwitch data wordt verstuurd, dit stuurt dan een bericht naar de server dat de beurt van het Team van de laatste zet door moet gaan naar de volgende persoon.
De GetNextTeam kijk welk team het laatste team was en pakt het andere team en geeft deze terug.
De turndata die er dan verstuurd wordt is in welke game de turn verwisseld wordt. Welke turn het ook daadwerkelijk is. En van welk team naar welk team de beurt dan moet gaan. Dit wordt dan als datapacket verstuurt.
Als er een bericht binnenkomt wordt er gekeken welk team er was zodat juist gezet kan worden welk team er nu mag. Als Nederland was dan mag Belgie nu. Was Belgie nu dan mag nederland weer en gaat de TurnCounter een omhoog omdat beide spelers dan hun zet gedaan hebben. Deze data wordt dan vervolgens teruggestuurd naar beide clients in de room.
Als de datapacket dus weer is teruggekomen dan wordt de huidige speler overgezet naar het huidige team wat dan aan de beurt mag. Dan wordt de TurnCounter lokaal geupdate en ook visueel laten zien.