SCALA WORKSHOP deel 5 """"""""""""""""""""" We moeten nu nog een laatste detail bekijken. We moeten Scala vertellen om na de uitvoering van het programma terug te keren naar de eerste regel (naar onze drukknopcentrale). Ook hiervoor gebruiken we de VARIABLE kolom. Eerst even over het principe van variabelen in Scala. Er worden willekeurige namen toegelaten die als plaatshouder dienst kunnen doen voor getallen of teksten. Scala is zeer flexibel en je kan bijna alle namen gebruiken om je namen te benoemen. Het is echter nuttig om heel duidelijke namen te gebruiken. Vooraleer we naar het Variable-menu gaan, geef ik een korte beschrijving waar je deze kunt gebruiken. Naast het zetten van Variabelen is het ook mogelijk in dit menu "voorwaarden" te gebruiken. Dit wil zeggen dat een willekeurige variabele op een bepaalde waarde getest wordt. Bezit ze deze waarde, dan wordt naar een vastlegbare plaats in het script verwezen. We gebruiken nu een truuk om bij de enkele EXECUTE-regels in elk geval een verwijzing te bekomen. Geef naast IF maar 1=1 in en geef bij GO TO de eerste regel als bestemming in (Scala.035). Als Scala dan op deze voorwaarde botst, onderzoekt Scala of 1=1 is, wat natuurlijk altijd waar is, waardoor telkens na de uitvoering van het programma naar de eerste regel gesprongen wordt. Doe dit nu voor alle bestaande Execute-regels en je script is af. Schrijf je script weg en start het nadien met RUN. Als tweede oefening opteren we voor een wat complexer programma : een wiskunde-quiz. Vooraleer we eraan beginnen, bekijken we het VARIABLE-menu wat dieper. Klik hiervoor op de VARIABLE-kolom om het menu te verkrijgen dat uit twee regels bestaat. In de eerste regel SET wordt de naam van de te zetten variabele gezet, en door een "=" gescheiden van de waarde voor deze naam. De tweede regel bestaat uit 2 delen : naast IF geef je de te onderzoeken voorwaarde in, terwijl je naast GO TO bepaalt waarheen Scala moet springen als de voorwaarde waar is. Je mag zoveel voorwaarden inbouwen als je wil. Scala loopt de rij langs totdat ze er een vindt die waar is. Zijn ze echter allemaal vals, dan wordt de volgende regel van het script uitgevoerd. De rechthoek uiterst links bevat een miniatuur van de tekening indien je een tekening gekozen had. Laat ons nu beginnen met ons laatste projekt. Deze keer heb ik een relatief gekompliceerd probleem gekozen, om zoveel mogelijk de mogelijkheden van Scala te demonstreren. Hierbij worden echter zaken die we vroeger reeds besproken hebben niet meer extra uit de doeken gedaan. Als je echter problemen hebt, lees dan nog eens deel 1 en 2 van onze workshop door. We willen nu een wiskunde-quiz maken, die een kleine vermenigvuldiging opvraagt. Eerst moeten we een speel-beeldscherm tekenen. Ik gebruik opnieuw enkel de voorstellingsmogelijkheden van Scala. Klik op de NEW-rechthoek Klik op OK bij "Coose a background page Klik op OK bij het BLANK PICTURE menu Geef achtereenvolgens de volgende tekst in : Wiskunde-Quiz en druk RETURN Gestelde vragen: !totaal en druk RETURN Juiste antwoorden: !antwoord en druk RETURN !y x !z = !uitkomst en druk RETURN 1 2 3 4 5 6 7 8 9 0 en druk RETURN OK en druk RETURN op het nummeriek toetsenbord EINDE en druk RETURN Alhoewel je al deze teksten zelf kunt kiezen, moet de vormgeving van de letters na het uitroepingsteken (dus !totaal !antwoord !uitkomst !y !z) zeker gelijk blijven. Het uitroepteken deelt Scala mee dat er nu een waarde voor de variabelen volgt. Zo is !totaal het aantal gestelde vragen !antwoord het aantal juiste antwoorden !uitkomst is de uitkomst van de vermenigvuldiging !y en !z de beide getallen De getalleninvoer gebeurt door het klikken op de cijfers 0 tot en met 9 en wordt door een OK afgesloten. Door op EINDE te klikken, wordt de wiskunde-quiz verlaten. Zoals je merkt gaat het hier om twaalf drukknoppen. Bepaal ze door 12 kaders te maken rond de 10 cijfers en OK en EINDE. Kies bij alle drukknoppen, zowel bij SELECT als bij MARK voor INVERSE, zodat de drukknoppen zowel bij aanraking als bij het aanklikken, oplichten. Definieer bij de EINDE drukknop, de GO TO-waarde EXIT, zodat bij het kiezen van deze drukknop het script beëindigd wordt. (Scala.039) Voor OK leggen we bij GO TO de waarde NEXT vast. (Scala.040) Voor elk cijfer leggen we bij GO TO het startscherm van onze Wiskunde-quiz vast, zodat na het aanklikken het huidige beeld nog eens getoond wordt, echter nu met het nieuw ingegeven cijfer. (Scala.041) De vraag die nu komt, is hoe we meervoudige cijfers kunnen ingeven. Ik heb hiervoor de volgende oplossing voorzien: in een regel, (die we later nog moeten invoegen) wordt de waarde "uitkomst" bij het begin van elke vermenigvuldiging op 0 gezet. Als er nu enkel 1 cijfer aangeklikt wordt, wordt de tot nu toe huidige waarde van "uitkomst" met 10 vermenigvuldigd (dus 1 plaats naar links verschoven). Daarbij wordt de waarde van het aangeduide cijfer bijgevoegd. Een voorbeeld : bij het begin van onze rekening krijgt "uitkomst" de waarde 0. We klikken nu op cijfer 3. "Uitkomst" wordt met 10 vermenigvuldigd, en krijgt opnieuw 0. Nu wordt er 3 aan toegevoegd, zodat de uikomst 3 is. Klik je daarna 9 aan, dan wordt 3 met 10 vermenigvuldigd en wordt dus 3*10=30. Hier wordt er nu 9 aan toegevoegd zodat we 30+9=39 krijgen. In de praktijk komt het hierop neer. Ga naar het BUTTON-menu. Klik op het kader rond cijfer 1. Klik daarna op VARIABLE. Hierop wordt het VARIABLE-menu geopend (we kennen het reeds van uit de hoofdlijst). Naast SET tik je het volgende in: uitkomst=10*uitkomst+1 (Scala.042) Hetzelfde herhaal je bij alle cijfers, maar in plaats van +1, geef je hun waarde in. Zo zal je voor cijfer 2 +2 ingeven (Scala.043) Als je dat gedaan hebt, kunnen we terugkeren naar de hoofdljst. Nu moeten we nog 2 regels bij het begin invoegen, waardoor de variabelen geïnitialiseerd worden. Noem de eerste regel "Start inititatie" en de tweede regel "Nieuwe rekening" (Scala.044) Klik nu op de VARIABLE-kolom van de eerste regel en geef daar "totaal=0" en "antwoord=0" in. (Scala.045 en Scala.46) Klik nu op de VARIABLE-kolom van de tweede regel. Deze regel zal steeds worden opgeroepen als er een nieuwe vraag gesteld wordt. Hiervoor wordt eerst "uitkomst=0" gezet (Scala.047) Wat we nu nog nodig hebben, zijn 2 toevalswaarden voor de twee variabelen y en z. Hiervoor bestaat er een ARexx-funktie nml. RANDOM, die we hier gaan gebruiken. y=RANDOM(1,10,TIME('S')) (Scala.048) z=RANDOM(1,10,y) (Scala.049) Nu zorg je er nog voor dat er geen pauze is, dus klik je op de PAUZE-kolom en geef 0 seconden in. Nu kunnen we ons werk even testen. Wat er nu nog mankeert is een melding van het resultaat als je bewerking juist is of verkeerd is. Hiervoor voegen we een nieuwe regel in zonder tekening, juist na de derde regel (Scala.50). De PAUZE voor deze regel zetten we weer op 0. Daarna klik je op de VARIABLE-kolom. Eerst verhogen we het aantal gestelde vragen met 1, door de formule : "totaal=totaal+1" en bij IF geef je "uitkomst==y*z" (Scala.51) De hoofdlijst zou er nu als Scala.052 moeten uitzien. Blijft de vraag over waarheen gesprongen moet worden. Hiervoor maken we 2 nieuwe regels aan met een tekening. Eerst een met de tekst als je een fout antwoord geeft en dan een met de tekst als je een goed antwoord geeft. Klik nu terug op de VARIABLE-kolom van de vierde regel. Geef bij GO TO als doel van de sprong onze regel met Bravo aan (Scala.055) Tenslotte moeten we er nog voor zorgen dat er terug naar de tweede regel gesprongen wordt, zodat er een nieuwe vraag kan gesteld worden. Dit heb ik opnieuw met de "IF 1=1" truuk gerealiseerd. Ik heb die namelijk in de regels voor het juiste en foute antwoord ingevoegd. (Scala.056) Nu moeten we nog het getal voor de juiste antwoorden met 1 verhogen, indien we het juiste antwoord gegeven hebben. Dit wordt in de VARIABLE-kolom van de laatste regel (Bravo) gedaan door "antwoord=antwoord+1" in te geven (Scala.057). Zo is onze quiz klaar. We schrijven het script weg dat er uitziet als Scala.058 Hiermee komen we aan het einde van onze Scala workshop. Natuurlijk kan ik niet alle mogelijkheden van Scala uitleggen, dit zou te ver gaan. Toch hoop ik dat ik met deze workshop iets van de enorme mogelijkheden van dit programma heb kunnen duidelijk maken. Ik zou zeggen : allen naar de winkel en Scala kopen !!! Ivo Vandermarliere voor BBS de Saen