[.NET] Kolonisten van Catan - Game logic

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
Hoi,

Ik ben een tijd geleden aan een 'hobby project' begonnen om een simpel Kolonisten van Catan spel te maken in C#. Het idee is om het spel over internet te laten werken, omdat ik graag iets meer leer over dit soort netwerk gerelateerde zaken. Misschien dat de catan spellen wat ingewikkeld zijn voor een test projectje, maar ik wil het toch graag proberen ;)

Mijn vraag is echter niet gerelateerd aan netwerk zaken, daar ben ik nog lang niet aan toe. Ik begin eerst eens om het op een enkele computer draaiend te krijgen uiteraard.

Het probleem zit bij het ontwerpen van de 'game logic' (ik weet niet of dat de juiste naam is). Ik heb de basis van alle spel elementen in principe klaar, bijvoorbeeld het spelbord met hexagonale 'tiles', de spel elementen die een speler kan plaatsen (dorpjes, steden, straatjes, etc), deze kan ik ook allemaal tekenen in de juiste plekken op het spelbord. Ten slotte reageert het spelbord al min of meer op muisklikken, ik kan detecteren of de muisklik in de buurt van het centrum van een hexagon is (nodig om een hele tile 'aan te wijzen', bijvoorbeeld de rover te verplaatsen), op een vertex (om een dorpje te plaatsen) of op een edge (om een straat te plaatsen).

Volgens mij heb ik de basis dus staan, het probleem is nu hoe ik de 'flow' van het spel bouw. Ik heb eigenlijk heel weinig ervaring met het maken van games behalve een singleplayer pacman spel ooit. Daar is het probleem wat ik nu heb eigenlijk niet aanwezig, daar wordt in een "oneindig" loopje gewoon gekeken wat er elke stap moet gebeuren (pacman bewegen, spookjes bewegen, collision detecteren, etc).

In dit spel ligt het allemaal veel ingewikkelder. Een voorbeeld van wat er allemaal in de beurt van 1 speler kan gebeuren:
  • Dobbelstenen gooien
  • Uitbetalen van grondstoffen
  • Ruilen van grondstoffen
  • Kopen van spel elementen (dorpjes etc)
  • Gekochte spel elementen op het bord plaatsen
  • Ontwikkelings kaarten spelen (soort van "kans kaart" zoals bij monopoly)
En vast nog wel een hele sloot die ik nu vergeet.

Mijn probleem is nu eigenlijk als volgt... Stel dat ik nu een muisklik op de vertex tussen 3 tiles opvang. Dan ga ik kijken wat er nu moet gebeuren... Ja, dat is een lastige 8)7 dat ligt er namelijk aan wie er aan de beurt is en in welk 'deel' van zijn beurt deze speler zit. Als hij nog moet dobbelen dan heeft het klikken op een vertex namelijk geen betekenis. Dit krijgt pas een betekenis als de speler een bepaalde actie aan het ondernemen is (plaatsen van een spel element bijvoorbeeld).

Hoe vang ik dit op een juiste manier af? Ik zal iets van een objecten structuur moeten hebben, ik ga natuurlijk niet voor elke 'case' een if-je opstellen, dan krijg je methode met hele lange 'als dit dan doe dit, als dit dan doe dit, als dit dan doe dit, etc', dat zie ik niet zitten.

Hoe ik het echter wel aan moet pakken kan ik zie 1-2-3 niet zien. Het beste wat ik kan bedenken is een abstracte klasse 'GameAction' die een of andere actie in het spel voorstelt. Daarvan erven dan klassen van over die specifieke acties implementeren zoals het bouwen van een dorpje, het spelen van een ontwikkelingskaart, het dobbelen, etc.

Is dit inderdaad de manier om het te doen? Wat ik vooral zoek eigenlijk is hoe dit heet zodat ik wat voorbeelden of informatie kan zoeken, dit moet namelijk toch wel een vrij standaard 'probleem' zijn in elk spel?

De volgende link lijkt veel op wat ik al in gedachten had:
http://www.primaryobjects.com/CMS/Article94.aspx
maar ik ben bang dat het voorbeeld iets te simpel is voor mijn geval. Dat heb ik vast aan mezelf te danken omdat ik met een vrij complex spel begin, maar goed :p

Heeft iemand nog wat meer informatie, misschien een totaal andere richting dan bovenstaand voorbeeld, of juist een vergelijkbaar voorbeeld wat iets ingewikkelder is?


Bedankt!

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 08:54

Nick_S

++?????++ Out of Cheese Error

Je zou een State machine kunnen maken en verschillende states kunnen implementeren, welke weten hoe ze een event (speler, actie, locatie) kunnen afhandelen (negeren, actie uitvoeren, state wijzigen).

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • writser
  • Registratie: Mei 2000
  • Laatst online: 26-09 15:38
Iets met een GameState klasse ja. Even gegoogled, zie hier wellicht een aardig startpunt:

http://stackoverflow.com/...for-modelling-board-games

Onvoorstelbaar!


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
writser schreef op maandag 24 oktober 2011 @ 19:09:
Iets met een GameState klasse ja. Even gegoogled, zie hier wellicht een aardig startpunt:

http://stackoverflow.com/...for-modelling-board-games
Bedankt, daar staan flink wat handige tips en referenties in, die ga ik eens op m'n gemak doorkijken!

Mijn iRacing profiel