Werken met Amos deel 86 """"""""""""""""""""""" Het maken van vergelijkingen """""""""""""""""""""""""""" If (Gedeelte binnen in een AMAL string) """"""""""""""""""""""""""""""""""""""" If test Jump L Deze instruktie geeft je de mogelijkheid om eenvoudige vergelijkingen in je programma's uit te voeren. Als de uitdrukking test -1 (waar) is dan springt het programma naar label L, anders gaat AMAL gewoon verder met de volgende instruktie. Anders dan zijn tegenhanger in het gewone Basic, ben je nu beperkt tot een enkele sprong na een vergelijking. In het algemeen moet je dit kommando vervolgens met de kommando's "then" of "else" in kleine letters. Dat maakt de betekenis van het kommando wat duidelijker. Hier een voorbeeld: If X>100 then Label else Let X=X+1 test kan elke logical uitdrukking zijn die je maar wilt en mag het volgende bevatten: <> Niet gelijk < Kleiner dan > Groter dan = Gelijk aan Voorbeeld: Load"AMOS_Sprites/octopus.abk" Get sprite Palette Sprite 8,130,50,1 C$="Main: If XM>100 Jump Test: C$=C$+"Let X=XM" C$=C$+"Test: I YM>100 Jump Main" C$=C$+"Let Y=YM Jump Main" Amal 8,C$ : Amal On : Direct Een groter voorbeeld kun je vinden in 4 waarmee je de positie van een sprite onder kontrole kunt houden met de joystick. Dat is eigenlijk tamelijk ruw en kan bijzonder snel opgevoerd worden met behulp van het AUTOTEST kommando. Zie AUTOTEST. Waarschuwing! Probeer geen verschillende vergelijkingen in een enkele AMAL uitdrukking te gebruiken met "&" of "|". Omdat de uitdrukkingen van links naar rechts uitgevoerd worden, onstaat er een fout. Neem de uitdrukking: X>100|Y>100. De bedoeling van deze regel is om na te zien of X>100 of Y>100 is. In de praktijk wordt de uitdrukking in de volgende volgorde uitgevoerd: X>100 Kan goed of fout zijn |Y Of resulteert met Y >100 Kijk na of (Y>100(Y)>100) Het resultaat van de bovenstaande uitdrukking staat in geen verhouding tot de verwachte waarde. Technisch onderlegde gebruikers kunnen dit probleem vermijden door het gebruik van ? algebra. Wijs elke vergelijking naar een enkele AMAL tregister op deze manier: Let R0=X>100 ; Let R1=Y>100 Kombineer nu deze vergelijkingen in een enkele uitdrukking via de "|" en "&" en gebruik hem gelijk in je regel If R0 | R1 then Jump L... Dat mag een beetje vreemd lijken, maar het werkt prima. For To Next (Loop binnen in AMAL) """"""""""""""""""""""""""""""""" For reg=start To end : : Next reg Dat houdt in dat de standaard FOR...NEXT loop bijna hetzelfde is als in andere basic talen. Deze loops kunnen aangewend worden om objekten met ingewikkelde zichtbare patronen te laten bewegen. Reg kan elk normaal AMAL register zijn (Ro-R9 of RA tot RA). Je kunt echter geen speciale registers in dit geval gebruiken. Net als met Basic, moet het register na de Next overeenstemmen met het getal dat je in For opgegeven hebt, anders krijg je een AMAL syntax foutmelding. Let er ook op dat de step maat altijd op 1 gezet wordt. Verder is het mogelijk om elk aantal loops in te nestelen die je maar wilt. Merk ook op dat elk animatie channel (kanaal) slechts een enkele loop per VBL uitvoert. Dat laat de effekten van je loops gelijk lopen met de schermbeelden en vermijdt dat het een PAUSE kommando voor elke Next nodig heeft.