(Game)programmeren Arjan Egges & Paul Bergervoet Gameprogrammeren • Von Neumann’s computer-model (1950): computer = + geheugen processor om waarden op te slaan om opdrachten uit te voeren Opdrachten • Opdracht: voorschrift om het geheugen te veranderen opdrachten staan zelf ook in het geheugen maar veranderen zichzelf niet • Programma: lange reeks opdrachten, die één voor één worden uitgevoerd door de processor Programmeertalen • Programmeertaal: notatie voor programma’s • sinds 1945: >4000 verschillende talen gepubliceerd Geschiedenis van computers, programmeren, games: 1940-45 Z3 (Dld 1941) ENIAC (USA 1943) Colossus (Eng 1943) Geschiedenis van computers, programmeren, games: 1945-50 Programmeertaal: Machinetaal Mark-I (Eng 1948) Illiac (USA 1948) Geschiedenis van computers, programmeren, games: 1950-55 Programmeertaal: Assembler Univac (1951) Geschiedenis van computers, programmeren, games: 1955-60 Programmeertaal: Fortran NCR304 (1957) Zebra (NL, 1958) Geschiedenis van computers, programmeren, games: 1955-60 Tennis for Two (1958) • Brookhaven National Laboratory, dept. of Energy Geschiedenis van computers, programmeren, games: 1960-65 IBM Programmeertaal: Cobol, Algol, Lisp PDP-1 Geschiedenis van computers, programmeren, games: 1965-70 Programmeertaal: Basic LINC-8 (1966) PDP-8 (1966) Geschiedenis van computers, programmeren, games: 1970-75 Programmeertaal: Pascal PDP-11 (1970) Geschiedenis van computers, programmeren, games: 1970-75 Eerste arcade games Magnavox Odyssey (1972) Geschiedenis van computers, programmeren, games: 1975-80 Programmeertaal: Simula Atari (1977) Apple-II (1977) Geschiedenis van computers, programmeren, games: 1980-85 Commodore64 (1984) Vax-11 (1981) Programmeertaal: (Objective)C IBM-PC (1981) Donkey Kong (1981) Geschiedenis van computers, programmeren, games: 1980-85 • Odyssey2, Coleco, Atari 5200 • Commodore 64GS, Nintendo Famicon, Coleco Adam Geschiedenis van computers, programmeren, games: 1985-90 Geschiedenis van computers, programmeren, games: 1990-95 Programmeertaal: C++ Geschiedenis van computers, programmeren, games: 1990-95 Nieuwere consoles (Sega Saturn, Playstation, N64)… Doom Geschiedenis van computers, programmeren, games: 1995-2000 Programmeertaal: Java, JavaScript Geschiedenis van computers, programmeren, games: 2000-2005 Geschiedenis van computers, programmeren, games: 2000-2005 Programmeertaal: C# PHP Geschiedenis van computers, programmeren, games: 2005-2010 Geschiedenis van computers, programmeren, games: 2010-2016 Programmeertaal: Swift, ES6, TypeScript Geschiedenis van programmeertalen 1945 1950 1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 2010 2015 Mach.taal Assembler Fortran Algol Basic Pascal Simula (Obj.)C Cobol Databases (periode 3) SQL C++ Java JavaScript C# Swift Lisp Prolog Functioneel Programmeren (jaar 2) Haskell Gameprogrammeren Webtechnologie (jaar 2) Perl PHP Python Geheugencapaciteit • • • • • • • • • 65er jaren: 70er jaren: 80er jaren: 85er jaren: 90er jaren: 95er jaren: 00er jaren: 05er jaren: 10er jaren: 8 kB RAM 16 kB RAM 64 kB RAM 640 kB RAM 4 MB RAM 16 MB RAM 128 MB RAM 1GB RAM 16GB RAM ponskaarten tape floppy-disk harddisk CD DVD SSD, “The cloud” Programmeer-problemen • vroeger: hoe kan ik het geheugen zo efficiënt mogelijk gebruiken? • nu: hoe kan ik die overvloed van geheugen nog overzien? Indeling van het geheugen • plaats in het geheugen met een naam • groepje variabelen dat bij elkaar hoort • groepje objecten dat bij elkaar hoort variabele object object Indeling van het programma • voorschrift om het geheugen te veranderen • groepje opdrachten dat bij elkaar hoort • groepje methoden dat bij elkaar hoort • groepje klassen dat bij elkaar hoort opdracht methode klasse namespace Programmeer-paradigma’s Imperatief Assembler Fortran Basic Procedureel Pascal C++ Java Functioneel Lisp Algol Excel C Objectgeoriënteerd Declaratief Simula C# Logisch Prolog Haskell Vertalen 1/5: Assembler • Een assembler vertaalt machine-specifieke broncode naar objectcode, die vervolgens kan worden uitgevoerd .asm sourcecode voor processor 1 Assembler voor processor 1 .exe machinecode voor processor 1 .asm sourcecode voor processor 2 Assembler voor processor 2 .a machinecode voor processor 2 Vertalen 2/5: Compiler • Een compiler vertaalt de broncode naar machine-specifieke objectcode, die vervolgens kan worden uitgevoerd .cpp sourcecode Compiler voor processor 1 .exe machinecode voor processor 1 Compiler voor processor 2 .a machinecode voor processor 2 Vertalen 3/5: Interpreter • Een processor-specifieke interpreter leest de broncode en voert die uit .php sourcecode Interpreter voor processor 1 Interpreter voor processor 2 Vertalen 4/5: Compiler+Interpr. • Een universele compiler vertaalt de broncode naar een bytecode, die gemakkelijk kan worden geïnterpreteerd .java sourcecode Compiler .class bytecode Interpreter voor processor 1 Interpreter voor processor 2 Vertalen 5/5: Compiler+Compiler • Een compiler vertaalt de broncode naar een intermediate language , die vervolgens wordt gecompileerd .cs sourcecode Compiler .il Intermediate language Compiler voor processor 1 .exe machinecode voor processor 1 Compiler voor processor 2 .a machinecode voor processor 2 Vertalen 5/5: Compiler+Compiler • Een compiler vertaalt de broncode naar een intermediate language , die vervolgens wordt gecompileerd .cs sourcecode .vb sourcecode Compiler Compiler .il Intermediate language Compiler voor processor 1 .exe machinecode voor processor 1 Compiler voor processor 2 .a machinecode voor processor 2 Programmeer-cyclus Modelleer Specificeer Implementeer Edit Compile Run