# Programmeren in TI-Basic/Pong

Pong was een van de eerste computerspellen. Met een paar aanpassingen kunnen we deze game makkelijk programmeren in TI-Basic. Hiervoor is wel enige voorkennis vereist op volgende gebieden:
* variabelen
* de while loop (controlestructuren)
* if en then (controlestructuren)
* getkey
* output en clrhome
* menu's (optioneel)
* lijsten (optioneel)
* randint (optioneel, maar wel aangeraden)
We gaan dit natuurlijk stap voor stap, gestructureerd aanpakken. We beginnen met wat achtergrond- informatie, daarna maken we de engine voor het spel aan en voegen we steeds meer functies toe.

## Achtergrondinformatie

Pong is een erg simpel spelletje, gebaseerd op tafeltennis. Het kan tegen de computer of met twee spelers gespeeld worden. Om praktische redenen laat ik hier de multiplayer-modus weg.
De engine is het hart van het spel, hier zal onze engine input afhandelen (met getkey) en graphics tekenen (met output en clrhome). Dit doet hij de hele tijd (via een while loop), tot het spel wordt verloren of afgesloten.

## De engine
### De variabelen

Vooraleer we kunnen beginnen met het schrijven van de echte code, hebben we onze variabelen nodig. Uitleg hierbij volgt later, voer dit al maar in:

### Het skelet van de engine

het skelet van de engine is een while loop, dit zorgt ervoor dat alle handelingen steeds herhaald worden. De loop ziet er zo uit:
De variabele L bepaalt hier of de loop doorgaat of onderbroken wordt. Later gaan we de loop ook onderbreken door L in te stellen op 1.

### Werking van de engine

Onze engine gaat een paar simpele taken in volgorde afhandelen. Een kort overzicht:
* Invoer ontvangen en verwerken
* Variabelen updaten
* Computertegenstander laten bewegen
* Collision detection uitvoeren
* Scherm leegmaken *
* Alles tekenen
*noot: hierdoor kan het scherm gaan flikkeren, dit is normaal.

### Invoer

Pong zal bediend worden via de pijltjestoetsen rechtsboven op de TI-83(+)/84+ (SE). Dit gaan we verwerken met behulp van getkey. Hieronder de code:
Deze code zorgt ervoor dat de variabele K nu het nummer van de laatst ingedrukte toets bevat. Aangezien onze "racket" horizontaal gaat bewegen, hebben we hier enkel interesse voor toets 24 (←) en toets 26 (→). Dit levert volgende uitbreiding op:

#### Afhandeling van invoer

Variabele A is hier de X-coördinaat van onze racket. Door A met 1 te verminderen of te vermeerderen, verplaatsen we de racket. Nadat A geüpdatet is, stellen we K opnieuw op 0 in, zodat het programma niet denkt dat steeds dezelfde toetsaanslag herhaald wordt.
Dit is eigenlijk de enige invoer die onze engine moet afhandelen.

### Variabelen updaten

Hierboven hebben we de variabele A (die de horizontale positie van onze racket bepaalt) al geüpdatet. Maar er zijn natuurlijk veel meer variabelen die onze aandacht nodig hebben, daarom verklaar ik hier eerst de functie van elke nog onbesproken variabele.

#### Variabele B

De variabele B is de horizontale positie van de racket van de computergestuurde speler, de tegenstander.

#### Variabelen C en D

De variabelen C en D zijn respectievelijk de X- en Y-coördinaten van de bal.

#### Variabelen X en Y

Deze variabelen zorgen voor het bewegen, de richting van de bal. Zij hebben maar 2 mogelijke waarden: 1 en -1. Een overzicht:
* Variabele X: indien gelijk aan 1, gaat de bal naar rechts. Indien gelijk aan -1, gaat de bal naar links.
* Variabele Y: indien gelijk aan 1, gaat de bal naar onder. Indien gelijk aan -1, gaat de bal naar boven.

#### Het eigenlijke updaten

Dit is het moeilijkste deel van de bouw van onze engine.