Profielwerkstuk vwo-6
Het creëren van een economie in spelvorm
Edward van Egdom Vwo-6 April 2012
Voorwoord Sinds 2010 beheer ik een online tekst-gebaseerd spel. Een op tekst gebaseerd spel is een spel die je gewoon in je browser speelt. Het is ook op tekst gebaseerd, maar dit houdt niet in dat er geen grafische elementen in kunnen zitten. Het houdt voornamelijk in dat je niet letterlijk rondloopt in een bepaalde virtuele wereld. Een aantal jaar heb ik al een nieuw spel in mijn gedachten, met een heel nieuw concept. Ik heb er nooit tijd voor gehad om dit uit te werken, maar dit jaar leek het mij een geschikt onderwerp voor mijn profielwerkstuk. In dit profielwerkstuk leest u wat het concept is van het nieuwe spel en wat ik ga onderzoeken. Veel leesplezier gewenst.
2
Inhoud Voorwoord .............................................................................................................................................. 2 Inleiding ................................................................................................................................................... 4 Deel I Introductie: uitgangspunten van het spel ..................................................................................... 5 Deel II Bedrijven binnen de economie .................................................................................................... 7 Participanten in de onderneming........................................................................................................ 8 Omgevingsfactoren ............................................................................................................................. 9 Bedrijfskolommen ............................................................................................................................. 10 Deel III Ondernemen ............................................................................................................................. 12 Het oprichten van een bedrijf ........................................................................................................... 13 Het beheren van een bedrijf ............................................................................................................. 13 Deel IV Vermogen via de beurs ............................................................................................................. 16 Bedrijf naar de beurs ......................................................................................................................... 17 Investeren, wat krijg je ervoor terug? ............................................................................................... 17 Rekenen aan de beurs ....................................................................................................................... 18 De bestanden en database ................................................................................................................ 19 Conclusie ............................................................................................................................................... 30 Reflectie ................................................................................................................................................. 30 Literatuurlijst ......................................................................................................................................... 31 Boeken ............................................................................................................................................... 31 Websites ............................................................................................................................................ 31 Logboek ................................................................................................................................................. 32 Bijlagen .................................................................................................................................................. 33 Bijlage 1: werkplan ............................................................................................................................ 33 Bijlage 2: gebruikersuitleg beurs ....................................................................................................... 34
3
Inleiding Stel je voor.. Een wereld waar jij het voor het zeggen hebt. Een wereld die draait om jouw bedrijven. Dit profielwerkstuk gaat over een online op tekst gebaseerd spel gebaseerd op een virtuele economie. Je doel is dingen opzetten, de wereld in beweging brengen. De economie is gebaseerd op jouw bedrijven. Ruil en netwerk met andere spelers. Maak het tot de top. Bovenstaande tekst is een promotietekst verzonnen voor een nieuw op tekst gebaseerd online spel. Het spel gaat een virtuele economie creëren, waar de spelers het middelpunt zijn: zij moeten de economie in beweging brengen. De onderzoeksvraag van mijn profielwerkstuk is " Hoe creëer je een virtuele economie in spelvorm? ". Het volledige werkplan is in bijlage I te vinden. In dit profielwerkstuk ga ik in het 1e deel kort uitleggen wat de uitgangspunten van het spel zijn. In het 2e deel ga ik kort onderzoeken hoe de bedrijven van deze maatschappij zich momenteel verhouden binnen de economie. In het 3e deel zal ik onderzoeken hoe een onderneming zelf in zijn werk gaat en wat hierbij komt kijken. Ik maak telkens kort een uitstapje naar hoe dit er in een spel uit zou kunnen zien. Vanwege de omvang van het profielwerkstuk heb ik deze eerste 3 delen kort gelaten, en alleen een aantal essentiële punten uitgekozen. In het 4e deel kijk ik naar een ander spelonderdeel, namelijk de beurs. Hoe haalt de onderneming geld uit een beursgang? En hoe werkt de beurs nou eigenlijk precies? Dit 4e deel ga ik ook daadwerkelijk bouwen, zodat er ook concreet een onderdeel van dit spel aanwezig is.
4
Deel I Introductie: uitgangspunten van het spel
Wat is dit spel nou eigenlijk? Hoe gaat het eruit zien? Wat is er voor de spelers te doen? Wat zijn de uitgangspunten van het spel? In het 1 e deel geef ik een kleine introductie over de uitgangspunten en wat er precies onderzocht gaat worden. 5
Om een duidelijk beeld te krijgen over wat de vorm van een tekst-gebaseerd spel heb ik rechts een aantal voorbeelden verzameld. Er zijn twee aspecten die opvallen en tekstgebaseerde spellen vrijwel altijd overeen hebben:
Je bent iets wat je in het echte leven niet bent. Op Tribalwars ben je de heerser van een klein dorpje en kan je andere dorpen overnemen om zo de grootste van het spel te worden.Op Omicidio ben je een gangster en is je doel om de grootste gangster te worden en anderen uit de weg te ruimen. Op FarmVille ben je de eigenaar van een boerderij Door tijd in het spel te steken kom je steeds verder. Bij Tribalwars kan je de gebouwen verder uitbouwen en andere dorpen overnemen en op Omicidio kan je misdaden en overvallen doen. Er is daarnaast ook concurrentie in het spel: je hoopt andere spelers hiermee te verslaan.
Ook het spel waar mijn profielwerkstuk over gaat heeft deze twee aspecten. Je bent op dit spel een ondernemer binnen een economie met alle andere spelers. Je kan je bedrijven steeds verder uitbouwen en er is genoeg concurrentie. Het idee van dit spel is dat je zodra je je geregistreerd hebt, je leven als ondernemer begint. Je koopt je eerste pand en begint je eerste bedrijf. Ik heb gesteld dat:
Tribalwars.nl – tekst-gebaseerd spel dat zich in de middeleeuwen afspeelt
De speler is de ondernemer. De consument is computer-gegeneerd. Hierbij hoort ook een volledig computer-gegeneerde wereld die steden maakt met een bevolking die allemaal hun eigen behoeft hebben. De omvang van deze wereld is afhankelijk van het aantal spelers dat het spel spelen.
Omicidio.nl – tekst-gebaseerd spel waarbij je in de huid van een gangster kruipt
Farmville – socialnetwork game waarin je een boer bent die zijn boerderij onderhoud
Het spel behoort tot de genre van de business simulation games. Dit genre is vrij uitgebreid gedefinieerd, de Tycoon-serie behoort ook tot dit genre. De tycoon-serie is vooral bekend vanwege de spellen Rollercoaster Tycoon (1999) en Transport Tycoon (1994). De doelgroep van dit speel zijn jongeren die dit graag in hun vrije tijd spelen. Het spel zou kunnen worden gebruikt in het onderwijs, maar mijn doel is om het spel een succes te maken voor jongeren (en volwassenen) buiten hun school/studie/werk. 6
Deel II Bedrijven binnen de economie
Het doel van dit profielwerkstuk is om via een spel een economie te kunnen creëren. Hierbij is van groot belang om te onderzoeken hoe de bedrijven zich gedragen binnen de economie. Waarom hebben bepaalde bedrijven wel succes en anderen niet? Hoe werken de concurrentieverhoudingen? In dit eerste deel zullen we bekijken hoe de bedrijven zich verhouden binnen een economie. 7
Participanten in de onderneming Participanten in de onderneming zijn individuen en groepen mensen die bij de bedrijfsvoering in een onderneming betrokken zijn. Deze participanten kan je in een aantal groepen onderverdelen: De leiding De leiding levert arbeidskracht en krijgt daarvoor als vergoeding salaris en/of een aandeel in de winst. Daarnaast heeft de leiding zeggenschap over het bedrijf. De werknemers De werknemers leveren arbeidskracht en ontvangen hiervoor salaris en eventueel secundaire arbeidsvoorwaarden (zoals een mobiele telefoon of een auto van de zaak). De vermogensverschaffers In sommige gevallen levert de ondernemer al het vermogen in het bedrijf, maar dit kunnen ook aandeelhouders, obligatiehouders of banken zijn. Als vergoeding ontvangen ze hiervoor dividend of rente. De leveranciers van grondstoffen en machines Hier staat tegenover dat ze een betaling ontvangen. De afnemers De afnemers betalen een prijs en ontvangen daarvoor goederen. Deze afnemers kunnen andere bedrijven zijn die goederen of diensten afnemen, het kunnen ook consumenten zijn. De overheid De overheid ontvangt geld in de vorm van belasting. In het spel is er echter geen overheid. In de onderstaande tabel zijn de participanten overzichtelijk weergegeven. In de eerste kolom staat de groep van de participant, in de tweede kolom wat deze participant levert en in de derde kolom wat hij ontvangt. Levert Arbeidskracht
Ontvangt (mogelijk) Leiding Salarisen/of aandeel in de winst Zeggenschap Werknemers Arbeidskracht Salaris Secundaire arbeidsvoorwaarden Vermogensverschaffers Vermogen in het bedrijf Dividend (aandeelhouders) Rente (banken) Leveranciers van Grondstoffen/machines Betaling grondstoffen en machines Afnemers Betaling Goederen Overheid Infrastructuur, Belasting rechtsorde 8
Omgevingsfactoren Elke onderneming opereert binnen een maatschappelijke omgeving. Het gaat hierbij om de omgevingsfactoren of het ondernemingsklimaat waarbinnen de onderneming haar activiteiten ontplooit. Daarbij denken we in de eerste plaats aan de relaties met de participanten. En in de tweede plaats aan zaken als: de concurrentieverhoudingen, de algemene economische situatie en de betrekkingen met het buitenland. Maar ook verder weg gelegen omgevingsfactoren zoals de demografische ontwikkeling (veranderingen in omvang en samenstelling van de bevolking), de ontwikkeling van d techniek, het systeem van normen en waarden, het politieke systeem en de rechtsorde. Voor de economische wetenschap worden deze factoren als gegeven (data) beschouwd. Enkele omgevingsfactoren die van belang kunnen zijn voor het spel:
Concurrentieverhoudingen De omgeving van de onderneming wordt sterk beïnvloed door de concurrentieverhoudingen die bestaan op elk van de markten waarop de onderneming optreedt. Voor het spel is dit één van de meest belangrijke aspecten voor het wel of niet succes hebben van een bedrijf.
Economische situatie Voor een onderneming is de stand van de conjunctuur van groot belang. Hoogconjunctuur wordt gekenmerkt door hoge bestedingen van de consument. Tijdens een periode van laagconjunctuur is de economie lusteloos. Hoe dit in het spel eraan toe zal gaan is moeilijk te voorspellen. Wel moet er dan rekening mee worden gehouden met de groei van het aantal spelers (en ondernemingen) en juist een daling van het aantal actieve spelers (en ondernemingen). Dit kan een grote invloed hebben op de economie.
Demografische ontwikkeling Dit is een gedeelte waar de economie zich niet mee bezig houdt maar als data wordt gezien. Het heeft echter wel veel invloed op de ondernemingen. Demografen houden zich bezig met deze zaken. Voor een onderneming is de demografie erg belangrijk. De grootte, de groei en de samenstelling van de bevolking hebben invloed op het aantal en soort afnemers.
Betrekkingen met het buitenland, overheid In het spel is er maar één “land” en deze heeft geen overheid dus dit is niet van belang.
9
Bedrijfskolommen Misschien wel één van de belangrijkste punten waarop een werkelijke economie verschilt van een economische simulatiespel, is het feit dat je in de werkelijkheid onbegrensde mogelijkheden aan producten en bedrijfstakken hebt. Zowel in de producten als in de bedrijfstakken is er constant sprake van innovatie. Bij het bouwen van een spel werk je met berekeningen die de realiteit (mogelijk) nabootsen, maar je kan niet in de toekomst kijken. Daardoor wordt je verplicht door in hokjes te kijken naar de economie. We gaan kijken hoe we een economie in die hokjes kunnen indelen. In een bedrijfskolom wordt beschreven welke fasen een product doorloopt van de grondstofproducent tot en met de detailhandel. Dit gaat horizontaal via de aangegeven pijlen. Verticaal staan alle bedrijven in een bepaalde geleding. Voor het spel is het van belang om te weten wat er precies afspeelt in zowel de horizontale richting als de verticale richting.
In het spel... Voor het spel heb ik de onderstaande 3 geledingen gekozen die mogelijk zijn: Winning van grondstoffen Fabriceren van product Detailhandel Hiermee zijn alle essentiële geledingen opgenomen. De groothandel kan in het spel worden overgeslagen omdat je hier de goederen veel praktischer direct van de fabriek naar de detailhandel kan krijgen. Ook de horizontale kolommen zijn van enorm belang voor het spel. Daarin staan immers alle bedrijven in hun soort (grondstofwinning, fabricatie, detailhandel). Bij het inschrijven bij de Kamer van Koophandel (het oprichten van een onderneming) krijgt de ondernemer een code uit een lijst die de werkzaamheden van het bedrijf zo goed mogelijk beschrijft.1 Deze lijst is de Standaard Bedrijfsindeling (SBI)2 en is opgesteld door het CBS (Centraal Bureau voor de Statistiek). Voor 2008 werd de SBI nog aangevuld door de Bedrijfsindeling kamers van koophandel, tegenwoordig gebruikt de KvK alleen nog de SBI.
1
http://www.lancelots.nl/starten/kvk http://www.kvk.nl/over-de-kvk/over-het-handelsregister/wat-staat-er-in-het-handelsregister/sbi-code/
2
10
Uit deze lijst kunnen we alle bedrijven vinden die we nodig hebben. Voor het spel moeten we mogelijk deze bedrijven allen hun eigen berekeningen meegeven (en daarin kijken welke consument welke soort bedrijven wil) en wellicht aparte modules voor ieder soort bedrijf.
11
Deel III Ondernemen
In deel I hebben we het spel voornamelijk van bovenaf bekeken, namelijk hoe de bedrijven zich in de economie gedragen. In dit deel gaan we kort kijken naar hoe de spelers het gaan beleven: het ondernemen. Hoe zet de speler zijn bedrijf op en hoe beheert hij/zij dit bedrijf?
12
Het oprichten van een bedrijf Het oprichten van een bedrijf gebeurd in Nederland door je bedrijf aan te melden bij de Kamer van Koophandel.
Het beheren van een bedrijf Pand Een bedrijf heeft in de meeste gevallen een pand nodig waar de activiteiten plaatsvinden. In deel I hebben we al vastgesteld dat er 3 categorieën bedrijven zijn, namelijk bedrijven die zorgen voor de winning voor grondstoffen, bedrijven die producten fabriceren en bedrijven die deze verkopen (detailhandel). Voor deze 3 categorieën zijn er in principe 3 verschillende soorten “panden” nodig. Voor de winning van grondstoffen is een plek nodig waar het mogelijk is om deze grondstoffen te winnen en een plek om deze grondstoffen op te slaan. Voor de fabricage van producten is een plaats nodig waar een fabriek kan staan. Voor de detailhandel heeft men een winkel nodig. In deel III zal worden stilgestaan bij hoe deze spots ter beschikking komen. Wat nu van belang is, is dat spelers deze panden kunnen toewijzen aan hun bedrijf en het pand daardoor in gebruik kunnen nemen. De keuze van een pand is voornamelijk belangrijk vanwege:
De grootte en uitbreidingsmogelijkheden van dit pand De locatie van het pand en de bevolking die in de omgeving woont De concurrentie in de omgeving van de pand
Daarnaast zijn er nog kleinere punten die invloed kunnen hebben, bijvoorbeeld de afstand tussen de leverancier en jouw pand, dit scheelt namelijk theoretisch gezien transportkosten. Financiën Voor de ondernemer is een goede boekhouding erg handig. Zo weten zij precies hoe ze er voorstaan. Voor de spelers kan een overzicht van de in- en uitgeven ook zeker niet ontbreken. Daarnaast moeten er gegevens publiekelijk beschikbaar zijn indien het bedrijf aandelen uitgeeft. In Nederland is het bij een BV en NV verplicht om een jaarrekening op te stellen. In een jaarrekening zit (onder andere) een balans en een resultatenrekening. 3 Een balans is een vermogensoverzicht op een bepaald moment. Aan de linkerkant (de debetkant) is te zien in welke activa het geld is gestoken, en aan de rechterkant (de creditkant) waar het geld vandaan komt. Een voorbeeld van een balans is hieronder te vinden.
3
http://www.kvk.nl/ondernemen/producten-handelsregister/jaarrekeningen/wat-staat-er-in-eenjaarrekening/?refererAliasStat=gegevensjaarrekening
13
Op deze manier wordt de balans ingevuld
Het voordeel van een balans is dat het snel een globale indruk van de liquiditeit en solvabiliteit van een onderneming weergeeft. De solvabiliteit is de verhouding tussen de waarde van de totale activa en het totale vreemde vermogen. De liquiditeit is de verhouding tussen het totaal aan vlottende en liquide middelen en de schuld op korte termijn. Een resultatenrekening (ook wel winst- en verliesrekening genoemd) geeft een overzicht van de opbrengsten en kosten van een onderneming over een bepaalde periode. Een groot verschil met de balans is dat de resultatenrekening een overzicht geeft over een bepaalde periode, terwijl de balans een momentopname is.
In het spel... In het spel is het geven van een balans misschien erg ingewikkeld.Het is in ieder geval van belang dat de spelers kunnen zien hoeveel geld er per categorie uitgave (personeel, productie etc.) uitgaat en hoeveel inkomsten er gegeneerd wordt in Voorbeeld van een resultatenrekening
14
een bepaalde tijdsinterval.Een soort versimpelde resultatenrekening dus. Een voordeel van het niet geven van een balans is dat je bij het gebruik in het onderwijs de leerlingen zelf zou kunnen vragen om van hun fictieve bedrijf een balans op te stellen.
Vaste activa en contracten met andere spelers (leveranciers) Vaste activa zijn de bezittingen van een bedrijf die langer dan een jaar meegaan. Dit zijn bijvoorbeeld vrachtwagens, opslagplaatsen maar ook de machines van een bedrijf. De speler heeft deze goederen nodig om te kunnen produceren. Om te kunnen produceren heeft men, met uitzondering van de oerproducent, ook grondstoffen nodig. Spelers moeten hiervoor onderling eenmalige deals kunnen maken. Ook contracten moeten tot de mogelijkheid behoren: zo kan speler A iedere week een aantal steenkool aan speler B leveren, die er vervolgens iets mee gaat doen.
15
Deel IV Vermogen via de beurs
Een beurs kan niet ontbreken in dit spel. Wat betreft financiering zou het zeker te pas kunnen komen, maar misschien is er meer. De hoogte van een aandeel van een bedrijf geeft namelijk aan hoe “de mensen” denken dat een bedrijf eraan toe gaat. Gaat het aandeel omlaag, dan zijn de aandeelhouders negatiever over (de winst van) het bedrijf geworden. Een belangrijk element in een spel is het zowel samen als tegen elkaar spelen. In de beurs wordt dit perfect gecombineerd. Spelers kunnen in bedrijven van andere spelers investeren, maar tegelijk zijn het hun concurrenten: ze willen zelf de succesvolste bedrijven oprichten. In dit deel gaan we bekijken hoe de beurs precies werkt. In tegenstelling tot de eerste 2 delen gaan we dit deel echter ook écht bouwen. De we bsite hiervoor is te vinden op http://beurs.decet.nl//. 16
Bedrijf naar de beurs Wanneer een bedrijf voor het eerst aandelen gaat uitgeven, dan moet het bepalen wat elk aandeel gaat kosten. Er wordt eerst bepaald hoeveel het hele bedrijf waard is. Vervolgens kan je de prijs per aandeel berekenen door de totale waarde van het bedrijf te delen door het aantal uit te geven aandelen. De bedrijfsleiding maakt die prijs (die noemt men de uitgiftekoers of emissiekoers) bekend, en geeft ook een brochure uit waarin wordt uitgelegd wat voor soort bedrijf het is, wat de bezittingen en de schulden van het bedrijf zijn en hoe het gaat met het bedrijf. Zo kunnen mensen erachter komen waar ze precies in kunnen investeren. Het is verplicht om de informatie in de brochure (dit noemt men officieel de prospectus) te laten controleren door een accountant. Zo is het zeker dat de genoemde informatie juist is. Bij de bekendmaking van de prijs wordt ook een datum bekend gemaakt wanneer de aandelen uitgegeven gaan worden. Tot die datum kan iedereen zich melden om deze aandelen te kopen. Als het eenmaal zo ver is dan wordt er gekeken naar hoeveel mensen de aandelen willen kopen. Als er teveel mensen aandelen van het bedrijf wil kopen, dan krijgt iedereen er minder. Vervolgens deelt het bedrijf aan de kandidaat mee of hij de aandelen wil kopen. De kandidaat kan vervolgens de aandelen kopen en vanaf dan is hij de mede-eigenaar van het bedrijf.
Investeren, wat krijg je ervoor terug?
Mogelijke stijging van het aandeel in de loop van de tijd. In dit geval kan je het aandeel weer met winst verkopen. Dividend: als het bedrijf besluit winst uit te keren krijg je hier een bepaald bedrag per aandeel van. Invloed in het bedrijf: je mag in ieder geval naar de algemene vergadering van aandeelhouders.
17
Rekenen aan de beurs De koers van een aandeel is volledig gebaseerd op vraag en aanbod. Op iedere beurs is er een bepaalde graadmeter die een index geeft die aantoont hoe het met de beurs gaat. Op de Amsterdamse beurs hebben we de AEX, in België is er de Bel-20 en de Dow Jones heeft de Jow Dones-index. Ik ga in mijn berekeningen uit van het systeem die de AEX gebruikt. Deze berekening is als volgt4: Fonds 1 wegingsfactor_fonds * koers = Waarde fonds 1 Fonds 2 wegingsfactor_fonds * koers = Waarde fonds 2 Enz. enz. enz. enz enz. _______________ + / (divisor) = index Ieder fonds heeft een wegingsfactor, deze is afhankelijk van de grootte van het bedrijf. Dit wordt 2x per jaar bepaald. De divisor zorgt er in eerste instantie voor dat de index niet te groot is. Voor dit profielwerkstuk kiezen we voor een divisor van 100, om het makkelijk te houden. Wat er op de beurs tegenwoordig vaak gebeurd is dat de divisor variabel is. De divisor past zich bijvoorbeeld aan als de wegingsfactoren veranderen of er nieuwe bedrijven op de beurs komen. Hierdoor veranderd de index niet opeens heel veel als er bedrijven vervangen worden in de graadmeter.
4
http://www.behr.nl/GA/aex.html
18
De bestanden en database Bestandsstructuur /public_html Alle publiek toegankelijke bestanden (hier verwijst aandelen.php Een overzicht van jouw aandelen bedrijf.php Een overzicht van je bedrijven en het starten van een bedrijf beurs.php Beurs (overzicht, aandelen kopen/verkopen) index.php Startpagina, waar je ook kan inloggen login.php Inloggen logout.php Uitloggen pwsx.php Het opnieuw bereken van het indexcijfer van de beurs (PWSX) status.php Overzicht van je gegevens (loginnaam, hoeveel geld je hebt..) /img Alle afbeeldingen /style CSS-bestanden (Cascading Style Sheet) /graphic Het graphic-systeem (afbeeldingen en het stukje PHP GD) /include Bestanden die geinclude worden, oftewel configuratie-bestanden e.d. config.php Algemene configuratie footer.php De footer van iedere pagina functions.php De zelfgemaakte PHP-functies header.php De header van iedere pagina sql.php Verbinding maken met de MySQL database Folder /include Dit bestanden in de /include map kunnen alleen door de gebruiker “geopend” worden wanneer een bestand in de public_html map hierheen verwijst. In de uitleg bij de /public_html-map laat ik precies zien waarom dit zo is. Deze map is dus erg geschikt voor bijvoorbeeld het verbinding maken met de database, het inladen van alle algemene functie, de configuratie en dergelijke. Bestand config.php In vrijwel ieder bestand in de public_html-map staat de onderstaande regel: 1. 2. 3. 4.
Ieder bestand laadt dus de configuratie. In de configuratie worden er drie dingen gedaan: 1. De sessies worden gestart. Dit is nodig om sessie-variabelen aan te kunnen maken, maar ook op deze te kunnen lezen. Bij het inloggen (zie login.php) wordt er een sessie variabele aangemaakt waarin de gebruikersnaam van de ingelogde speler staat. 2. Er worden 2 bestanden ingevoegd (via include_once): sql.php, voor de verbinding met de database, en functions.php, voor de zelf aangemaakte functies. 3. Er wordt gecontroleerd of de gebruiker is ingelogd. Dit wordt alleen gedaan wanneer het nodig is voor die pagina om ingelogd te zijn. Vandaar regelnummer 2 in de snippet hierboven, LOGIN wordt gedefinieerd zodat dit bestand weet dat het moet controleren of de gebruiker wel is ingelogd. 19
Bestand header.php De titel van dit bestand is misschien wat misleidend, want het bevat niet alleen maar de header. Ook het menu zit in dit bestand. Door dit bestand iedere keer in te voegen is er op iedere pagina dezelfde lay-out. Het is erg handig om dit op één pagina te hebben, zodat je dit niet op iedere pagina weer hoeft te plakken en als je dan iets wil aanpassen het op iedere pagina moet aanpassen. Het bevat het logo van de website, en het menu, waar ook een klein overzicht staat van verschillende gegevens: het geld dat je op zak hebt, en de huidige koers van de beurs. Bestand footer.php Dezelfde gedachte als header.php, alleen is dit het afsluitende stuk. Bestand functions.php Hier staan alle zelfgemaakte functies die handig zijn voor op meerdere pagina’s. Ik heb er voor dit project weinig gebruik van gemaakt. Ik heb alleen een die_with_error() functie aangemaakt, maar die gebruik ik niet overal. Bestand sql.php Dit bestand maakt verbinding met de MySQL database. Mocht het niet lukken, dan wacht het script 1 seconde, en probeert het daarna weer opnieuw. De hele MySQL database is op de volgende pagina bijgevoegd.
20
MySQL Database
21
Folder /public_html In deze map staan alle bestanden die voor iedereen toegankelijk zijn. Om dit iets verder toe te lichten, nog een klein stukje theorie. Het DNS (Domain Name System) is het systeem en netwerkprotocol dat domeinnamen omzet in een IP-adres en omgekeerd. Het komt er op neer dat dit een lijst is, die voor mensen duidelijke domeinnamen (bijvoorbeeld www.google.nl, www.nu.nl) omzet in een IP-adres (bijvoorbeeld 88.198.44.212). Ik heb beurs.decet.nl laten doorverwijzen naar het IP-adres van mijn server, 78.47.251.211. Ik heb voor mijn server de webserver Apache gekozen, één van de meest gebruikte webservers in Linux5. Zodra er een client naar beurs.decet.nl gaat zal de Apache webserver hem opvangen. Ik heb Apache zo geconfigureerd dat de DocumentRoot van beurs.decet.nl verwijst naar ~/beurs/public_html: Gedeelte uit /etc/apache2/beurs
ServerName beurs.decet.nl ServerAlias www.beurs.decet.nl
(apache configuratie)
DocumentRoot /home/rell/beurs/public_html/ Zodra mensen dus in hun browser naar http://beurs.decet.nl/ gaan zullen ze terechtkomen op de public_html folder, om precies te zijn op het bestand index.php. Je kan niet zomaar in de include map terecht komen. Bestand index.php Index.php is een beetje een buitenbeentje in vergelijking met de andere bestanden. Dit is namelijk de enige pagina waar je niet voor ingelogd hoeft te zijn. Het heeft ook een afwijkende lay-out. Het belangrijkste wat op deze pagina te vinden is is een form waar je kan inloggen. Deze verwijst naar login.php.
5
http://news.netcraft.com/archives/category/web-server-survey/
22
Bestand login.php In index.php stond het onderstaande stukje HTML: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Gebruikersnaam | |
Wachtwoord | |
| |
Dit formulier verzend twee gegevens: namelijk password en login. Login is de gebruikersnaam, en password het wachtwoord. Zodra een gebruiker dit heeft ingevuld en op de “inloggen” –knop klikt zal deze data worden verzonden naar login.php. In login.php wordt eerst de ingevulde gebruikersnaam opgezocht in de database, en wordt een foutmelding weergegeven wanneer deze niet gevonden is. Als deze wel gevonden is, dan wordt het gevonden wachtwoord vergeleken met het wachtwoord wat de gebruiker heeft ingevoerd. Echter, voordat dit gedaan wordt, wordt eerst het ingevoerde wachtwoord in zowel een md5-hash als een sha1-hash gegooid. Dit doen we omdat in de database de wachtwoorden ook op deze manier versleuteld zijn. Dit is ter beveiliging: mocht iemand in de database weten te komen, dan weet hij/zij nog niet gelijk de wachtwoorden van alle gebruikers. Een md5-hash lijkt op het eerste gezicht al veilig genoeg, je kan het wachtwoord namelijk niet met een functie terug weten te halen. Er zijn echter op het internet veel databases waarmee je een wachtwoord alleen beveiligd met een md5-hash kan achterhalen. Daarom zit er ook nog een sha1-hash bovenop. 1 2
$password_db=$rec->password; $password=md5(sha1($password.' pwspass'));
23
Indien de gebruiker succesvol is ingelogd wordt er een sessie-variabele aangemaakt met zijn gebruikersnaam. Dit zodat we op de komende pagina’s ook nog weten dat de gebruiker is ingelogd en wie de gebruiker überhaupt is. De gebruiker wordt doorverwezen naar status.php Bestand status.php In status.php gebeurd er niet veel bijzonders: er is een query die de informatie van de gebruiker ophaalt. Deze informatie wordt gepresenteerd aan de gebruiker. Bestand bedrijf.php Op deze pagina staat een overzicht van de bedrijven van de ingelogde speler. Daarnaast kan de speler ook een bedrijf oprichten. Het oprichten van een bedrijf gaat gepaard met het naar de beurs gaan van dat bedrijf. De speler kan het aantal aandelen opgeven waarmee hij naar de beurs wil, de prijs per aandeel die hij wil ontvangen en vervolgens staat het bedrijf op de beurs. De aandelen staan in de tabel “aandelen_offers”, op de naam van de eigenaar van het bedrijf. Bestand aandelen.php Op deze pagina staat een overzicht van de aandelen van een speler. Bestand beurs.php Op de beurspagina gebeuren de meeste spannende dingen: je kan aandelen bekijken, kopen en verkopen. De code begint met een “if” om te kijken of de gebruiker de aandelen van een bepaald bedrijf wil bekijken of een overzicht van alle bedrijven wil hebben. We bekijken eerst het 2e deel van de code: vanaf de “else” (regelnummer v.a. 401). 2e deel: pagina met overzicht van alle bedrijven 1 2 3 4
$res=mysql_query("SELECT * FROM `bedrijven` WHERE `amount`>0"); while($rec=mysql_fetch_object($res)) {
Er wordt eerst via een simpele query alle bedrijven uit de database gehaald. Via een while loop komt wordt er een lijst in HTML gemaakt met de benodigde informatie over het bedrijf. De koers van een bedrijf wordt als volgt berekend: 1 2 3 4 5 6 7 8 9 10 11 12
id."' ORDER BY `time` DESC, `id` DESC LIMIT 0,1")ordie_with_error(mysql_error()); if(mysql_num_rows($res2)==0) $res2=mysql_query("SELECT * FROM `aandelen_offers` WHERE `bedrijfs_id`='".$rec->id."' ORDER BY `time` DESC, `id` DESC LIMIT 0,1")ordie_with_error(mysql_error()); $rec2=mysql_fetch_object($res2); ?> €=intval($rec2->price)?>
24
Er wordt gekeken naar de laatste transactie van aandelen van het betreffende bedrijf. Als deze niet bestaat (mysql_num_rows levert 0 op) dan betekent dit dat het bedrijf net naar de veiling gegaan is en de eigenaar nog alle aandelen heeft en aanbiedt in de tabel aandelen_offers. Dus dan wordt er naar deze prijs gekeken voor de koers. De berekening van de koersverandering is als volgt: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
$change=intval($rec2->price)-intval($rec3->price); $change=$change/$rec2->price; $change*=100; if($change<0) $sign='beurs_negative'; elseif($change==0) $sign='beurs_neutral'; elseif($change>0) $sign='beurs_positive'; ?> .gif'/>= round(abs($change),1)?>%
$rec2->price is de huidige koers, $rec3->price is de allereerste koers. Dit is opvallend omdat meestal vergeleken wordt met de slotkoers van de dag ervoor. Dit wil ik in het spel ook realiseren. Nu leek het me echter makkelijker om het te vergelijken met de beginkoers, omdat wat ik gebouwd heb niet gespeeld gaat worden, en je nu precies kan zien wat er met de koers gebeurd. De berekening gaat verder als volgt: 𝑘𝑜𝑒𝑟𝑠𝑣𝑒𝑟𝑠𝑐ℎ𝑖𝑙 =
𝑘𝑜𝑒𝑟𝑠𝑜𝑢𝑑 − 𝑘𝑜𝑒𝑟𝑠ℎ𝑢𝑖𝑑𝑖𝑔 ∗ 100 𝑘𝑜𝑒𝑟𝑠ℎ𝑢𝑖𝑑𝑖𝑔
1e deel: pagina van een bepaald bedrijf waar je aandelen kan kopen/verkopen Via een GET-waarde wordt aangegeven dat de pagina van een bepaald bedrijf moet worden geopend. Vervolgens wordt door de code het bedrijf opgezocht in de database en alvast de koers berekend. De speler krijgt een pagina te zien met daarin:
De mogelijkheid om aandelen te kopen en te verkopen; Een lijst met daarin aanbieders van de aandelen van dit bedrijf (de 2 met de laagste prijs); Een lijst met daarin vragers van de aandelen van dit bedrijf (de 2 met de hoogste prijs); De koers van de aandelen van het bedrijf; De laatste 5 transacties van het aandeel; Wie de aandelen in handen heeft (de aandelen die niet te koop staan). 25
Aandelen kopen/verkopen Als "$_POST['do_buysell']" gevuld is betekent dit dat de speler aandelen wil kopen of verkopen. Er worden in de code eerst een aantal checks uitgevoerd, bijvoorbeeld of de gebruiker wel een juiste prijs en aantal aandelen heeft opgegeven. Vervolgens wordt gekeken of de gebruiker aandelen wil kopen of verkopen. Er wordt gekeken of het aantal aandelen dat de gebruiker wil kopen al te koop staan voor een prijs onder die van wat de speler biedt. Als dit niet het geval is, dan komt er een bericht, waarin een overzicht wordt gegeven hoeveel aandelen er te koop zijn, en hoeveel er op de "lijst" worden gezet van dat je die aandelen wil kopen zodra ze aangeboden worden. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
$res=mysql_query("SELECT SUM(amount) AS tot_amount FROM `aandelen_offers` WHERE `price` <= '".$price."' AND `bedrijfs_id`='".$id."' AND `type`='sell'")ordie(mysql_error()); $rec=mysql_fetch_object($res); if($rec->tot_amount<$amount) { $totalprice=$rec->tot_amount*$price; $remaining=$amount-$rec->tot_amount; echo"Er werden ".intval($rec->tot_amount)." aandelen gevonden voor een prijs onder de € ".$price.". Als je op \"doorgaan\" klikt, worden ".$rec->tot_amount." aandelen direct gekocht voor maximaal € ".$totalprice.".
De overige ".$remaining." aandelen zullen automatisch gekocht worden wanneer iemand deze aandelen aanbiedt. Dit geld wordt wel direct van je rekening afgeschreven. Je kan dit bod annuleren bij \"mijn aandelen\", dan krijg je je geld terug.
Do orgaan | Terug "; }
Als deze aandelen wel volledig aangeboden worden dan wordt de gebruiker automatisch doorverwezen naar het definitieve kopen. 1. 2. 3. 4. 5. 6.
else { header('location: beurs.php?id='.$id.'&action=confirmed&buy='.intval($amount).'&price='. $price.'&method=buy'); }
Bij het verkopen van aandelen werkt dit hetzelfde, behalve dat er dan gekeken wordt naar hoeveel mensen er al deze aandelen vragen.
26
Als bevestigt is dat de gebruiker de actie wil uitvoeren, wordt het volgende gedaan in de code: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
elseif(($_GET['action']=='confirmed')&&($_GET['method']=='buy')) { $amount=$_GET['buy']; $price=intval($_GET['price']); $costs=0; $bought=0; $res=mysql_query("SELECT * FROM `aandelen_offers` WHERE `price`<='".$price."' AND `bedrijfs_id`='".$id."' AND `type`='sell' ORDER BY `price` ASC")ordie(mysql_error()); while($rec=mysql_fetch_object($res)) {
De query in regel 9 zoekt alle aanbieders van aandelen op die aandelen verkopen onder de geboden prijs. $amount is het aantal aandelen dat de gebruiker wil kopen; $costs zijn de kosten van alle aandelen bij elkaar (voor de while loop begint is deze 0); $bought zijn het aantal aandelen die gelijk gekocht zijn (voor de while loop begint is deze 0); Vervolgens gaat deze query in een while loop. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
if($bought!=$amount) { $amount_left=$amount-$bought; if(($rec->amount >=$amount_left)) { // Het aantal aandelen dat in deze row aangeboden is is groter/gelijk aan wat de $_SESSION['login'] wil $totalprice=$amount_left*$rec->price; $costs+=$amount_left*$rec->price; $bought+=$amount_left; $res3=mysql_query("SELECT * FROM `aandelen` WHERE `owner`='".$_SESSION['login']."' AND `bedrijfs_id`='".$id."'")ordie(mysql_error()); if(mysql_num_rows($res3)!=1) mysql_query("INSERT INTO `aandelen` (`bedrijfs_id`, `owner`, `amount`) VALUES ('".$id."', '".$_SESSION['login']."', '".$amount_left."')")ordie(mysql_error()); else mysql_query("UPDATE `aandelen` SET `amount`=`amount`+".$amount_left." WHERE `bedrijfs_id`='".$id."' AND `owner`='".$_SESSION['login']."'")ordie(mysql_error()); if($rec->amount ==$amount_left) mysql_query("DELETE FROM `aandelen_offers` WHERE `id`='".$rec>id."'")ordie(mysql_error()); else mysql_query("UPDATE `aandelen_offers` SET `amount`=`amount`'".$amount_left."' WHERE `id`='".$rec->id."'")ordie(mysql_error());
27
mysql_query("UPDATE `users` SET `cash`=`cash`+".$totalprice." WHERE `login`='".$rec->owner."'")ordie(mysql_error()); mysql_query("UPDATE `users` SET `cash`=`cash`-".$totalprice." WHERE `login`='".$_SESSION['login']."'")ordie(mysql_error()); mysql_query("INSERT INTO `aandelen_transactions` (`amount`, `bedrijfs_id`, `seller`, `buyer`, `price`, `time`) VALUES('".$amount_left."', '".$rec->bedrijfs_id."', '".$rec>owner."', '".$_SESSION['login']."', '".$rec->price."', '".time()."')")ordie(mysql_error()); } {
Eerst wordt er gekeken of alle benodigde aandelen al gekocht zijn. Is dit niet het geval, dan: Regel 4 e.v.: Wil de gebruiker nog genoeg aandelen dat hij alle aandelen wil kopen van de in de tabel aandelen_offers door een andere speler aangeboden aantal? Zo niet, dan:
De aandelen worden verplaatst van aandelen_offers (waar ze nog eigenaar zijn van de speler die de aandelen aanbiedt) naar aandelen (waar ze de eigenaar worden van degene die de aandelen koopt). Het aanbod wordt verminderd met het aantal dat de speler wil kopen Het geld gaat er bij de ene speler af en bij de andere speler erbij De transactie wordt opgeslagen in aandelen_transactions (dus de koers veranderd automatisch, aangezien daarvoor naar die tabel wordt gekeken).
Zo wel, dan gaat het ongeveer hetzelfde alleen wordt dan het hele aanbod verwijderd. Verder wordt er nog gekeken naar hoeveel aandelen de speler wil "reserven" (dus direct wil kopen zodra iemand ze verkoopt voor de geboden prijs): 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
if($_GET['reserve']) { $cash=intval($_GET['reserve'])*$price; mysql_query("UPDATE `users` SET `cash`=`cash`-{$cash} WHERE `login`='".$_SESSION['login']."'"); mysql_query("INSERT INTO `aandelen_offers` (`owner`, `bedrijfs_id`, `amount`, `type`, `price`, `time`) VALUES('".$_SESSION['login']."', '{$id}', '".intval($_GET['reserve'])."', 'buy', '{$price}', '".time()."')")ordie(mysql_error()); }
Voor het verkopen in plaats van het kopen van aandelen werkt het systeem ongeveer hetzelfde.
28
Bestand pwsx.php In dit bestand wordt een nieuwe index berekend (ik heb het de naam "PWSX" gegeven). Dit bestand wordt momenteel in vrijwel ieder ander bestand geinclude. In de toekomst zou een cronjob deze taak moeten overnemen en de waarde iedere keer in de database schrijven. Een cronjob is het in de achtergrond en in termijnen uitvoeren van een bestand door de server. Momenteel worden de waarden (wegens tijdgebrek) niet in de database geschreven, maar iedere keer opnieuw berekend zodra een gebruiker een pagina opvraagt. Hierdoor is helaas ook geen grafiek van de geschiedenis van de PWSX mogelijk.
29
Conclusie In het eerste gedeelte heb ik onderzocht wat de uitgangspunten van het spel zijn en heb ik kort gekeken naar andere spellen. Hierbij ben ik tot de conclusie gekomen dat een speler in een spel zich meestal bevindt in een positie waarin hij normaal niet zit. Er is daarnaast ook vaak concurrentie en samenwerking binnen het spel. In het tweede gedeelte heb ik gekeken naar de vraag hoe de bedrijven zich verhouden in een economie. Hierbij heb ik gekeken naar wie er invloed heeft in een economie, wat de omgevingsfactoren van een bedrijf zijn en wat voor soort bedrijven er zijn. Hierbij ben ik o.a. op een lijst van de KvK gekomen met een volledige lijst met bedrijven. In het derde gedeelte heb ik gekeken hoe het ondernemen er nou precies uit ziet vanuit het oogpunt van de ondernemer. Hierbij heb ik onder andere gekeken naar financieële gegevens van een bedrijf. In het vierde gedeelte heb ik de beurs onderzocht en daarnaast ook gebouwd. Hierbij ben ik er o.a. achter gekomen wat de berekening van de graadmeter van de beurs (bijvoorbeeld de AEX) is. De vraag "hoe creeër je een virtuele economie" is niet makkelijk te beantwoorden, maar ik heb er in dit profielwerkstuk een goed fundament voor gezet. Via de gebouwde beurs is te zien wat er allemaal mogelijk is.
Reflectie Ik heb van dit profielwerkstuk veel geleerd. Ik weet nu veel meer over hoe de beurs precies werkt, maar ook hoe dit gebouwd kan worden. Maar misschien nog belangrijker, heb ik in de gaten gekregen dat het idee van het spel goed uit te werken is en ook goed mogelijk om te bouwen. Het onderwerp wat ik voor mijn profielwerkstuk heb gekozen is misschien ook iets te groot geweest. Ik heb sommige onderdelen een beetje moeten afraffelen om het profielwerkstuk op tijd in te leveren. Hierdoor kon ik sommige onderdelen niet zo diep ingaan als ik zou willen. Ook de planning is niet altijd even goed gegaan, mede ook omdat het meer tijd kostte dan ik had gedacht. Ik had wel eerder kunnen beginnen.
30
Literatuurlijst Boeken Onderneming en omgeving Basiskennis economie voor het hoger onderwijs Dr. R. Schöndorff drs. JF.B. Pleus dr. C.A. de Kam m.m.v. drs. J. van Ijzerloo
Zevende druk, eerste oplage, 2011 ISBN 978 90 06 95113 4
Statistiek en demografie J.J. Groot J.M. Tiessen
Digitaal boek, maart 2010
Economie in balans Jan Karel van den Haak Albert Pelssers
4e druk, 2002 ISBN 90 425 2154 6 / NUGI 156
Websites http://news.netcraft.com/archives/category/web-server-survey/ http://www.kvk.nl/over-de-kvk/over-het-handelsregister/wat-staat-er-in-het-handelsregister/sbicode/ http://www.lancelots.nl/starten/kvk http://www.kvk.nl/ondernemen/producten-handelsregister/jaarrekeningen/wat-staat-er-in-eenjaarrekening/?refererAliasStat=gegevensjaarrekening http://www.behr.nl/GA/aex.html
31
Logboek Vrijdag 2 december Woensdag 27 december Vrijdag 10 feb Vrijdag 17 feb Vrijdag 17 feb Maandag 20 februari Maandag 27 februari Maandag 27 februari Dinsdag 28 februari
Vrijdag 2 maart Vrijdag 2 maart
Dinsdag 6 maart Dinsdag 6 maart Zaterdag 10 maart Vrijdag 16 maart Zaterdag 24 maart Maandag 26 maart Dinsdag 27 maart Vrijdag 30 maart Zaterdag 31 maart Zondag 1 april Woensdag 4 april Vrijdag 6 april Zaterdag 7 april Vrijdag 14 april Zaterdag 15 april Maandag 17 april
Dinsdag 18 april
Brainstormen spel Brainstormen spel Gesprek (school) Gesprek (school) Onderzoeksvraag + deelvragen + planning bedenken Environment voor beurs klaarmaken Informatie verzameld op school Informatie verzameld + boeken bestelt Database ingesteld + homepage gemaakt + inloggen geprogrammeerd Gesprek (school) Boek “Onderneming en Omgeving” doorgespit (alles eruit gehaald wat van belang is) Deelvraag 1 (oud, nu 2) Deelvraag 1(oud, nu 2) Deelvraag 1(oud, nu 2) Deelvraag 1+2 Deelvraag 3+4 PWS presentatie voorbereiden PWS presentatie Deelvraag 3 Beurs bouwen Beurs bouwen Deelvraag 1+2+3 Beurs bouwen Beurs bouwen Beurs bouwen Bestanden uitleggen in PWS Deelvraag 1+2+3 laatste wijzigingen, bestanden uitleggen Laatste wijzigingen (en stukje bestanden uitleggen), + uitprinten e.d. Totaal
240 240 30 30 120 90 60 60 180
15 240
240 60 360 240 240 240 120 120 240 190 120 240 160 450 300 180
180
+- 5000 uur (83 uur)
32
Bijlagen Bijlage 1: werkplan Onderzoeksvraag Hoe creëer je een virtuele economie in spelvorm? Deelvragen 1. Wat zijn de uitgangspunten van het spel? 2. Hoe maak je het oprichten en beheren van een bedrijf? a. Hoe richt je een bedrijf op? b. Hoe maak je het oprichten van een bedrijf in spelvorm? c. Hoe beheer je een bedrijf? d. Hoe maak je het beheren van een bedrijf in spelvorm? 3. Hoe maak je een beurs? a. Wat zijn de berekeningen achter de beurs? b. Hoe ga je met je bedrijf naar de beurs?
Originele Planning Tot Vrijdag 24 februari Vrijdag 2 maart Vrijdag 9 maart Vrijdag 16 maart Vrijdag 23 maart
Vrijdag 30 maart
Taken Programmeer-environment voor beurs gereed; begin gemaakt (simpel registreer/login schermpje, zodat daarna verder kan worden gewerkt) Informatie verzameld over alle deelvragen Deelvraag 3: Beurs programmeren, 50% af Deelvraag 1: 1a, 1b Deelvraag 1: alles Deelvraag 3: Beurs programmeren, 100% af Deelvraag 3: alles Deelvraag 2: 2a, 2b Lay-out PWS Deelvraag 2: 2c, 2d, 2e (alles) Inleiding+voorwoord+inhoudsopgave etc. PWS af
33
Bijlage 2: gebruikersuitleg beurs De website is te vinden op http://beurs.decet.nl/. Ik heb 5 accounts aangemaakt waarop getest kan worden: Gebruikersnaam Demo Klaas Jan Piet Henk
Wachtwoord demo demo demo demo demo
Zodra je bent ingelogd is er links een menu te vinden. Boven het menu staat de index van de graadmeter van de beurs, de pwsx. Daaronder staat het geld dat op dit account staat. Bedrijf starten Bij "jouw bedrijf" kan je een bedrijf starten. Het zal dan automatisch op de beurs gaan. Aandelen kopen/verkopen Bij "beurs" kan je aandelen van alle bedrijven kopen en verkopen. Bij "jouw aandelen" staat er een overzicht van je aandelen.
34