Programmeren in TI-Basic/Snake
Hier het TI-Basic programma voor het spel Snake. Eerst het programma zelf, dat kun je overtypen op je GR, daarna nogmaals het programma, dan met uitleg.
Let op!
Op een net nieuw gekocht TI 84 Plus (SE) vertoont het programma soms kuren, de nieuwe software van de GR voert het programma namelijk net iets anders uit!
Om dit te controleren bij je TI 84 Plus (SE), druk op [2nd], op [MEM] (+), en kies optie 1. Ergens bovenaan staat de softwareversie, dit kan bijvoorbeeld 2.40 of 2.53 zijn. T/m 2.43 werkt dit spel goed, daarboven niet meer!
Als het programma namelijk een ° tekent, een stukje van de slang, wist het een stukje van de ° die er onder staat of, als de 'snake' onderaan het speelveld is, de onderste lijn. Dit is natuurlijk erg vervelend. Bovendien herkent het programma de 'snake' niet meer, en tekent hij soms per ongeluk een 'hapje' over zichzelf heen.
Besturing
bewerkenpijltje boven ↔ de 'snake' gaat naar boven pijltje onder ↔ de 'snake' gaat naar beneden pijltje links ↔ de 'snake' gaat naar links pijltje rechts ↔ de 'snake' gaat naar rechts 2ND ↔ het spel stopt voortijdig ENTER ↔ pause
Het programma
bewerken:ClrDraw :Axesoff :FnOff :ZStandard :0→Xmin :94→Xmax :0→Ymin :62→Ymax :Line(6,49,89,49 :Line(89,49,89,2 :Line(89,2,6,2 // Original was Line (89,2,6,65. Lijn ging diagonaal in plaats van horizontaal. :Text(4,38,"SNAKE :5→L :5→P :{1,2,3,4,5}→L1 :{5,5,5,5,5}→L2 :1→X :0→Y :8→U :3→V :0→S :Text(24,43,"* :While 1 :P-L+1→T :T+85(T≤0)→T :Text(L2(T)*5+9,L1(T)*5+3," ← ← Let op! Vier spaties achter <">! :Text(4,8,S :If pxl-Test(L2(P)*5+11,L1(P)*5+6)=1 :Goto 0 :Text(L2(P)*5+9,L1(P)*5+3,"° :getKey→G :If G=21 :Goto 2 :If G=105 :Pause :If G=24 and Y≠0 :Then :-1→X :0→Y :End :If G=26 and Y≠0 :Then :1→X :0→Y :End :If G=25 and X≠0 :Then :0→X :-1→Y :End :If G=34 and X≠0 :Then :0→X :1→Y :End :If L1(P)=U and L2(P)=V :Then :L+1→L :S+5→S :If L=85 :Goto 1 :Lbl A :randInt(1,16→U :randInt(1,9→V :If pxl-Test(5*V+10,5*U+5)=1 :Goto A :Text(V*5+9,U*5+3,"* :If pxl-Test(V*5+10,U*5+10)=1 :Text(V*5+9,U*5+8,"° :End :P+1→P :If P=86 :Then :1→P :L1(85)+X→L1(P) :L2(85)+Y→L2(P) :Else :L1(P-1)+X→L1(P) :L2(P-1)+Y→L2(P) :End :If L1(P)=0 :16→L1(P) :If L1(P)=17 :1→L1(P) :If L2(P)=0 :9→L2(P) :If L2(P)=10 :1→L2(P) :End :Lbl 0 :Text(27,30," GAME OVER! :Goto 2 :Lbl 1 :Text(27,28," YOU'VE WON! :Lbl 2 :Text(33,30," SCORE: :Text(33,53,S :Pause :ClrDraw :ClrHome :ClrList L1,L2 :ZStandard :AxesOn :FnOn :Disp
Uitleg
bewerkenHet spel bestaat uit drie delen:
- Het 'start'gedeelte, hierin wordt alle instellingen 'klaargezet'
- De While-loop, dit gedeelte wordt elke keer herhaald, per herhaling verschuift de 'snake' 1 stukje
- Het 'einde', hierin wordt de score getoond en worden de instellingen teruggezet
Hieronder nogmaals het programma, ditmaal is met spaties gewerkt en staat overal uitleg bij. De coördinaten van elk 'stukje' van de 'snake' worden opgeslagen in twee lijsten, L1 en L2. In L1 staan de X-coördinaten, in L2 de Y-coördinaten. Om niet heel veel opslagruimte te gebruiken, worden de lijsten maximaal 85 cijfers lang, daarna begint het programma opnieuw met becijferen.
ClrDraw Axesoff FnOff ZStandard 0→Xmin 94→Xmax 0→Ymin 62→Ymax Line(6,49,89,49 Line(89,49,89,2 Line(89,2,6,2 Line(6,2,6,49 Text(4,38,"SNAKE 5→L 5→P {1,2,3,4,5}→L1 {5,5,5,5,5}→L2 1→X 0→Y 8→U 3→V 0→S Text(24,43,"*
Dit is het eerste gedeelte. Achtereenvolgens wordt het tekenscherm leeg gemaakt, de grafiekassen en eventuele grafieken uitgeschakelt, daarna worden de schermcoördinaten ingesteld, elke pixel één eenheid. Dit is handig voor het verloop van het programma. Daarna wordt het speelveld getekend en het bovenschrift geschreven. Vervolgens worden de variabelen klaargezet. L staat voor de lengte van de 'snake', P voor de positie van de coördinaten van het voorste stukje van de 'snake' in de 2 lijsten, X en Y zijn respectievelijk de X en Y beweegrichting van de 'snake', U en V zijn de begincoördinaten van het 'hapje', en S is de score. In de laatste regel staat de opdracht om het 'hapje' te tekenen.
While 1 P-L+1→T T+85(T≤0)→T Text(L2(T)*5+9,L1(T)*5+3," ← ← Let op! Vier spaties achter <">! Text(4,8,S If pxl-Test(L2(P)*5+11,L1(P)*5+6)=1 Goto 0 Text(L2(P)*5+9,L1(P)*5+3,"° getKey→G If G=21 Goto 2 If G=105 Pause If G=24 and Y≠0 Then -1→X 0→Y End If G=26 and Y≠0 Then 1→X 0→Y End If G=25 and X≠0 Then 0→X -1→Y End If G=34 and X≠0 Then 0→X 1→Y End If L1(P)=U and L2(P)=V Then L+1→L S+5→S If L=85 Goto 1 Lbl A randInt(1,16→U randInt(1,9→V If pxl-Test(5*V+10,5*U+5)=1 Goto A Text(V*5+9,U*5+3,"* If pxl-Test(V*5+10,U*5+10)=1 Text(V*5+9,U*5+8,"° End P+1→P If P=86 Then 1→P L1(85)+X→L1(P) L2(85)+Y→L2(P) Else L1(P-1)+X→L1(P) L2(P-1)+Y→L2(P) End If L1(P)=0 16→L1(P) If L1(P)=17 1→L1(P) If L2(P)=0 9→L2(P) If L2(P)=10 1→L2(P) End
Dit is het tweede gedeelte. Hierin gebeurt het volgende: eerst worden de coördinaten van het laatste 'stukje' bepaald, en wordt dit stukje gewist met vier spaties, daarna wordt gecontroleerd of de 'snake' tegen zichzelf 'aanbotst', zo ja, dan gaat het programma verder bij Lbl 0. Als het programma dit gedaan heeft bekijkt hij op welke toets eventueel is gedrukt, en voert hij eventuele richtingswijzigingen door. Als het programma ook dit heeft uitgevoerd gaat het verder met het bepalen of de 'snake' een 'hapje' is tegengekomen, zo ja, dan verhoogt hij de score en de lengte, en tekent hij een nieuw 'hapje'. Daarna wordt met behulp van de richting (X en Y) de nieuwe coördinaten van het 'beginstukje' bepaald en opgeslagen in de lijst, op de juiste plek. Als ook dit gebeurd is, gaat het programma weer opnieuw het tweede gedeelte uitvoeren, en opnieuw, en opnieuw, en opnieuw...
Lbl 0 Text(27,30," GAME OVER! Goto 2 Lbl 1 Text(27,28," YOU'VE WON! Lbl 2 Text(33,30," SCORE: Text(33,53,S Pause ClrDraw ClrHome ClrList L1,L2 ZStandard AxesOn FnOn Disp
In dit derde en laatste gedeelte staan een aantal dingen te wachten: als je 'game over' bent kom je in Lbl 0 terecht, en daarna bij Lbl 2, als je een score van 400 hebt bereikt kom je in Lbl 1 terecht, en daarna bij Lbl 2. Als je het programma eerder beëindigde, door op 2ND te drukken, kom je direct bij Lbl 2 uit. Hier, in Lbl 2 wordt de score getoond, en als je daarna op ENTER drukt verwijderd het programma de coördinaten in de lijsten, worden de instellingen m.b.t. de grafiekassen e.d. teruggezet, wordt het programma afgesloten en keert het terug naar het basisscherm.