Vanaf het moment dat ik ruim 30 jaar geleden mijn eerste computer kocht ben ik aan het programmeren. Eerst in basic, daarna in z80 assembler, daarna vele jaren in C en C++. Hier is een lijst van programmeertalen waarin ik "beroepsmatig" gewerkt heb: Java, Perl, Php, C, C++,C#,Delphi, Cobol, Unix Shell scripts, JavaScript, VBScript, Xslt, Turbo Pascal, Basic, Assembly voor diverse processors (8080,Z80,8031,80186,80386,Pentium). Ook programmeerde ik 30 jaar geleden al spellen, eerst in Basic, toen in Basic en assembler, daarna in C (c++) en Assembler en de laatste jaren HTML5 / Javascript. Beroepsmatig programmeer ik momenteel in C# (DotNet), Java en C, maar ook een projectje in Psql kwam er nog even tussendoor. Momenteel programmeer ik mijn zelfgebouwde robots in C en bouw ik apps voor Windows en Android. Door mijn brede kennis en ervaring ben ik heel breed inzetbaar en bovendien vind ik (bijna) alles ook leuk om te doen. Dit is een index pagina naar alle onderwerpen op mijn site die te maken hebben met computers en programmeren. Vriendelijke groet, Hein Pragt
Het programmeren van spellen is leuk, verslavend, een bron van heel veel ergernis maar ook heel veel plezier. Maar hoe kunt u een spel programmeren? Grafische vormgeving en geluid zijn de dingen die het eerst opvallen wanneer we computer spellen bekijken. Maar schitterende animaties en goede geluidseffecten zijn slechts de buitenste laag van deze fascinerende vorm van technologie. 3D techniek vereist een goede kennis van wiskunde en verder is een spel vaak een ingewikkelde structuur van logica en regels. Ook raken spellen vaak het vak psychologie omdat het spel een vorm van actie en reactie is en de speler een mens is die op menselijke wijze reageert op het spel. Hoe men vermoedt dat de speler gaat reageren, is vaak al van te voren goed overdacht. Ook is het zo dat in adventure games of role playing games (rpg) de spelfiguren een eigen karakter hebben, ook dit vergt enig inzicht in de menselijke psyche. Het programmeren van spellen brengt vaak vele disciplines bij elkaar, techneuten, programmeurs, grafisch ontwerpers, verhaal vertellers e.d.
Het programmeren van spellen is wezenlijk niet anders dan elke andere vorm van programmeren, behalve dat het vaak heel efficiënt moet zijn en voor erg voor snelheid geoptimaliseerd. U zult moeten leren om programma's te schrijven die snel en efficiënt 2D en 3D plaatjes weer kunnen geven, die muziek en geluidseffecten kunnen weergeven en die razendsnel kunnen reageren op gebruiker invoer. Wanneer u een multiplayer spel schrijft dat over een netwerk kan worden gespeeld, zult u ook netwerkcode moeten schrijven. Het programmeren van spelletjes is geen eenvoudige zaak en vergt zeker veel studie.
Natuurlijk zijn veel van deze taken al gedaan voor u, er zijn meerder programmacode bibliotheken die u kunt gebruiken. Deze bibliotheken zijn gebouwd om specifieke taken uit te voeren zoals het tonen van graphics, geluid weergeven en gebruikersinvoer afhandeling. Er zijn ook libraries die als een APIs gebruikt kunnen worden als interfaces tussen het programma en de onderliggende hardware. Een succesvolle spelprogrammeur weet wat hij zelf moet doen en wat hij van anderen kan "lenen".
Wanneer u zelf games wilt gaan maken heeft u toch een paar basis vaardigheden nodig. Let op, deze vaardigheden heeft u in meer of mindere mate nodig, afhankelijk u helemaal alleen een spel wilt maken of in een team. In een team heeft iedere ontwikkelaar meestal een specialistische vaardigheid, de een is heel goed in het maken van grafische elementen, de ander is goed in geluid en muziek, een ander is goed in levels ontwerpen en weer een ander kan een goede programmeur zijn. Hoe kleiner het team, hoe meer vaardigheden bij één en dezelfde persoon moeten liggen. De basis vaardigheden zijn dus: grafisch ontwerp, geluid en muziek, spel concepten en last but not least programmeren.
Grafisch ontwerpen
Wanneer u een computerspel bekijkt dan ziet u onmiddellijk hoe belangrijk grafisch ontwerpen is. De meeste beginnende spellen zijn vaak te herkennen aan slechte grafische afwerking. Alle elementen in het spel hebben een uiterlijk nodig, zelfs bij een vrij statisch spel als dammen of schaken is een fraaie grafische weergave nodig. In een platformspel zijn spelfiguren, levels, achtergronden en menuschermen nodig. Al deze grafische elementen moeten gemaakt worden. Hierbij is enige kennis van kleur en dieptewerking wel handig net als het beheersen van een grafisch pakket. Er zijn er talloze softwarepakketten beschikbaar, van gratis pakketten tot hele dure professionele pakketten. Een bekend open source en gratis pakket is: Gimp maar dit pakket blinkt mijns inzien niet uit in gebruikersvriendelijkheid. Daarnaast zijn er de (meestal niet gratis) pakketten zoals: Photoshop, illustrator, paint shop pro en paint.net. Kies een van pakketten en leer er mee werken door er mee aan de slag te gaan. Ik werk zelf het liefst in Photoshop omdat ik dit pakket al heel lang ken en ondertussen precies weet waar alle mogelijkheden zitten.
Naast specifieke elementen moet u ook nadenken over de algehele grafische stijl van uw spel, speels, losjes, strak, veel kleuren of weinig. Zorg er ieder geval voor dat u de stijl consequent toepast binnen het hele spel, er is niet zo ergerlijk als een niet consequente gebruikers interface. Kijk vooral hoe andere spellen binnen hetzelfde genre het doen, beter goed afgekeken dan slecht bedacht. Let wel op dat u geen dief bent, zomaar dingen kopiëren mag niet. Vaak werkt het goed om te beginnen om alles gewoon op papier te schetsen, u kunt dit natuurlijk ook in een tekenpakket op de computer doen. Wanneer u niet genoeg grafische vaardigheden bezit kunt u ook gebruik maken van open source grafische elementen. Op Internet zijn veel gratis grafische sets te downloaden die beschikbaar gesteld zijn om te gebruiken in uw eigen spel. Let er wel op of ook commercieel gebruik toegestaan is en of u aan bronvermelding moet doen. Bij twijfel is het verstandig om altijd schriftelijk toestemming vragen aan de oorspronkelijke maker.
Voor het laten bewegen van objecten in uw game heeft u animatietechnieken nodig. Dit betekent dat u meerdere versies van een plaatje heeft die elk een onderdeel van een beweging zijn, die na elkaar afgespeeld worden. Hoeveel plaatjes nodig zijn kunt u zelf bepalen, hoe meer plaatjes hoe realistischer de beweging. Om te lopen kunt u bijvoorbeeld met twee plaatjes per richting volstaan maar fraaier is vier plaatjes. Voor complexere bewegingen zoals vechten zijn vaak nog meer plaatjes in de animatiereeks nodig. Voor een echt vloeiende beweging heeft u zeker 30 plaatjes per seconde nodig! Alles wat beweegt in een spel is opgebouwd uit een serie van stilstaande plaatjes.
Geluid en muziek
Binnen een spel kunnen we achtergrond muziek gebruiken om de sfeer van het spel te versterken en geluidseffecten gebruiken om effecten in het spel te versterken. Bij het openen van een deur kunt u een geluid afstelen maar ook kunnen vijanden hun eigen geluid hebben om ze nog dreigender te maken. Geluidseffecten kunt u zelf maken door de op te nemen met uw computer en daarna te bewerken, er bestaan ook heel veel open source geluiden die u op Internet kunt downloaden. Ook kunt u met een geluidsbewerkingprogramma stukjes knippen uit bestaande geluidsbestanden om uw eigen effecten te maken. Veel ontwikkelaars en game ontwikkel pakketten maken gebruik van zogenaamde wav files of andere geluidbestand formaten om effecten af te spelen. Deze bestanden kunnen vaak veel ruimte in beslag nemen en zeker voor een online spel is het belangrijk (maar ook voor de laadtijden bij offline spellen) om de bestanden zo klein mogelijk te maken en zoveel mogelijk te hergebruiken.
Voor het gebruik van achtergrond muziek maakt men vaak gebruik van midi, waarbij de muziek als het ware via een virtuele synthesizer afgespeeld zal worden. Het voordeel is dat dit formaat erg compact is en u dus hele grote muziekstukken kunt afspelen, het nadeel is wel dat u hiervoor een software synthesizer module in uw code moet hebben en dat u een pakket nodig heeft om deze bestanden te maken en de bewerken waarbij kennis van muziek noodzakelijk is. Vaak kiezen spelontwerpers er voor om een repeterend muziekstuk op te delen in brokken die willekeurig na elkaar gespeeld kunnen worden zodat de achtergrond muziek niet te eentonig is. Hierbij kunnen de individuele stukken bijvoorbeeld in mp3 formaat opgeslagen worden. Let wel op dat ook hierbij de grootte van de bestanden en dus de laadtijd erg belangrijk kan zijn.
Ook hier gaat op dat wanneer u niet genoeg muziek vaardigheden bezit kunt u ook gebruik kunt maken van open source muziek. Op Internet zijn veel gratis achtergrondmuziek stukken te downloaden die beschikbaar gesteld zijn om te gebruiken in uw eigen spel. Let ook bij deze stukken er wel op of ook commercieel gebruik toegestaan is en of u aan bronvermelding moet doen. Bij twijfel is het verstandig om altijd schriftelijk toestemming vragen aan de oorspronkelijke maker.
Spel concepten
Naast alle technische en grafische vaardigheden is ook kennis van spelconcepten belangrijk. Een goed idee voor beginnende gamemakers is beginnen met het nabouwen van hun favoriete game. Dit is een goede oefening om de vaardigheden van gamedesign onder de knie te krijgen. Ook is het spelen en goed bekijken van computerspellen, zeker in het genre wat uzelf wilt maken erg belangrijk. Maar het wordt pas echt interessant als u echt iets nieuws probeert te maken. Veel mensen die op dit punt komen willen wel iets nieuws maken maar vallen telkens weer terug op spellen die ze al kennen. Het is een goede gewoonte ideeën op papier te schetsen voordat u aan de slag gaat. U kunt daarna de uitgewerkte ideeën aan een paar mensen laten zien om het idee te testen, vaak ontstaan hier weer goede opmerkingen of aanvullingen uit. Begin niet te snel met het echt bouwen, een goed ontwerp vooraf kan heel veel tijd achteraf besparen. Niets is meer frustrerend dan het weer compleet ombouwen van een spel wanneer u halverwege bent.
Programmeren
Wat u ook doet om het spel te maken, uiteindelijk is er computercode nodig om het spel uit te voeren. Hoe dicht u zelf op deze computercode gaat zitten kunt u zelf bepalen. Er zijn momenteel goede gamedesign pakketten te koop zoals Gamemaker en Construct 2 waarbij u het spel volledig kunt ontwikkelen in een grafische omgeving zonder dat u echt hoeft te programmeren. Wel moet u vaak in een soort van script omgeving acties aangeven want wat er moet gebeuren wanneer bijvoorbeeld twee spelfiguren met elkaar botsen, dat kan een programma niet zonder extra instructies. Met de twee bovengenoemde pakketten kunt u erg ver komen, kennis van tiles, tile maps en sprites is vaak wel nodig. Ook zult u er snel achter komen dat wanneer u niet goed nadenkt en bijvoorbeeld spelscenes niet in kleine delen opsplitst, het spel wel mooi is maar onspeelbaar traag is. Ook bij deze pakketten is basiskennis gamedesign nodig om een spel te kunnen maken.
Wanneer u echt de uitdaging aan wilt gaan kunt u een spel zelf programmeren. Het is niet slim om alles zelf te willen maken, er bestaan gelukkig voor de meeste programmeertalen zogenaamde frameworks waarin de meeste basisfuncties al opgenomen zijn. U hoeft het wiel niet telkens weer opnieuw uit te vinden. Veel professionele games zoals de games voor de meeste consoles worden in de taal C++ geschreven. C++ is een zeer krachtige programmeertaal omdat het een hele lage taal is die heel dicht bij de computer hardware staat. De taal kan hele snelle en compacte code genereren helaas is de leercurve van deze taal ook behoorlijk hoog. Wanneer u echt als gameontwikkelaar wilt gaan werken is het deze investering wel waard. Ik heb zelf jarenlang in C en C++ geprogrammeerd en deze twee programmeertalen zijn nog steeds mijn favoriet. Ooit las ik een vergelijk waarbij de talen C en C++ vergeleken werden met Jazz en dat vond ik wel een goed vergelijk.
Wat eenvoudiger zijn de zogenaamde scripttalen, deze zijn minder krachtig dan C++ maar de leercurve is ook veel kleiner. Voorbeelden van bekende scripttalen zijn: python, actionscript (flash), basic (darkbasic, blitzbasic) en tegenwoordig natuurlijk JavaScript. U kunt beginnen vanuit een "normale" programmeeromgeving maar er bestaan ook gamekits die een complete programmeeromgevingen voor een bepaalde programmeertaal bevatten. Er is een groot aanbod van gamekits, game frameworks en programmeertalen, het is belangrijk om eerst eens goed te kijken wat u wilt maken, wat u wilt investeren in tijd en geldt. Ook kunt u eenvoudig beginnen met het maken van een simpel spel en zo doorgroeien naar (semi-)professionele pakketten. Let bij het uitkiezen van een gamekit of framework wel op de documentatie en de ondersteuning, sommige kits en framworks zijn niet erg stabiel. Kijk eerste eens op de forums of er (veel) over geklaagd wordt. Ook is het belangrijk of er veel gebruikers van het pakket zijn en of er een grote community is die elkaar helpt. Het pakket dat u kiest moet wel aansluiten bij uw vaardigheden, een slechte designer maakt met mooi gereedschap nog steeds een slechte game en een goede designer maakt zelfs met een eenvoudige gamekit toch een leuk spelletje.
De meeste moderne platformgames maken gebruik van parallax scrolling, ik zal hier proberen uit te leggen wat dit is en hoe u dit kunt gebruiken in uw spel. Wanneer u goed kijkt naar de achtergrond van een spel dan ziet u vaak dat deze langzamer lijkt te bewegen dan de voorgrond. Hierdoor ontstaat er een soort van diepte in het spel. Wanneer u in een trein zit en u kijkt naar buiten dan lijkt het of dingen die dichtbij staan vrij snel bewegen en dat naarmate de afstand toeneemt dingen minder snel bewegen. Dit heeft alles te maken met het principe hoe wij als mensen diepte zien. Ook zullen dingen die verder van ons af staan kleiner lijken dan dingen die dichtbij staan. Dit zijn effecten die we kunnen gebruiken om ons 2D spel toch enige dieptewerking te geven.
Het effect kan eenvoudig bereikt worden door gebruik te maken van lagen waarbij de lagen van achter naar voren opgebouwd worden. De laag moet dan wel transparant ondersteunen of in kleine delen afgedrukt kunnen worden omdat anders de laag alles van de voorgaande laag zou afdekken en u alleen de voorste laag zou zien. De achterste laag is meestal niet transparant omdat dit de horizon van onze scene is. Binnen gamedesign pakketten heten deze lagen vaak "layers" en hebben ze een zogenaamde Z waarde die de afstand tot de speler aangeeft. Let wel op dat horizontaal en verticaal scrollen heel intensieve processen zijn voor een computer, het kan zaak zijn het aantal lagen wat te beperken. De meeste eenvoudige wijze om een mooi en realistisch parallax scrolling effect te maken is de scroll factor van de achterst (achtergrond) laag de helft te maken van de voorgrond lagen. Wanneer de voorgrondlaag dus 24 pixels opschuift dan schuift de achtergrond laag slechte 12 pixels op. Door de lagen telkens bij ieder "frame" van de achterste laag tot de voorste laag opnieuw af te beelden ontstaat het diepte effect automatisch.
Nu is het wel zo dat het level soms enorm breed en hoog kan zijn, een achtergrondafbeelding maken die de helft zo groot is zal dan een enorme afbeelding opleveren die veel geheugen zal kosten en enorm veel processortijd om te bewerken. De meeste spellen doen dit slimmer door een slim achtergrond plaatje te gebruiken. Deze afbeelding is bijvoorbeeld twee of vier keer de afmeting van het scherm maar sluit aan de linkerkant perfect aan op de rechterkant en eventueel ook boven en onder, waardoor de afbeelding als een soort van tegeltjes naast elkaar geplakt kan worden. Omdat de gebruiker niet zo in details naar de achtergrond kijkt en er vaak ook nog de nodige dingen voor staan, zal het bijna niemand opvallen dat de achtergrond zich na vier of acht schermen zal herhalen.
Disclaimer: Hoewel de heer Pragt de informatie beschikbaar op deze site met grote zorg samenstelt, sluit hij alle aansprakelijkheid uit. Op de artikelen van de heer Pragt rust auteursrecht, overname van tekst en afbeeldingen is uitsluitend toegestaan na voorafgaande schriftelijke toestemming. Heinpragt.com is ingeschreven bij de KvK onder nummer: 73839426 en is gevestigd in Veenendaal. Lees hier de privacyverklaring van deze site. Voor informatie over adverteren op deze site kunt u contact opnemen met: (mail@heinpragt.com).