Gamesdust
usr.mnu
zoeken

Home
Nieuws
Reviews
Previews
Columns
Walkthroughs
English
Forum

Login

Registreer

Hoe maak ik een game? Les 1: Spelen met getallen

Door: Switchboy op: 2014-05-06, 5454 views

ArtikellogoAltijd al een game willen maken, maar weet je niet waar je moet beginnen? Of lijkt het je te moeilijk? Dan zijn deze lessen voor jou! Games maken is namelijk helemaal niet moeilijk en zelfs leuk! En met deze lessen leer je stap voor stap hoe het moet!

Aan het einde van deze les kan je:
- Een basaal programma maken
- Tekst in de console laten verschijnen
- Getallen in het geheugen zetten
- Getallen uit het geheugen laten zien
- Getallen optellen en aftrekken

Om deze les te kunnen volgen ga ik ervan uit dat je de vorige les gevolgd hebt.

In deze les komen een paar basale dingen in het programmeren aan bod. Om het leren wat sneller te laten gaan, zullen we in deze eerste les een programma schrijven wat in de console werkt. Dit is te vergelijken met een oud DOS programma.

Als eerste zullen we kijken hoe we tekst kunnen laten verschijnen in het Console schermpje. We starten hiervoor een nieuw project en maken meteen een “main.cpp” Hierin gaan we ons project schrijven. Alles wat in main.cpp staat zal als eerste worden gelezen. In main.cpp maken we een nieuwe functie die we main noemen. Dit doen we door het volgende in te typen:

int main()
{
}


Alles wat in de functie main staat zal als eerste worden uitgevoerd. We weten nu dus wáár we de opdracht in moeten zetten om een tekst op het scherm te laten verschijnen. Om dit te kunnen doen moeten we controle hebben over de input/output van de computer. Dit kunnen we doen met een standaard externe library genaamd “iostream”. Om deze in het progamma aan te kunnen roepen zetten we de volgende code voor int main(). Waarom ervoor? Omdat als we het erna zetten weet de compiler niet waarna we verwijzen. De compiler weet pas waar iets staat als hij erlangs is gekomen.
Onze code ziet er nu zo uit:

#include <iostream>

int main()
{

}


Om text op de console te laten verschijnen moeten we de functie “cout” gebruiken. Deze functie staat in een namespace. De namespace waar deze in staat heet “std”. Om deze functie aan te roepen gebruiken we het commando: “std::cout”. Je kan cout, uitgesproken als c(onsole)-out , als volgt gebruiken:

std::cout << "Hallo, wereld! "


Wij willen na onze tekst ook dat de regel eindigt hiervoor moeten we de functie endl, die ook in de namespace std staat, gebruiken. De hele opdrachtregel ziet er dan als volgt uit:

std::cout << "Hallo, wereld! " << std::endl


Om een opdracht regel te eindigen gebruik je in C++ het ; karakter de volledige opdracht ziet er dus als volgt uit:

std::cout << "Hallo, wereld! " << std::endl;


Als we nu deze opdracht in main() zetten zullen we een fractie van een seconde de tekst “Hallo, wereld!” op het scherm zien voor het verdwijnt. Om de tekst te laten staan kunnen we programma even pauzeren tot er een toets ingedrukt wordt. Dit kan met de functie “cin.get()”. Deze functie wacht op input van het toetsenbord. De volledige code van het progamma ziet er als volgt uit:

#include <iostream>

int main()
{
std::cout << "Hallo, wereld!" << std::endl;
std::cin.get();
}



De output die we krijgen is in dit geval:

Hallo, wereld!



We hebben nu iets wat een tekst laat zien en zichzelf afsluit. Nog niet echt een heel interactief programma. Daar moeten we maar eens verandering inbrengen. We gaan proberen om een getal wat door de gebruiker ingevoerd wordt weer te geven.

Hiervoor hebben een aantal dingen nodig:
- Een plek om het getal in het programma te bewaren
- Een manier om het getal in het programma te krijgen
- Een manier om het getal te laten zien

Een getal slaan we op in variabele. Één van die variabelen is een int (integer). Dit is een variabele die een heel getal kan bevatten. Een container voor een komma getal is een float. Er zijn nog andere variabele zoals strings, vectors en arrays maar die laten we in deze les buiten beschouwing.

Om een int te gebruiken moeten we hem eerst maken. Dit doen we door hem te declaren. Dat gaat als volgt:

int onsgetal;



Dit zetten we in main() neer omdat onsgetal alleen in main gebruikt hoeft te worden. Als je hem buiten main zet kunnen ook andere functies bij deze variabele. Om een waarde aan ons getal toe te kennen typen we het volgende:

onsgetal = 25;


We kunnen dit als volgt in de console weergeven:

std::cout << "ons getal is: " << onsgetal << std::endl;


Het hele programma ziet er dan als volgt uit:

#include <iostream>

int main()
{
int onsgetal;
onsgetal = 25;
std::cout << "ons getal is: " << onsgetal << std::endl;
std::cin.get();
}



En de output die we krijgen is:

ons getal is: 25



Nu hebben we een progamma wat een vast getal laat zien. Maar het is veel meer een “echt” programma als we zelf het getal kunnen verzinnen en intypen. Om een getal vanuit console input te krijgen kunnen we de functie cin uit std gebruiken.

std::cin >> onsgetal;


Hierna moeten we wel de input buffer leegmaken met “std::cin.ignore();” anders zal ons programma niet stoppen als hij de tekst heeft laten zien. Want er staan dan nog ingedrukte toetsen in de buffer!

Zet deze opdracht regel maar eens in plaats van "onsgetal = 25;" in het programma.

Nu heb je alle gereedschappen om een programma te maken wat om een getal vraagt en deze vervolgens ook laat zien. Je kan met int ook rekenen

std::cout << "ons getal is: " << onsgetal +1 << std::endl;


Bedenk maar eens wat er gebeurd bij de volgende opdracht regel. Andere operators die je kunt gebruiken zijn + optellen, - aftrekken, / delen door en * vermenigvuldigen.

Probeer zonder naar de code hieronder te kijken een programma te maken waarbij je twee getallen kan invullen die vervolgens door de computer opgeteld, afgetrokken, gedeeld en vermenigvuldigd met elkaar worden.


Antwoord:

#include <iostream>

int main()
{
int onsgetal, onsgetal2;
std::cout << "Wat is het eerste getal?"<< std::endl;
std::cin >> onsgetal;
std::cout << "Wat is het tweede getal?"<< std::endl;
std::cin >> onsgetal2;
std::cout << "Het eerste getal is: " << onsgetal << std::endl;
std::cout << "Het tweede getal is: " << onsgetal2 << std::endl;
std::cout << onsgetal << " + " << onsgetal2 << " = " << onsgetal + onsgetal2 << std::endl;
std::cout << onsgetal << " - " << onsgetal2 << " = " << onsgetal - onsgetal2 << std::endl;
std::cout << onsgetal << " / " << onsgetal2 << " = " << onsgetal / onsgetal2 << std::endl;
std::cout << onsgetal << " * " << onsgetal2 << " = " << onsgetal * onsgetal2 << std::endl;
std::cin.ignore();
std::cin.get();
}


Als we 12 en 6 invullen krijgen we al uitkomsten:

12 + 6 = 18
12 - 6 = 6
12 / 6 = 2
12 * 6 = 72



Al deze uitkomsten kloppen maar als we als getallen 2 en 3 invullen. Dan krijgen we dit:

2 + 3 = 5
2 - 3 = -1
2 / 3 = 0
2 * 3 = 6


Dat klopt niet! 2 / 3 = 0,667 en niet 0. Waarom doet dit programma het verkeerd? Dat komt omdat een int alleen hele getallen kan laten zien. En zal altijd naar benden afronden! Om dit op te lossen kun je aantal dingen doen. Je kunt de getallen niet als int behandelen maar als float in het hele programma:

#include <iostream>

int main()
{
float onsgetal, onsgetal2;
std::cout << "Wat is het eerste getal?"<< std::endl;
std::cin >> onsgetal;
std::cout << "Wat is het tweede getal?"<< std::endl;
std::cin >> onsgetal2;
std::cout << "Het eerste getal is: " << onsgetal << std::endl;
std::cout << "Het tweede getal is: " << onsgetal2 << std::endl;
std::cout << onsgetal << " + " << onsgetal2 << " = " << onsgetal + onsgetal2 << std::endl;
std::cout << onsgetal << " - " << onsgetal2 << " = " << onsgetal - onsgetal2 << std::endl;
std::cout << onsgetal << " / " << onsgetal2 << " = " << onsgetal / onsgetal2 << std::endl;
std::cout << onsgetal << " * " << onsgetal2 << " = " << onsgetal * onsgetal2 << std::endl;
std::cin.ignore();
std::cin.get();
}



Je kan een extra float maken speciaal voor het delen:

#include <iostream>

int main()
{
int onsgetal, onsgetal2;
float delen1, delen2;
std::cout << "Wat is het eerste getal?"<< std::endl;
std::cin >> onsgetal;
std::cout << "Wat is het tweede getal?"<< std::endl;
std::cin >> onsgetal2;
std::cout << "Het eerste getal is: " << onsgetal << std::endl;
std::cout << "Het tweede getal is: " << onsgetal2 << std::endl;
std::cout << onsgetal << " + " << onsgetal2 << " = " << onsgetal + onsgetal2 << std::endl;
std::cout << onsgetal << " - " << onsgetal2 << " = " << onsgetal - onsgetal2 << std::endl;
delen1 = onsgetal;
delen2 = onsgetal2;
std::cout << onsgetal << " / " << onsgetal2 << " = " << delen1 / delen2 << std::endl;
std::cout << onsgetal << " * " << onsgetal2 << " = " << onsgetal * onsgetal2 << std::endl;
std::cin.ignore();
std::cin.get();
}


Of je kan alleen wanneer het nodig is de int tijdelijk in een float veranderen:

#include <iostream>

int main()
{
int onsgetal, onsgetal2;
std::cout << "Wat is het eerste getal?"<< std::endl;
std::cin >> onsgetal;
std::cout << "Wat is het tweede getal?"<< std::endl;
std::cin >> onsgetal2;
std::cout << "Het eerste getal is: " << onsgetal << std::endl;
std::cout << "Het tweede getal is: " << onsgetal2 << std::endl;
std::cout << onsgetal << " + " << onsgetal2 << " = " << onsgetal + onsgetal2 << std::endl;
std::cout << onsgetal << " - " << onsgetal2 << " = " << onsgetal - onsgetal2 << std::endl;
std::cout << onsgetal << " / " << onsgetal2 << " = " << (float) onsgetal / (float) onsgetal2 << std::endl;
std::cout << onsgetal << " * " << onsgetal2 << " = " << onsgetal * onsgetal2 << std::endl;
std::cin.ignore();
std::cin.get();
}


De laatste optie is het beste voor het efficiënt gebruik van het beschikbare geheugen.

Alle drie de opties geven nu wel de goede uitkomsten:

2 + 3 = 5
2 - 3 = -1
2 / 3 = 0.666667
2 * 3 = 6



Dit was les 1. Als het goed is kun je nu een simpel programma maken waarmee je kan rekenen!

Volgende en vorige item:
PC Hoe maak ik een game? Les 2: if, while en ons eerste spel!
PC Hoe maak ik een game? Introductie

0 reacties

Reacties:

Er zijn nog geen reacties op dit bericht.
Wees de eerste die reageert, voer je reactie hieronder in!



Reageer

Je reageert nu als (uitloggen).





Over ons :: Contact :: Adverteren :: Review scores :: Privacy policy :: Disclaimer