Mensen van het SEA,
laat ik beginnen met een korte algemene inleiding. ik ben voor mijzelf bezig met het bouwen van een simpele game-engine. Ik ben een (alleen vandaag nog ;D) 17-jarig 18-jarig joch die zich graag bezig houdt met programmeren en van alles wat daar bij hoort. Hoewel ik in mijn eindexamenjaar VWO zit en dus eigenlijk elk vrij uurtje zou moeten besteden aan het voorbereiden van mijn examens, lijk ik toch steeds weer tijd over te hebben in dit projectje te stoppen. De bedoeling van het projectje is vooral om mijzelf beter te leren programmeren, maar het zou natuurlijk leuk zijn als er een bruikbaar resultaat uit zou komen rollen. enfin, tot zover de inleiding.
Voor het projectje, dat ik overigens Origamic gedoopt heb, maak ik gebruik van C# in combinatie met XNA, omdat ik hier al enige ervaringen mee had. Bovendien ben ik begonnen met deze sample van gamestate-management wat weer een grofweg een implementatie is van wat er in dit artikel beschreven staat.
Omdat ik uit eerdere ervaringen, waar ik ook dit voorbeeld gebruikte om mee te beginnen, weet dat het belangrijk is om goed te kunnen debuggen wilde ik een game-console bouwen. Hiermee moet ik makkelijk bepaalde settings at run-time en 'in-game' kunnen veranderen en andere settings en logs kunnen bekijken. Voor de gamers onder ons: het moet ongeveer zo werken zoals de console die valve altijd in haar games verwerkt.
Ik ben ondertussen zo ver dat ik een struct Message heb, die een tekstje en een enum messageType bevat. Deze messages worden bijgehouden in een stack in de klasse MessageTracer, die deze bovendien gefilterd op type terug kan geven. Dit kan ik ondertussen ook op het scherm tonen mbv de klasse ConsoleScreen. Wat er dus nog moet komen is een manier om met text-input settings op te roepen en opdrachten uit te voeren. Ik heb zelf wel een idee over hoe ik dit ongeveer zou willen oplossen, maar ik zou graag weten of hier nettere/betere/efficiëntere manieren voor zijn.
Mijn idee voor een console was alsvolgt:
Ik maak een delegate Commando aan, die een array aan strings accepteert (dus (params string[] args])). Daarna maak ik een Dictionairy<string, Commando> aan waarin ik de verschillende oprdachten opsla. Bij input van het ConsoleScreen wordt er gekeken of het eerste woord bestaat in eerdergenoemde Dictionairy. Zoja, dan wordt de bijbehorende Commando uitgevoerd, met alles wat na het eerste woord in de input kwam als parameter. Als het Commando echter niet bestaat, wordt er gekeken of er een setting is met die naam (deze staan ook opgeslagen in een Dictionairy).
Het enige probleem waar ik zelf tegenaan loop bij deze implementatie is de plaatsing van alle Commando-functies.. Volgens mij passen deze noch in mijn MessageTracer, noch in mijn ConsoleScreen (aangezien deze alleen de input en output afhandelt). Dit is niet echt een groot probleem, waar ik nog wel zelf uit kom.. Maar ik ben er nog steeds niet zeker van dat deze implementatie het mooist mogelijk is.
Een andere vraag die hiermee te maken heeft is: hoe trace ik het netst Exceptions? doe ik dit in het catch-blok, of zou de Exception dit zelf moeten doen?
Ik wil trouwens vaker vragen mbt mijn projectje hier plaatsen. Het gaat bijna altijd over ontwerp-problemen en misschien soms logica-problemen.. Is het mogelijk om daarbij op dit topic voort te borduren? of moet ik gewoon voor elk probleem een nieuw topic openen?
laat ik beginnen met een korte algemene inleiding. ik ben voor mijzelf bezig met het bouwen van een simpele game-engine. Ik ben een (alleen vandaag nog ;D) 17-jarig 18-jarig joch die zich graag bezig houdt met programmeren en van alles wat daar bij hoort. Hoewel ik in mijn eindexamenjaar VWO zit en dus eigenlijk elk vrij uurtje zou moeten besteden aan het voorbereiden van mijn examens, lijk ik toch steeds weer tijd over te hebben in dit projectje te stoppen. De bedoeling van het projectje is vooral om mijzelf beter te leren programmeren, maar het zou natuurlijk leuk zijn als er een bruikbaar resultaat uit zou komen rollen. enfin, tot zover de inleiding.
Voor het projectje, dat ik overigens Origamic gedoopt heb, maak ik gebruik van C# in combinatie met XNA, omdat ik hier al enige ervaringen mee had. Bovendien ben ik begonnen met deze sample van gamestate-management wat weer een grofweg een implementatie is van wat er in dit artikel beschreven staat.
Omdat ik uit eerdere ervaringen, waar ik ook dit voorbeeld gebruikte om mee te beginnen, weet dat het belangrijk is om goed te kunnen debuggen wilde ik een game-console bouwen. Hiermee moet ik makkelijk bepaalde settings at run-time en 'in-game' kunnen veranderen en andere settings en logs kunnen bekijken. Voor de gamers onder ons: het moet ongeveer zo werken zoals de console die valve altijd in haar games verwerkt.
Ik ben ondertussen zo ver dat ik een struct Message heb, die een tekstje en een enum messageType bevat. Deze messages worden bijgehouden in een stack in de klasse MessageTracer, die deze bovendien gefilterd op type terug kan geven. Dit kan ik ondertussen ook op het scherm tonen mbv de klasse ConsoleScreen. Wat er dus nog moet komen is een manier om met text-input settings op te roepen en opdrachten uit te voeren. Ik heb zelf wel een idee over hoe ik dit ongeveer zou willen oplossen, maar ik zou graag weten of hier nettere/betere/efficiëntere manieren voor zijn.
Mijn idee voor een console was alsvolgt:
Ik maak een delegate Commando aan, die een array aan strings accepteert (dus (params string[] args])). Daarna maak ik een Dictionairy<string, Commando> aan waarin ik de verschillende oprdachten opsla. Bij input van het ConsoleScreen wordt er gekeken of het eerste woord bestaat in eerdergenoemde Dictionairy. Zoja, dan wordt de bijbehorende Commando uitgevoerd, met alles wat na het eerste woord in de input kwam als parameter. Als het Commando echter niet bestaat, wordt er gekeken of er een setting is met die naam (deze staan ook opgeslagen in een Dictionairy).
Het enige probleem waar ik zelf tegenaan loop bij deze implementatie is de plaatsing van alle Commando-functies.. Volgens mij passen deze noch in mijn MessageTracer, noch in mijn ConsoleScreen (aangezien deze alleen de input en output afhandelt). Dit is niet echt een groot probleem, waar ik nog wel zelf uit kom.. Maar ik ben er nog steeds niet zeker van dat deze implementatie het mooist mogelijk is.
Een andere vraag die hiermee te maken heeft is: hoe trace ik het netst Exceptions? doe ik dit in het catch-blok, of zou de Exception dit zelf moeten doen?
Ik wil trouwens vaker vragen mbt mijn projectje hier plaatsen. Het gaat bijna altijd over ontwerp-problemen en misschien soms logica-problemen.. Is het mogelijk om daarbij op dit topic voort te borduren? of moet ik gewoon voor elk probleem een nieuw topic openen?
[ Voor 0% gewijzigd door kaesve op 27-02-2010 19:54 . Reden: even mijn leeftijd veranderd :D ]