PROGRAMMEREN MET ALICE
Versie 2.2
Programmeren met Alice met “systeembord” besturing Alice in Wonderland ... Programmeren iets voor nerds ? Niet met Alice! Alice is een programma waarmee je een eigen virtuele wereld kunt creëren. In deze wereld kun je 3D-figuren laten bewegen en met elkaar laten communiceren. Uiteindelijk maak je een tekenfilm of spel, waarbij je objectgeoriënteerd programmeren leert.
Programmeren met Alice
Pagina 1
Programmeren met Alice
INHOUD 1 INLEIDING .............................................................................................................. 5 2 INTRODUCTIE IN HET PROGRAMMEREN MET ALICE ............................................ 6 2.1 Inleiding ................................................................................................................................ 6 2.2 Het bouwen van de wereld .............................................................................................. 6 Een nieuwe virtuele wereld maken ...................................................................................... 7 De programmeeromgeving en zijn onderdelen ................................................................. 7 Objecten toevoegen ............................................................................................................... 7 Objecten kopiëren .................................................................................................................. 9 Objecten verwijderen .......................................................................................................... 10 Objecten positioneren ......................................................................................................... 10 2.3 Cameraposities ................................................................................................................ 11 2.4 Programma opslaan & exporteren .............................................................................. 12 2.4 Samenvatting .................................................................................................................... 13 3 EVENTS ................................................................................................................ 14 3.1 Inleiding ............................................................................................................................. 14 3.2 Toevoegen van event ...................................................................................................... 15 3.4 Het bewegen van de camera met de muis ................................................................. 16 3.5 Het event: While the world is running .......................................................................... 16 3.5 Samenvatting .................................................................................................................... 17 4 EIGENSCHAPPEN EN VARIABELEN...................................................................... 18 4.1 Inleiding ............................................................................................................................. 18 4.2 Oorsprong......................................................................................................................... 18 4.3 Eigenschappen ................................................................................................................. 19 4.4 Positie en oriëntatie van een object ............................................................................. 19 4.5 Koppeling tussen objecten ............................................................................................. 20 4.6 Variabelen ........................................................................................................................ 21 Globale variabelen ............................................................................................................. 21 Lokale variabelen ................................................................................................................ 21 4.7 Speciale effecten............................................................................................................. 22 4.8 3D Text .............................................................................................................................. 23 4.9 Samenvatting .................................................................................................................... 23 5. METHODES .......................................................................................................... 24 5.1 Inleiding ............................................................................................................................. 24 5.2 Standaard methodes ...................................................................................................... 25 5.3 Parameters........................................................................................................................ 26 5.4 Samenvatting .................................................................................................................... 27
Pagina 2
Programmeren met Alice
6. FUNCTIES ............................................................................................................ 28 6.1 Inleiding ............................................................................................................................. 28 6.2 Functies van een object ................................................................................................... 28 6.3 Globale functies ............................................................................................................... 31 6.4 Samenvatting .................................................................................................................... 34 7. CONTROLESTRUCTUREN .................................................................................... 35 7.1 Inleiding ............................................................................................................................. 35 7.2 Do in order........................................................................................................................ 35 7.3 Do together ....................................................................................................................... 36 7.4 If/Else................................................................................................................................. 36 7.5 Loop ................................................................................................................................... 37 7.6 While ................................................................................................................................. 38 7.7 For all ................................................................................................................................. 38 7.8 For all together ................................................................................................................ 39 7.8 Lijsten ................................................................................................................................. 40 7.9 Samenvatting .................................................................................................................... 41 8 VOORBEELD: KAT EN MUIS ................................................................................. 42 8.1 Kat en muis........................................................................................................................ 42 8.2 Kat en muizen ................................................................................................................... 42 8.3 Vang binnen één minuut de muizen .............................................................................. 43 8.4 Concurrentie ...................................................................................................................... 43 8.5 Vang grote muizen .......................................................................................................... 43 9 HET SYSTEEMBORD .............................................................................................. 44 9.1 Inleiding ............................................................................................................................. 44 9.2 Het systeembord .............................................................................................................. 44 9.3 Verschil tussen continue en discrete signalen .............................................................. 45 9.4 Binaire stelsel.................................................................................................................... 46 9.5 Weerstanden.................................................................................................................... 48 9.6 AD-omzetter ..................................................................................................................... 51 9.7 Voorbeeld ......................................................................................................................... 52 9.8 Samenvatting .................................................................................................................... 53 10 ALICE & JYTHON (VERDIEPING)....................................................................... 54 10.1 AlicePreferences.xml..................................................................................................... 54 Je ziet nu dat het interface met het Systeembord via Jython geschreven is. .............. 55 9.2 Jython scripts .................................................................................................................... 55 10.2 Samenvatting ................................................................................................................. 58
Pagina 3
Programmeren met Alice
11 TOEPASSINGEN VAN ALICE ............................................................................. 59 11.1 Alice op de ijsbaan* ..................................................................................................... 60 11.2 Hindernis lopen* ........................................................................................................... 60 11.3 Memorie** ....................................................................................................................... 62 11.4 Quiz**............................................................................................................................... 62 11.5 Boter-kaas-en-eieren (gebruik van systeembord)*** ............................................. 62 11.6 Dansmat (gebruik van systeembord)*** .................................................................... 64 11.7 Galgje tegen de computer*** ...................................................................................... 64 11.8 Halli Galli (gebruik van systeembord)*** ................................................................. 65 11.9 Bootje varen**** .............................................................................................................. 65 11.10 Apenpuzzel**** ............................................................................................................. 65 11.11 Wack a mole***** ........................................................................................................ 66 11.12 Demonstratie: sorteerroutine***** .............................................................................. 66 11.12 Dames op schaakbord***** ........................................................................................ 67 11.14 Zeeslag***** .................................................................................................................. 68 11.15 Torens van Hanoi***** .................................................................................................. 68 BIJLAGE 1: DE ALICE GALERIJ ................................................................................ 69 BIJLAGE 2: EIGENSCHAPPEN VAN EEN OBJECT .................................................... 73 BIJLAGE 3: METHODES BIJ EEN OBJECT................................................................. 74 BIJLAGE 4: FUNCTIES BIJ EEN OBJECT ................................................................... 75 BIJLAGE 5: FUNCTIES BIJ HET OBJECT WORLD ...................................................... 76 BIJLAGE 6: VISUALIZATION ................................................................................... 77
Pagina 4
Programmeren met Alice
1 INLEIDING Alice is een programma waarmee je je eigen wereld kunt bouwen en daarnaast spelenderwijs leert programmeren. Het programma werkt met 3D-objecten die in een ruimte geplaatst kunnen worden. Daarna kunnen instructies toegevoegd worden die de objecten taken laten uitvoeren. De programmacode wordt volledig opgebouwd door instructies te slepen. Alice is een objectgeoriënteerde taal, die m.b.v. klassen en objecten een programma opbouwt. Een klasse bestaat uit methodes, functies en eigenschappen. Een klasse beschrijft hoe een object eruitziet en wat je ermee kunt doen. Een klasse is te vergelijken met een mal die gebruikt wordt om plastic bekertjes te maken. De mal stelt de klasse voor en de bekertjes de objecten. Je hebt slechts 1 beschrijving (klasse/mal) nodig waarmee je vele objecten/bekertjes kunt maken. In principe maak je dus doormiddel van de mal (klasse) allemaal bekertjes (objecten). In Alice bestaat de klasse Cat. De kat heeft eigenschappen, methodes en functies.
De klasse kat
Het object kat geplaatst in de wereld.
Het object kat met zijn subobjecten
Het object kat heeft eigenschappen, methodes en functies.
Door objectgeoriënteerd te programmeren wordt een programma vaak overzichtelijker, omdat het meer structuur heeft en ook beter gespiegeld kan worden aan de buitenwereld. De lessen zijn als volgt opgebouwd: De eerste zeven hoofdstukken gaan over het leren programmeren in Alice. In hoofdstuk 8 wordt de kennis uit de voorgaande hoofdstukken toegepast. Hoofdstuk 9 gaat over Alice in combinatie met het systeembord. Hierdoor wordt het mogelijk om een eenvoudige spelcomputer te simuleren. In hoofdstuk 11 wordt als verdieping de koppeling van Alice met de programmeertaal Jython besproken. Hoofdstuk 11 tenslotte geeft een aantal eindopdrachten. Î Bij elk hoofdstuk staan korte opdrachten die aangeraden worden om te volgen.
Pagina 5
Programmeren met Alice
2 INTRODUCTIE IN HET PROGRAMMEREN MET ALICE
2.1 Inleiding In dit hoofdstuk maak je kennis met de werkomgeving en de schermonderdelen van Alice. Je leert eerst hoe je een nieuwe virtuele wereld maakt, en op welke manier je daar objecten in kunt plaatsen. Leerdoelen: • • • • • • •
Inzicht krijgen in de basis opbouw van de programmeeromgeving van Alice; Objecten in een wereld plaatsen; Objecten toevoegen; Objecten kopiëren; Objecten verwijderen en hernoemen; Het gebruik van het object Camera; Exporteren en opslaan van een Alice project.
2.2 Het bouwen van de wereld Î Om het programma te openen klik je op Alice. Het startscherm van Alice met het welkomstscherm zal verschijnen:
We maken aan de hand van een voorbeeld eerst kennis met de verschillende onderdelen uit het programma.
Pagina 6
Programmeren met Alice
Een nieuwe virtuele wereld maken Maak eerst een nieuwe wereld aan en voeg daarna aan de wereld objecten toe: Î Klik op de tab Templates en dubbelklik op de wereld Grass. Er zijn verschillende voor gedefinieerde virtuele werelden: gras, aarde, ruimte, sneeuw, water, zand, ijs. De programmeeromgeving en zijn onderdelen Je ziet nu het werkvenster van Alice:
Het scherm bestaat uit 5 onderdelen: 1. 2. 3. 4.
Linksboven: lijst met objecten in de wereld, dit wordt de objectenlijst genoemd; Middenboven: het tekengebied, de ‘wereld’; Rechtsboven: events. Hierin staat de lijst met gebeurtenissen en acties; Linksonder: De eigenschappen (properties), methode (methods) en functies (functies) van het geselecteerde object, beschikbaar in het objectvenster; 5. Rechtsonder: het werkgebied voor het maken van methodes en functies. Objecten toevoegen Je gaat nu objecten in de wereld plaatsen. Î Klik in het tekengebied op het groene knopje Add Objects1. Klik één keer op de categorie Animals. Deze map wordt nu geopend. Î Selecteer de WhiteRabbit. Sleep deze naar het tekengebied, iets rechts van het midden.
Onderaan op het scherm verschijnt een galerij met verschillende soorten objecten (klassen). Er is een lokale galerij met objectsoorten (klassen) op je PC en een galerij online op internet. Op een schoolnetwerk is de connectie met de galerij op internet vaak geblokkeerd, dus kies de lokale galerij. Je kunt nu door alle objecten scrollen. 1
Pagina 7
Programmeren met Alice
Î Wil je de WhiteRabbit groter maken , draaien of verplaatsen, dan kun je daarvoor het rijtje knoppen gebruiken dat rechtsboven is verschenen.
A
B
C
D
E
F
A: B: C: D: E: F:
omhoog of omlaag verplaatsen naar links of rechts draaien voor- of achterover kantelen kantelen en draaien vergroten of verkleinen object kopiëren
Î Schuif in de dierenobjecten naar links en sleep de Cat op het tekengebied, een beetje links van het midden.
Î Klik nu op de knop Done die middenrechts staat. Î Het werkvenster van Alice ziet er nu als volgt uit:
Pagina 8
Programmeren met Alice
Î Bekijk de objectenlijst (linksboven). De objectenlijst toont alle objecten in de wereld. De meeste objecten bestaan uit meerdere delen, die afzonderlijk te programmeren zijn. In dit voorbeeld zie je de verschillende subobjecten van de kat.
Î Klik binnen de objectenlijst op Cat, en bekijk het objectvenster. De details van het object kat wordt getoond. Binnen dit gebied zijn er drie tabbladen zichtbaar: • Properties: de eigenschappen van deze kat; • Methods: de instructies waarmee je bijvoorbeeld de kat kunt laten lopen; • Functions: hier staan de functies behorende bij het object, bijvoorbeeld de functie within threshold, waarmee de afstand tussen de kat en het konijn berekend wordt.
Objecten kopiëren Je kunt een object op twee verschillende manieren kopiëren. De eerste manier: Î Bewaar het object whiteRabbit onder de naam: konijn.a2c. Klik hiervoor in de objectenlijst met de rechtermuis toets op de whiteRabbit eb vervolgens op save object. Een bestand met de extensie .a2c2 bevat één object. Hiermee wordt het mogelijk om objecten en dus ook codes te delen met andere Alice projecten. Gebruik volgens de menukeuze: File/ import, om het object weer toe te voegen. Dit is vooral interessant als je in het betreffende object eigen methodes en functies geschreven hebt.
Alle objecten uit de galerij zijn te vinden via de verkenner (Alice 2.2/Required/Gallery), en hebben de extensie a2c. 2
Pagina 9
Programmeren met Alice
Wil je een object kopiëren in hetzelfde project dan kun je dit ook object kopiëren met de kopieerfunctie:
Î Sla het bestand op onder de naam: kat-en-konijn.a2w. Î Kopieer het konijn 2x, dit kan met het kopieerbutton (onder add-objects). Î Sla het bestand op onder de naam: kat-en-3konijnen.a2w.
Objecten verwijderen Wanneer je in een wereld een object wil verwijderen, dan is het handigste om in de objectenlijst het betreffende object te selecteren en daar via het snelmenu het object te verwijderen. Het is tevens mogelijk om het object te selecteren in het tekengebied. Objecten positioneren Bij het plaatsen van objecten in de wereld is het soms handig om de quad view te selecteren. Hiermee zie je de wereld en de objecten via 4 aanzichten.
Maak gebruik van de middelste knop om de camera in en uit te zoomen. De linker en rechter kop worden gebruikt om de camera te verplaatsen.
Maak je een fout, dan maak de wijzigingen ongedaan met de knop Undo.
Pagina 10
Programmeren met Alice
2.3 Cameraposities Het is mogelijk om de camera te richten op een aantal objecten. Bijvoorbeeld het konijn dat in de wereld staat of op de konijn en de kat. Het is daarbij handig om een aantal cameraposities op te slaan voor later gebruik. Dit gaat als volgt: Î Zoom nu in op het konijn en de kat. Klik op more controls.
Î Klik nu op drop dummy at camera, om de huidige camera positie te bewaren. Klik vervolgens op Done.
Î Wijzig de naam Dummy in het objectenlijst in originalPosition.
Pagina 11
Programmeren met Alice
Î Wil je de positie van de camera terughalen, klik dan op Camera/methods/camera point at/ Dummy Object/originalPosition. Zie je dat je op deze manier heel eenvoudig de originele positie van de camera kunt terughalen.
2.4 Programma opslaan & exporteren Î Sla het bestand op onder de naam: kat-en-3konijnen.a2w De Alice bestanden hebben als extensie a2w. Een enkel object wordt bewaard met de extensie a2c. Ben je nieuwsgierig naar de inhoud van de bestanden, dan kun je het bestand gewoon openen als zip bestand. Jouw spel kun je ook exporteren als webpagina, zodat het ook door anderen bekeken kan worden. Î Kies File, Export As a Web Page geef het project een naam, selecteer een folder, en klik vervolgens op Save. Î Open via de verkenner het html bestand. Wanneer je na het openen van het html bestand de wereld niet kunt bekijken, moet je nog Java-3D software installeren. De download pagina wordt hierbij aangegeven. Op school is deze software reeds geïnstalleerd. Het is ook mogelijk om het Alice programma te exporteren als movie, waarna je de movie eventueel op YouTube kunt plaatsen.
Pagina 12
Programmeren met Alice
2.4 Samenvatting We hebben in dit eerste hoofdstuk geleerd om een initiële wereld op te zetten met objecten. In de volgende hoofdstukken leer je hoe je de objecten in deze wereld iets kunt laten doen. Je hebt geleerd hoe je de camera kunt richten op de wereld en zijn objecten. Belangrijke cameraposities kunnen opgeslagen worden als dummycamera voor later gebruik. De virtuele wereld kun je opslaan in een bestand met de extensie a2w. Bestanden met de extensie a2c zijn losse objecten, dit geldt ook vooral alle bestaande objecten uit de Alice galerij. In de galerij zijn ongeveer 850 bestaande objecten te vinden, zoals:
Een lijst met alle categorieën is te vinden in bijlage 1. Tevens is de lijst met de speciale categorie van wandelaars toegevoegd.
Pagina 13
Programmeren met Alice
3 EVENTS 3.1 Inleiding Alice is “event driven”, wat inhoudt dat code alleen wordt uitgevoerd nadat een gebeurtenis (event) opgetreden is, bijvoorbeeld het klikken op een knop. Als zo’n gebeurtenis zich voordoet, wordt het bijbehorende stukje code uitgevoerd; de gebeurtenis wordt afgehandeld via de “event handler”. In de wereld (bv. een spel) is het meestal de bedoeling dat het object (bv. de speler) een actie uitvoert. • In een racespel bestuurt een speler een auto; • In een schaakspel verplaatst een speler de schaakstukken; • In een avonturenspel bestuurt een speler een animatiefiguur. Leerdoelen: • Het toevoegen van acties, die uitgevoerd moeten worden als een event optreedt; • Het leren gebruiken van het events: When the world starts en While the world is running; • Het besturen van de camera middels een opgetreden event.
Î Bekijk het eventvenster.
Om acties in Alice uit te voeren, kan een speler o.a. gebruik maken van het toetsenbord of de muis. D.m.v. het afhandelen van events zorg je ervoor dat de computer reageert op wat de gebruiker doet. In een programma kunnen verschillende soorten events of gebeurtenissen plaatsvinden: Het eerste event dat optreedt in een Alice programma is: “When the world starts”. Dit event is altijd gekoppeld aan de methode: world.my first method. Door aan de methode een acties toe te voegen kun je aangeven hoe er op dit event gereageerd moet worden.
Pagina 14
Programmeren met Alice
3.2 Toevoegen van event Je gaat nu een actie toevoegen om de kat te laten bewegen met behulp van de pijltoetsen. Î Maak een actie die met behulp van de pijltoetsen de kat bestuurt. Kies en kies cat.
Î Speel de movie. Je voegt een tweede event toe, die een actie uitvoert op het moment dat de spatiebalk wordt ingedrukt. Î Maak een tweede event die wanneer de spatiebalk wordt ingedrukt, de playCatTapWindow aanroept. Î Klik hiervoor op Cat in de objectenlijst, sleep uit het objectvenster de methode playCatTapWindow naar Nothing.
Î Speel de movie.
Pagina 15
Programmeren met Alice
Je gaat nu het verschil tussen de When a key is pressed en de While a key is pressed bekijken. Î Wijzig de functie met de rechtermuisknop van When in While a key is pressed. Sleep de methode playCatTapWindow in het event.
Î Speel de movie. Wat is het verschil tussen de When en de While functie?
3.4 Het bewegen van de camera met de muis Je gaat nu met de muis de camera laten bewegen door het event let the Mouse move the camera en het event let the Mouse orient the camera. Î Î Î Î
Voeg het event let the Mouse move the camera toe. Speel de movie, verander de positie van de camera door de muis te bewegen. Verwijder het vorige event en probeer het event: let the Mouse orient the camera. Speel de movie. Zie je het verschil tussen de move en orient event ?
3.5 Het event: While the world is running Naast het event When the world starts, bestaat het event While the world is running. Dit event wordt continue aangeroepen wanneer het programma actief is. Maak hiervoor eerst het event When the world starts, en verander deze vervolgens met de rechtermuisknop in While the world is running.
Je kunt dit bijvoorbeeld gebruiken om continue te testen of het konijn tijdens zijn wandeling niet in een konijnenhol valt.
Pagina 16
Programmeren met Alice
3.5 Samenvatting In dit hoofdstuk heb je geleerd wat een event is en hoe je aan kunt geven hoe je erop kunt reageren. Een aantal speciale events zijn besproken: 1. 2. 3. 4. 5.
When the world starts: het begin van het programma; While the world is running: een methode die continue wordt aangeroepen; Let the arrow keys move <subject>: om een personage te laten bewegen; Let the mouse move/orient the camera: om de camera te besturen; When a key is typed: een event die reageert op een toets.
Pagina 17
Programmeren met Alice
4 EIGENSCHAPPEN EN VARIABELEN 4.1 Inleiding Elk object heeft unieke eigenschappen. Deze eigenschappen kunnen gewijzigd worden. Leerdoelen: • • • • •
Verdieping in de eigenschappen van objecten; Het bekijken van de positie (middelpunt, aanzicht) van een object in de wereld; De koppeling tussen twee objecten; Het leren gebruiken van datatypes en variabelen; De scope van een variabele.
4.2 Oorsprong Elk object in Alice heeft een oorsprong. Dit is het punt op een Alice object dat bepaalt waar het is in de wereld staat.
De positie van het object is gedefinieerd t.o.v. van de oorspong (0,0,0) van de wereld.
Pagina 18
Programmeren met Alice
4.3 Eigenschappen We gaan nu de eigenschappen van de kat bekijken. Î Klik in de objectenlijst op het object cat, vervolgens op het tabblad properties in het objectvenster.
Eigenschap Color Opacity
Vehicle Skin texture FillingStyle PointOfView isShowing
Omschrijving Kleur van het object Doorzichtigheid Verbonden met … De kat is verbonden met de wereld: Cat.vehicle = world Het hoofd van de kat is verbonden met het lichaam: Cat.head.vehicle = cat Afbeelding van het oppervlak van het object
Vulsel stijl Gezichtspunt Object zichtbaar: true/false
4.4 Positie en oriëntatie van een object Een belangrijk eigenschap is de PointOfView, een combinatie van positie en oriëntatie. De positie wordt weergegeven t.o.v. de oorsprong. De oriëntatie geeft de richting van het object als vector weer. Je gaat nu de positie en oriëntatie van de kat in de wereld bekijken.
Pagina 19
Programmeren met Alice
Î Maak een actie dat met behulp van de pijltoetsen de kat laat bewegen.
Î Klik op de rechtermuisknop en selecteer: watch this property van de kat in het objectvenster. Î Speel de movie, en bekijk de oriëntatie en positie van de kat.
Î Wat valt je hierbij op ?
4.5 Koppeling tussen objecten Het skelet van een kat bestaat uit ongeveer 250 beentjes. In Alice is een kat zeer vereenvoudigd neer gezet met 6 onderdelen die met elkaar verbonden zijn (Engels: vehicle)
Een kat staat in de wereld. De kat heeft een verbinding met de wereld. Dit wordt aangegeven met: Cat.vehicle = world. Het hoofd van de kat is verbonden met het lichaam, dit zal als volgt gedefinieerd zijn: Cat.head.vehicle = cat Met de eigenschap vehicle kun je objecten aan elkaar koppelen.
Wanneer je de camera verbindt met de kat, zal de camera de kat gaan volgen: Î Klik op camera in de objectenlijst, zet vervolgens de vehicle op cat (als startconditie). Î Bekijk de movie, wat valt je nu op bij het bewegen van de kat ?
Pagina 20
Programmeren met Alice
4.6 Variabelen Met een variabele geef je een naam aan een geheugenplaats. In een geheugenplaats kun je één gegeven opslaan. Een gegeven kan zijn: • • • •
een getal (number) een stukje tekst (string) een object een boolean (ja/true/1 of nee/false/0)
Variabelen heb je in een programma vaak nodig. Als voorbeeld: Je wilt het konijntje 5 keer laten springen. Het aantal keren dat je wilt laten springen sla je vervolgens op in een variabele. Globale variabelen Een globale variabele is een variabele die je binnen heel je programma kunt gebruiken. In zo’n geval is de variabele globaal aan het hele programma. Lokale variabelen Een lokale variabele is een variabele die je enkel binnen één enkele methode kan gebruiken. In zo’n geval is de variabele alleen beschikbaar in de methode. Op 3 verschillende plaats kun je een variabelen definiëren: 1. Globale variabelen definieer je in het object world.
2. Je kunt ook een extra eigenschap (een soort lokale variabelen) definiëren in een object.
3. Lokale variabelen kun je ook definiëren in een methode of functie van een object.
Pagina 21
Programmeren met Alice
Er zijn verschillende datatype3 variabelen in Alice, de meest belangrijke zijn: Variabele
Omschrijving
Number
gehele getallen en gebroken getallen, voorbeelden: 0, 1, -1, 1.25,
Boolean
waar (ja/true/1) of niet waar (nee/false/0)
Object String
Color
verwijzing naar een object een stukje tekst, voorbeeld: “Hallo”
Kleur
TextureMap
Een bitmap die door een 3D-programma als het ware om een object wordt gevouwen om het oppervlak van dat object op een bepaald materiaal te laten lijken. Een plat plaatje van eikenhout kan bijvoorbeeld worden gebruikt om een houten kast te maken.
Sound
Geluidsbestand, wat later afgespeeld kan worden.
Pose
Houding/positie, bijvoorbeeld: staand, zittend, liggend
Position
Plaats/positie in de wereld
Orientation
Oriëntatie in de wereld
PointOfView
Positie en oriëntatie in de wereld.
4.7 Speciale effecten Met het light object kun je speciale effecten toevoegen aan je wereld zoals kleur (bijvoorbeeld het fenomeen door een roze bril kijken) en helderheid. In hoofdstuk 1 heb je een initiële wereld gekozen. Er waren verschillende voor gedefinieerde virtuele werelden: gras, aarde, ruimte, sneeuw, water, zand, ijs. Je kunt met de functie: import texture map bij het object world, een nieuwe texture toevoegen, bijvoorbeeld een mooi maanlandschap. De eigenschap:
3
bepaalt welke texture gebruikt wordt.
Behandeling van de type: ReferenceFrame, Transformable Light, Direction valt buiten de scope van deze lesmodule.
Pagina 22
Programmeren met Alice
Je kunt aan je wereld ook een geluid toevoegen. Î Klik op import sound en selecteer vervolgens een mp3-bestand.
Î Om het muziekbestand te laten spelen aan het begin, moet je het naar het werkvenster onder: world.when the world starts slepen.
4.8 3D Text
Een speciaal object is de 3D Text. Hiermee kun je teksten in jouw wereld plaatsen. In het geval dat je een spel maakt kun je bijvoorbeeld het puntenaantal weergeven. Dit kan door de eigenschap Text te veranderen in het puntenaantal.
4.9 Samenvatting In dit hoofdstuk heb je verschillende eigenschappen van objecten bekeken. Een belangrijke eigenschap is de PointOfView, oftewel de positie en oriëntatie van het object in de wereld. Daarnaast heb je ontdekt dat objecten aan elkaar gekoppeld kunnen worden met de eigenschap vehicle. In Alice kun je variabelen lokaal definiëren in een methode of functie. Een variabele kan ook gedefinieerd worden in een object, het is dan beschikbaar in het gehele object. Globale variabelen definieer je in het object world. Bijlage 2 geeft een lijst met alle standaard eigenschappen van een object.
Pagina 23
Programmeren met Alice
5. METHODES
5.1 Inleiding Elk object heeft een verzameling methodes. Een methode kun je aanroepen doorin het bewerkingsgebied van een methode (bijvoorbeeld: world.my first method) te slepen. Door een methode van een object aan te roepen, kun je een object “iets laten doen”. Het object cat kun je bijvoorbeeld verplaatsen of draaien. In dit hoofdstuk maak je kennis met alle standaard methodes van een object. Leerdoelen: • Het leren van de standaard methodes van een object. We gaan eerst een aantal methodes bekijken: Î Î Î Î
Open het bestand kat-en-konijn.a2w. Sleep de methode move in het werkvenster naar world.my first method. Speel de movie. Sleep de methode roll in het werkvenster naar world.my first method. Speel de movie. Probeer ook de volgende de methodes: resize, turn, say, think en play sound. Speel de movie.
Je kunt ook een eigen methode maken, en daarin instructies toevoegen: Î Klik in de objectenlijst op het object cat, vervolgens op het tabblad methodes in het objectvenster.
en geef de naam story. Î Klik in het objectvenster op create new method. Î Sleep de methode story naar de methode world.my first method.
Î Plaats een aantal instructies in de methode whiteRabbit.story. Speel de movie.
Pagina 24
Programmeren met Alice
5.2 Standaard methodes Elk object heeft een aantal standaard methodes. Î Klik in de objectenlijst op het object cat, vervolgens op het tabblad methods (in het objectvenster). Hieronder zie je het objectvenster en de daarbij behorende methodes.
Methode Move Turn Roll Resize Say Think Play sound Move to Move toward Move away from Orient to Turn to face Point at Set point of view to Set pose Stand up Move at speed Turn at speed Roll at speed Constrain to face/point
Omschrijving Verplaatsen vooruit, achteruit, links, rechts, naar boven of naar beneden Rotatie om y-as Rotatie om x-as Verander grootte Zeg… Denk … Speel geluid af Beweeg naar Beweeg richting ander object Beweeg van ander object af Richt tot ander object Draai het gezicht naar het andere object. Wijs naar het andere object Verplaats het object zodat het naar het andere object kan kijken. Wijzig houding Ga recht op staan Verplaats object met gegeven snelheid. Rotatie om de y-as met een bepaalde snelheid. Rotatie om de x-as met een bepaalde snelheid. Verander de oriëntatie van het object.
Pagina 25
Programmeren met Alice
5.3 Parameters Alice heeft de mogelijkheid om informatie door te geven aan een methode via een parameters. Op deze manier kun je in een world een methode maken, die vervolgens voor alle objecten te gebruiken is.
Je maakt nu een nieuwe methode die een object laat springen.
Î Open het bestand kat-en-3konijnen.a2w. Î Maak in de wereld een nieuwe methode, en noem deze spring.
Î Maak in deze methode een parameter mijnobject.
in het werkgebied van Î Dit object laat je vervolgens springen. Sleep hiervoor world.spring. Selecteer daarna de methode move. Doe dit twee keer voor move up en move down.
Pagina 26
Programmeren met Alice
Î Sleep spring naar world.my first method. Geef als parameter op de whiteRabbit. Herhaal dit voor de cat. Î Speel de movie.
5.4 Samenvatting In dit hoofdstuk heb je een aantal standaard methodes bekeken. Daarnaast heb je geleerd om een eigen methode te maken. Vervolgens heb je geleerd dat het mogelijk is om aan de methode een parameter mee te geven. Een lijst met alle standaard methodes is te vinden in bijlage 3.
Pagina 27
Programmeren met Alice
6. FUNCTIES 6.1 Inleiding Elk object heeft een verzameling functies. Er is een elementair verschil tussen een methode en een functie. Een methode doet iets (meestal een taak dat het object uit kan voeren zonder iets terug te geven. Een functie berekent iets en geeft een resultaat/waarde terug. Dit antwoord kan zijn: een getal, een string, een object, of een boolean (ja of nee). Leerdoelen: • Het leren van het verschil tussen een functie en een methode; • Het leren van de standaardfuncties van een object; • Het leren van de standaardfuncties van de wereld. Functies behorende bij een object zijn terug te vinden bij het object. De standaardfuncties (zoals bijvoorbeeld de tijd, gebruikers invoer, etc.) zijn terug te vinden bij het hoofdobject world.
6.2 Functies van een object Je gaat eerst de functies behorende bij het object cat bekijken. Î Open het bestand kat-en-konijn.a2w. Î Klik in de objectenlijst op de cat, en bekijk de functies in het objectenvenster. Elk object heeft zijn specifieke functies: Proximity, om de nabijheid van andere objecten te bepalen; Size: berekeningen aan de grootte van een object; Spatial relation: de ruimtelijke relatie tussen objecten bekijken; Point of view: gezichtspunt van een object.
Pagina 28
Programmeren met Alice
Proximity
Bekijk nabijheid van andere objecten Deze (boolean) functies hebben als returnwaarde true of false. Je kunt dus constateren of een object in de buurt is van een ander object. Met de if controlestructuur, kun je op basis van dergelijke functies acties ondernemen, in het geval de functie de functie de waarde true oplevert (acties na de if) of als de functie de waarde false oplevert dan …
De afstand tussen twee objecten kan worden opgevraagd. Deze functies hebben als returnwaarde een getal. In dit voorbeeld de afstand tussen de oorsprong van de Cat t.o.v. de whiteRabbit.
Size
Grootte van het object Deze functies hebben als returnwaarde een getal. Hiermee kun je de grootte (lengte, breedte en hoogte) van het object op vragen. Deze functies hebben als returnwaarde true of false. Hiermee kun je de grootte/breedte/… van het object vergelijken met de grootte/breedte/.. van een ander object. Wanneer de Cat kleiner is dan de whiteRabbit, dan …
Pagina 29
Programmeren met Alice
Spatial relation
Ruimtelijke relatie van het object met ander object Deze functies hebben als returnwaarde true of false. De ruimte relatie tussen objecten worden gemeten, wanneer de Cat zich rechts van de whiteRabbit bevindt, dan …
Point of View
Gezichtspunt Deze functies hebben als returnwaarde de PointOfView, Oriëntatie of Positie in de wereld. Je kunt de positie van een object opvragen (en eventueel in een variabele bewaren).
Pagina 30
Programmeren met Alice
6.3 Globale functies De algemene functies zijn te vinden in het object world en in elk object te gebruiken. Functie
Omschrijving Een boolean kun je vergelijken met nee of ja: false of true. De logische of booleaanse algebra gebruikt alleen een 1 (ja/true) of 0 (nee/false). Booleaanse algebra maakt gebruik van logische vergelijkingen. Deze logische vergelijkingen zien er als volgt uit: A Not A True False False True A True False True False
B True True False False
Both a and b True False False False
A B Either a or b, or both True True True False True True True False True False False False Vergelijk twee waardes met elkaar.
== != > >= < <=
Gelijk aan Ongelijk aan Groter dan Groter of gelijk aan Kleiner dan Kleiner of gelijk aan
De eerste functie heeft te maken met kansberekening, en geeft True/False terug. Met probalityOfTrue geef je aan hoe groot de kans is op True (waarde tussen 0 en 1). De tweede functie geeft een willekeurig getal terug, de minimale en maximale waarde kan hierbij aangegeven worden.
Pagina 31
Programmeren met Alice
Voeg twee teksten samen, waarbij de returnwaarde een string is. De tweede functie converteert een getal naar een string en geeft ook als returnwaarde terug. Dit gebruik je wanneer je het puntenaantal wil weergeven met het object 3D Text. De gebruiker wordt gevraagd een nummer, yes/no, of een input string te geven. Deze drie functies gegeven achtereenvolgens een getal, true/false of een string terug. Time functies: time elapsed, year, month of year, day of year, day of moth, day of week, day of week in month, is AM, is PM, hour of Am or PM, hour of day, minute of hour, second of minute, etc… Advanced Math: minimum, maximum, absolute value, square root, floor, ceiling, sin, cos, tan, arccos, arcsin, arctan, etc..
Al de timer functies hebben als returnwaarde een getal (seconde, uren,dagen, jaren).
Wiskunde functies, al deze functie hebben als returnwaarde een getal.
In een spel wordt vaak een timer gebruikt. Je leert nu een timer te maken: Î Open het bestand kat-en-3konijnen.a2w. Î Voeg het object 3DText toe. Wijzig de naam van het object in timer.
Pagina 32
Programmeren met Alice
Î Maak een nieuwe variabele in het object timer, geef het de naam: time. Zet de startwaarde op 0.
Î Maak een nieuwe methode in het object timer, geef het de naam: show time.
Î Sleep in deze methode de eigenschap timer.text.
Î Zoek de functie onder de functies van de wereld en sleep deze over de default string. Vul als expressie in: timer.time
Î Sleep de wait functie in het werkgebied selecteer 1 second. Î Verhoog de teller timer.time met 1.
Pagina 33
Programmeren met Alice
Î Maak een actie m.b.v.: While the world is running, en roep vervolgens de method timer.show time aan.
Î Speel de movie. Tip: Wanneer je vervolgens de eigenschap vehicle van het object timer koppelt aan je personage, zal de timer constant in beeld blijven.
6.4 Samenvatting Dit hoofdstuk geeft een overzicht van de verschillende functies gerelateerd aan een object. Tevens heb je gezien dat er een aantal algemene wiskundige functies beschikbaar zijn in Alice, welke te vinden zijn in het object de world. Een lijst met alle standaard functies en world functies is te vinden in de bijlage.
Pagina 34
Programmeren met Alice
7. CONTROLESTRUCTUREN
7.1 Inleiding Indien elke instructie na de vorige wordt uitgevoerd kan je niet echt spreken van een programma. Je hebt dan een gewone animatie opgebouwd met de controlestructuur Do in order. Maar er zijn nog andere controlestructuren, deze worden in dit hoofdstuk behandeld. Leerdoelen: Het leren toepassen van de verschillende controlestructuren: • • • • •
Do in order versus Do together; If / Else; Loop; While; For all in order versus For all together.
Î Open het bestand kat-en-konijn.a2w. Onderaan het werkvenster zie je de knoppen voor de controlestructuren staan.
7.2 Do in order Met de do in order zorg je ervoor dat de instructie worden uitgevoerd in de volgorde waarin ze genoteerd zijn. Je gaat eerst de do in order gebruiken: Î Sleep de do in order naar het werkgebied, op de tekst Do Nothing. Î Selecteer linksboven in de objectenlijst whiteRabbit. De properties, methods en functions die bij dit object horen, worden nu linksonder getoond. Klik op de tab methods als die niet actief is.
Pagina 35
Programmeren met Alice
Î Sleep whiteRabbit turn naar rechts in het werkgebied, weer op de tekst Do Nothing. Je kunt nu aangeven of hij naar links of rechts moet draaien en hoeveel hij moet draaien. Kies bijv.
Î Sleep whiteRabbit say naar rechts en kies Hello. Zet daaronder whiteRabbit move en kies voor Forward en 1 meter. Je hebt nu de volgende acties in het werkgebied staan:
Î Speel de movie. Zie je dat de acties na elkaar gebeuren?
7.3 Do together Met de do together controlestructuur kun je meerdere acties tegelijker tijd uitvoeren. In het volgende voorbeeld laat je het konijn en de kat tegelijk draaien: Î Sleep de Do together in het werkgebied. Laat deze los als er een groene streep over de volle breedte van het werkgebied verschijnt. Î Gebruik whiteRabbit turn, kies weer left en 1 revolution. Î Selecteer in de objectenlijst de Cat. Gebruik cat turn, kies right en 1 revolution. Î Speel de movie. De kat en het konijn zullen nu gelijktijdig draaien met dezelfde snelheid.
7.4 If/Else Met de if/else controlestructuur kun je een keus maken welke acties er uitgevoerd moeten worden, op basis van een voorwaarde die al dan niet geldt. Een voorwaarde (conditie) levert altijd de waarde true of de waarde false op. Als de voorwaarde de waarde waar (true) oplevert, worden de instructies na if uitgevoerd. Als de voorwaarde de waarde onwaar (false) oplevert, worden de instructies na else uitgevoerd. Je moet in het witte true/false vakje een voorwaarde plaatsen. Je kunt aan elk object vragen stellen. In Alice spreken we niet van vragen, maar van functies (vorige hoofdstuk). Je kunt slechts die functies gebruiken die een boolean waarde (true/false) opleveren, aangezien condities altijd een waarde true of false op moeten leveren. Pagina 36
Programmeren met Alice
Enkele mogelijke functies voor het object kat zijn: • • • •
Cat is within threshold of whiteRabbit Cat is at least threshold away from whiteRabbit Cat is smaller than whiteRabbit Cat is to the left of whiteRabbit
Je gaat testen of het konijn groter is dan de kat. Als hij groter is, dan zegt het konijn Hello, als hij kleiner is, dan zegt hij Goodbye. Î Sleep de If/Else in het werkgebied onder het blok van de Do together acties. Kies true. Er verschijnt een lege if/else structuur.
Î Selecteer in de objectenlijst whiteRabbit. Klik op de tab functions, zoek bij de categorie size naar whiteRabbit is larger than. Sleep deze op true. Je moet nu het object kiezen waarmee het konijn vergeleken moet worden. Kies cat > the entire cat. De conditie wordt nu in de if regel gezet:
Î Zet whiteRabbit.say in de bovenste Do nothing. Kies daarbij hello. Zet whiteRabbit.say ook in de Else- Do nothing en kies daarbij goodbye. Î Speel de movie. Sluit het afspeelvenster en klik op de groene knop Add objects. Selecteer het konijn en maak met de 2de knop van rechts het konijn groter of kleiner zodat je nu de andere tak van de if/else kunt testen. Kies Done en speel de movie.
7.5 Loop Met deze controlestructuur kun je ervoor zorgen dat verschillende instructies een aantal keer worden uitgevoerd. Alle instructies die binnen deze controlestructuur worden geplaatst, worden een aantal keer na elkaar uitgevoerd. Î Sleep Loop van onderen naar het werkgebied. Kies 2 times. Î Zet er whiteRabbit.turn bij. Kies een richting en een hoeveelheid. Î Speel de movie.
Pagina 37
Programmeren met Alice
7.6 While Alle instructies die “in de body van” deze controlestructuur worden geplaatst, worden herhaald zolang het resultaat van de conditie die wordt gesteld waar is (true). De conditie wordt elke keer, nadat de opdrachten in de body gedaan zijn, opnieuw uitgevoerd. Het is de bedoeling dat we met een groot konijn starten en dat het konijn een paar keer verkleind wordt, zolang het groter is dan de kat. Î Î Î Î
Maak je konijn flink groter dan de kat (via Add objects en de vergroten/verkleinen knop). Sleep While naar het werkgebied en kies true. Sleep whiteRabbit is larger than op true. Selecteer Cat cat.the entire cat. Sleep de methode whiteRabbit.resize op Do nothing. Kies Other en tik 0.9 in. Het konijn zal nu in stappen elke keer 10% verkleinen zolang het nog groter is dan de kat.
7.7 For all Met deze controlestructuur kun je ervoor zorgen dat verschillende instructies worden uitgevoerd achtereenvolgens voor elk element in een lijst. Hiervoor maak je eerst een container waarin verschillende objecten geplaatst worden. Î Open het bestand kat-en-3konijnen.a2w. Î Maak een variabele konijnen in de methode world.my first method, vink aan make a list, en voeg de drie konijnen toe aan de list.
Pagina 38
Programmeren met Alice
Î Sleep de For all in order in het werkgebied. Selecteer de expressie konijnen.
Resultaat:
Î Sleep item_from_konijnen op Do Nothing. Selecteer item_from_konijnen resize/2 (twice as big)
Resultaat:
Î Speel de movie.
7.8 For all together Met deze controlestructuur kun je ervoor zorgen dat verschillende instructies gelijktijdig worden uitgevoerd voor elk element in een lijst. Î Open het bestand kat-en-3konijnen.a2w. Î Herhaal de vorige opdracht maar vervang For all in order en For all together. Î Speel de movie. Zie je het verschil tussen For all in order en For all together.
Pagina 39
Programmeren met Alice
7.8 Lijsten Er is een eenvoudige manier om te werken met lijsten, hiervoor is een speciaal object gemaakt: ListVisualization. Î Voeg aan de wereld het object ListVisualization toe.
Î Bij de initialisatie van dit object voeg je twee objecten toe: de whiteRabbit en de cat.
Î Selecteer in de objectenlijst listVisualization, en sleep de methode listVisualization.move naar het werkvenster van world.my first method. Kies move up 1 meter.
Î Speel de movie. Zie je dat nu alle objecten gelijktijdig omhoog gaan. In de bijlage vind je de speciale methodes voor de object: ArrayVisualization, ListVisualization en ObjectVisualization.
Pagina 40
Programmeren met Alice
7.9 Samenvatting Dit hoofdstuk geeft een overzicht van de verschillende controlestructuren. 1. 2. 3. 4. 5. 6. 7. 8. 9.
Do in order: na elkaar uitvoeren van instructies; Do together: gelijktijdig uitvoeren van instructies; If / else: conditioneel (afhankelijk van true/false) uitvoeren van een instructie. Loop: een bepaald aantal keer een groep van instructies uitvoeren; While: een onbepaald aantal keer een groep van instructies uitvoeren (afhankelijk van de conditie); For all in order: voor elk object in een lijst van objecten instructies uitvoeren; For all together: voor elk object in een lijst van objecten instructies gelijktijdig uitvoeren; Wait: wacht een bepaalde tijd; Print: print een variabele.
Pagina 41
Programmeren met Alice
8 VOORBEELD: KAT EN MUIS In dit hoofdstuk leer je om de geleerde kennis uit hoofdstuk 1 t/m 7 toe te passen.
8.1 Kat en muis Je gaat een spel maken waarbij een kat een muis achtervolgt. Î Maak een wereld en plaats hierin twee objecten: een kat en een muis. Î Laat de kat 5 keer springen, gebruik hiervoor een loop. Î Vervolgens gaat de kat zich introduceren met de woorden: “Hallo ik ben de kat en ik ga de muisvangen”. Î Laat de muis 5 keer springen, gebruik hiervoor ook een loop. Î Vervolgens gaat de muis zich introduceren met de woorden: “Hallo ik ben de muis en ik ben echt niet bang!!! Î Laat de kat bewegen met de pijltoetsen. Î Maak een algemene methode in de world, die controleert of de kat de muis gevangen heeft (object is within threshold). Wanneer dit het geval is, laat je een boodschap verschijnen: gewonnen. Î Zorg dat bij de event: while the world is running deze methode wordt aangeroepen.
8.2 Kat en muizen Ondertussen zijn er aardig wat muizen bijgekomen. Je past het spel aan zodat de kat achter alle muizen kan vangen. Î Maak een wereld en plaats hierin een aantal objecten: een kat en 10 muizen. Î Laat de kat 5 keer springen, gebruik hiervoor een loop. Î Vervolgens gaat de kat zich introduceren met de woorden: “Hallo ik ben de kat en ik ga de muizenvangen”. Î Laat de kat bewegen met de pijltoetsen. Î Maak een variabele punten, en zet de initiale waarde op 0. Î Laat de muizen bewegen met de random functie, waarbij de muizen een bepaalde afstand naar voren bewegen en weer naar achter bewegen. Î Maak een algemene methode in de world, die controleert of de kat de muizen gevangen heeft (object is within threshold). Voor elke muis moet er dus gecontroleerd worden of de kat in de buurt van de muis is. Gebruik hiervoor een lijst met muizen en de for all loop. Wanneer de kat een muis gevangen heeft geef dan één punt. Î Zorg dat bij de event: while the world is running deze methode wordt aangeroepen. Î Het spel is afgelopen als het aantal punten gelijk is aan 10.
Pagina 42
Programmeren met Alice
8.3 Vang binnen één minuut de muizen Het is natuurlijk niet de bedoeling dat de kat de hele dag bezig is met het vangen van de muizen. Dit moet binnen één minuut gebeuren. Î Pas het programma dusdanig aan dat de muizen gevangen worden binnen één minuut. Gebruik hiervoor de timer besproken in paragraaf 6.3
8.4 Concurrentie Ondertussen is er een tweede kat in huis gekomen. Je past het spel aan zodat het spel geschikt wordt voor twee spelers. Pas het programma dusdanig aan dat twee spelers (ieder een kat) proberen om zoveel mogelijk muizen te vangen. Î Laat de tweede kat bewegen met de toetsen: a (rechts), d (links), w (vooruit), s (roteren). Î Elke kat heeft natuurlijk wel zijn eigen puntentelling.
8.5 Vang grote muizen Een grote muis is veel lekkerder dan een klein muisje, dit levert meer punten op. Î Pas in het programma de grootte van de muis aan. Maak een tweede lijst met daarin het aantal punten per muis, waarbij het aantal punten is afhankelijk van de grootte van de muis.
Pagina 43
Programmeren met Alice
9 HET SYSTEEMBORD
9.1 Inleiding Embedded systemen spelen een belangrijke rol in de samenleving. Deze systemen tref je aan in talloze producten, zoals televisietoestellen, mobieltjes, magnetrons en kopieerapparaten. Hierbij is een samenspel van informatica (software) en elektrotechniek (hardware) in deze producten van essentieel belang. Leerdoelen: • Hoe je met een computer kunt meten en wat een sensor is; • Wat het verschil is tussen een discreet- en een continuesignaal; • Wat het decimale en binaire talstel is en hoe je een getal van het ene naar het andere stelsel omrekent; • Wat een AD-omzetter is; • De werking van het systeembord; • De wet van Ohm; • Berekening van weerstanden die parallel en in serie staan.
9.2 Het systeembord Het systeembord is een printplaat met een lichtsensor, een geluidssensor, een drukknop, een schuifknop en vier weerstandsensoren. Het systeembord kun je via de USB op de computer aansluiten, dit bord kun je met Alice uitlezen. Oorspronkelijk is het Picoboard, wat hier het systeembord genoemd wordt, ontwikkeld voor de programmeertaal Scratch (http://scratch.mit.edu/). Het Picoboard is te bestellen bij: http://www.picocricket.com/picoboard.html Met behulp van het systeembord kun je een eenvoudige spelcomputer simuleren. De verschillende sensoren op het systeembord worden gekoppeld aan Alice, zodat je op het signaal kunt reageren. Hiernaast staat een afbeelding van het systeembord.
Pagina 44
Programmeren met Alice
Na het aansluiten van het systeembord op de PC, en het installeren van de driver wordt er aan het systeembord aan een COM Poort4 gekoppeld, waardoor het mogelijk wordt om met systeembord te werken. Van jouw docent heb je de juiste COM gegevens ontvangen. Î Open de wereld: picboard.a2w Î Klik vervolgens weer op properties, in het objectenvenster. Î Stel de juiste COM poort in bij picoboard_com. Î Speel de movie. Je zult nu zien dat de waardes van het systeembord veranderen. De waarde van de lichtsensor, geluidssensor, schuif en de krokodillenklemmetjes (4 stuks) gaan van 0 tot 1023. De drukknop geeft 1 of 0.
Achtereenvolgens wordt in de volgende paragrafen de volgende sensoren behandeld: Î Î Î Î Î
Drukknop weerstand licht geluid schuif
Î Mocht het voorkomen dat de verbinding met het systeembord wegvalt, dan kun je het beste het systeembord verwijderen, en daarna op nieuw aansluiten op de USB ingang. Î
9.3 Verschil tussen continue en discrete signalen Een continue signaal kan alle waarden aannemen tussen bepaalde grenzen, vergelijk het met de gashendel van een scooter. Op het systeembord zijn de 4 weerstandsensoren, de lichtsensor en de geluidssensor voorbeelden van continue signalen . Een AD-omzetter (paragraaf 9.8) is nodig om het signaal om te zetten naar een discreet signaal.
4 Het systeembord heeft weliswaar een USB aansluiting, de uiteindelijke aansturing gebeurd via een toegewezen COM poort.
Pagina 45
Programmeren met Alice
Een discreet signaal heeft een beperkt aantal waarden. In het geval van de drukknop zijn er twee waarden mogelijk. Een dergelijk signaal is dus binair en discreet, doordat er slecht een beperkt aantal waarden mogelijk zijn. Het meest simpele discrete signaal is het binaire signaal. Het signaal is dan hoog (1) of laag (0). Î Test de drukknop.
9.4 Binaire stelsel De computer administreert/codeert alles in nullen en enen. Eigenlijk kent de computer dus maar twee cijfers: 0 (laag) en 1 (hoog). Dit heet het tweetallig of binaire stelsel. Alle getallen in dit stelsel zijn opgebouwd uit machten van twee. Dus: 1010 = 1 x 23 + 0 x 22 + 1x21+0 x 20. Van binair naar decimaal: 1. Maak een tabel van voldoende tweemachten. 2. Zet onder de tabel het binaire getal, begin aan de rechterkant. 3. Vermenigvuldig de getallen die onder elkaar staan. Tel deze getallen bij elkaar op. Voorbeeld: Hoeveel is 110011 in het decimale stelsel. 128
64
32
16
8
4
2
1
0
0
1
1
0
0
1
1
0
0
32
16
0
0
2
1
51
Î Hoeveel is 110010 in het decimale stelsel ? Î Hoeveel is 1111111111 in het decimale stelsel ? Bedenk dat de AD-omzetter op het systeembord ook 10 bits is, hier komen we zo op terug. Î Hoeveel is 000000000 in het decimale stelsel ? Van decimaal naar binair: 1. Maak een tabel van de machten van twee 2. Vul onder de grootste tweemacht die kleiner is dan het gegeven getal een 1 3. Trek deze tweemacht af van het gegeven getal 4. Vul in de tabel een 1 onder de nu grootste tweemacht die kleiner is dan de uitkomst van 3 5. Herhaal dit tot er nul overblijft. Waar geen 1 staat zet je een nul 6. In de tabel staat het binaire getal.
Pagina 46
Programmeren met Alice
Voorbeeld: Hoeveel is 133 in het binaire stelsel ? Vul onder de grootste tweemacht die kleiner is dan het gegeven getal een 1 4 2 1 128 64 32 16 8 1
Trek deze tweemacht af van het gegeven getal 3 133 – 128 = 5 Vul in de tabel een 1 onder de nu grootste tweemacht die kleiner is dan de uitkomst. 4 2 1 128 64 32 16 8 1
1
Trek deze tweemacht af van het gegeven getal 5-4=1 Vul in de tabel een 1 onder de nu grootste tweemacht die kleiner is dan de uitkomst. 4 2 1 128 64 32 16 8 1
1
1
Antwoord: 10000101 Î Hoeveel is 185 in het binaire stelsel ? Î Hoeveel is 1025 in het binaire stelsel ? Î Hoeveel is 312 in het binaire stelsel ? We gaan nu de krokodillenklemmetjes gebruiken. Sluit een van de klemmetjes aan het Systeembord. Als je klemmetjes niet verbonden zijn met elkaar is de waarde 1023. Als je ze tegen elkaar houdt is de waarde 0.
Pagina 47
Programmeren met Alice
9.5 Weerstanden De beweging van elektronen op hun weg door een draad wordt afgeremd door een weerstand. Er bestaan verschillende soorten weerstanden: vaste weerstanden, instelbare en variabele weerstanden. Vaste weerstanden hebben een vaste waarde die niet te veranderen is. Bij instelbare weerstanden kan de waarde mechanisch veranderen, denk hierbij aan de schuifknop. Tenslotte zijn er variabele weerstanden, waarbij de weerstand afhankelijk is van invloeden van buiten, bijvoorbeeld door verandering van licht (lichtsensor). De samenhang tussen spanning, stroomsterkte en weerstand komt tot uiting in de Wet van Ohm. Tussen de drie genoemde grootheden bestaat de volgende verband: stroomsterkte = spanning / weerstand. Tussen de krokodillenklemmetjes ga je straks een aantal vaste weerstanden plaatsen. De weerstand waarde wordt op de weerstand aangegeven door kleurringen.
Een weerstand heeft van links naar rechts bekeken 4 kleuren. Gebruik onderstaand tabel om de weerstandwaarde af te lezen. Derde ring Tolerantie Kleur Eerste ring Tweede ring Zwart 0 0 Rood: 2% Bruin 1 1 0 Goud: 5% Rood 2 2 00 Zilver: 10% Oranje 3 3 000 Geel 4 4 0 000 Groen 5 5 00 000 Blauw 6 6 000 000 Lila 7 7 Grijs 8 8 Wit 9 9 Goud 0,1 Zilver 0,01
Pagina 48
Programmeren met Alice
Voorbeeld: Geel – Paars – Rood – Goud Geel 4 Paars Rood
7 00
Voorbeeld: Bruin – Zwart – Zwart – Goud Bruin 1 Zwart Zwart
0 -
Uitkomst: 4700 Ohm +/- 5%
Uitkomst: 10 Ohm
Voorbeeld: Geel – Paars – Oranje – Goud
Voorbeeld: Bruin – Zwart – Geel - Goud
Geel 4 Paars Oranje
7 000
Uitkomst: 47000 Ohm +/- 5% Î Î Î Î
Bruin 1 Zwart Geel
0 0000
Uitkomst: 100 000 Ohm +/- 5%
Welke waarde heeft de weerstand geel – paars – zwart - goud ? Welke waarde heeft de weerstand paars – rood – geel - goud ? Welke kleurringen heeft een weerstand van 1000 Ohm ? Welke kleurringen heeft een weerstand van 2200 Ohm ?
Met de tolerantie (aangegeven met rood, goud of zilver) moet je goed rekening houden in het Alice programma. Î Wat is de weerstand en tolerantie bij de volgende weerstand: bruin – zwart - geel ? Î Wat is de tolerantie bij de volgende weerstand: paars – rood – geel - rood ? Î Î Plaats tussen de twee krokodillenklemmetjes een weerstand. Bekijk de uitgangswaarde. Vul onderstaande tabel aan: Weerstand
Kleur
Sensor waarde
Pagina 49
Programmeren met Alice
Rood – Rood – Rood
~ 187
Geel- Paars - Oranje
~869
100 000 Ohm
Bruin - Zwart- Geel
~932
Oneindig
-
1023
47 000 Ohm
Î Plaats tussen de twee krokodillenklemmetjes twee weerstanden in serie (dus achter elkaar). Bekijk de uitgangswaarde, wat valt je hierbij op ? Î Plaats tussen de twee krokodillenklemmetjes twee weerstanden parallel. Bekijk de uitgangswaarde, wat valt je hierbij op ? Wanneer weerstanden in serie geplaatst worden geldt: Rv = R1 + R2 Wanneer weerstanden parallel geplaatst worden geldt: 1/Rv = 1/R1 + 1/R2 Bij de praktijkopdracht ga je deze theorie toepassen bij de spellen: boter-kaas-en-eieren, dansmat. In Alice kun je dit als volgt gebruiken:
Pagina 50
Programmeren met Alice
9.6 AD-omzetter Een AD-omzetter maakt van continue signalen discrete signalen. Een computer kan alleen tweewaardige signalen verwerken (binair 0 of 1). Sensoren geven continue signalen af. De signaalwaarden van de sensoren moeten dus vertaald worden naar binaire codes. Een interface voor een dergelijke vertaalslag wordt een analoog-digitaal omzetter genoemd, afgekort: AD-omzetter. De digitale code is veel onnauwkeuriger dan het continue signaal. De meeste AD-omzetters hebben daarom veel bits. Hoe meer bits, hoe nauwkeuriger de digitale code de continue waarde kan benaderen. Een 10 bits AD-omzetter heeft een enkele ingang en 10 uitgangen. Op de ingang staat het continue signaal, en op de 10 uitgangen een spanning van 0 of 1. Er zijn dan 210 = 1024 mogelijkheden (van 0 tot 1023 !!) De grootste is 1023 (1111111111), de kleinste is 0 (0000000000). Het continue signaal is hierdoor verdeeld in 1024 stappen. Het berekenen van de weerstand gebeurt intern op het systeembord als volgt: het systeembord laat een bekende stroom door de weerstand leiden. De spanning wordt vervolgens hierover gemeten. De spanning zal tussen de 0 Volt en 5 Volt liggen. De weerstand is dan gelijk aan de spanning gedeeld door de stroomsterke. De resolutie van een AD-omzetter is het aantal volt dat nodig is om de uitvoer met 1 op te hogen. Wanneer er meer bits gebruikt worden, dan worden de stapjes veel kleiner en de omzetting dus nauwkeurig. Een stapje is dus gelijk aan 5 / 1024.
Lichtsensor
De weerstand is afhankelijk van de lichtsterke. In het donker is de weerstand het hoogst, in het licht verwaarloosbaar klein. De uitgangsspanning ligt tussen de 0 en 5 Volt
Geluidssensor
De Geluidssensor neemt decibelniveaus waar: hoe zacht of hard een geluid is. De Geluidssensor meet een geluidsdruk, afhankelijk van het geluid ligt de uitgangsvoltage tussen de 0 en 5 Volt.
Weerstandsensor Op de 4 krokodillenklemmetjes kunnen weerstanden aangesloten worden. Î Test de lichtsensor. Welke weerstand wordt aangegeven als het donker is en waarom ? Î De lichtsensor kan gebruikt worden om beweging te signaleren. Verzin een andere toepassing waarmee je een interactief spel maakt met de lichtsensor.
Pagina 51
Programmeren met Alice
9.7 Voorbeeld Je gaat nu een controleloop maken voor het uitlezen van het systeembord. Î Maak globale methode onder world en noem het controleer.
Î Maak een event die deze methode aanroept:
Î Voeg een 3D Text object toe aan de wereld met de boodschap: “Heb je aan de knop gezeten ?” Î Zet de eigenschap isShowing van de 3D Text Î Controleer of de drukknop wordt ingedrukt, gebruik hiervoor de variabele: word.picoboard_button.
Î Speel de movie. Î Plaats tussen het eerste klemmetje de weerstand met de kleuren: rood – rood - rood. Welke waarde heeft deze weerstand, en wat wordt de waarde op het systeembord ? Voeg vervolgens aan de controleerroutine de volgende code toe:
Pagina 52
Programmeren met Alice
Î Speel de movie.
9.8 Samenvatting In dit hoofdstuk heb je geleerd hoe je het systeembord kunt uitlezen in Alice. Een drukknop is een voorbeeld van een discreet signaal (0 of 1). De lichtsensor, geluidssensor en de 4 weerstandsensoren geven een continue signaal. Met behulp van een AD-omzetter kun je dit signaal om zetten naar een binaire waarde. In het geval van een 10 bits omzetter, is het continuesignaal onder te verdelen in 1024 stappen. Als laatste heb je gekeken naar de wet van Ohm, en de berekening van de totale weerstand bij parallel en seriële schakelingen.
Pagina 53
Programmeren met Alice
10 ALICE & JYTHON (VERDIEPING) Het volgende hoofdstuk is optioneel en gaat over de koppeling tussen Alice en Jython. Jython is een kruising tussen de programmeertaal Python en Java. De koppeling tussen de het systeembord en Alice is geschreven in Jython. Leerdoelen: • Kennismaking met de programmeertaal Jython. • Gebruik van Jython binnen Alice Dit hoofdstuk geldt als verdiepingsstof.
10.1 AlicePreferences.xml In het bestand AlicePreferences.xml staan alle voorkeur instellingen van Alice. Î Lokaliseer met de verkenner het bestand AlicePreferences.html, en op het bestand met Notepad++.
Î Sluit Alice. Vervang op regel: 209 de false in true. Start Alice op nieuw . Het gebruik van Jython scripts is nu mogelijk in Alice.
Je ziet nu in het werkvenster dat script is toegevoegd:
Pagina 54
Programmeren met Alice
Î Open het bestand Picoboard.a2w en bekijk de daarbij behorende python script die de koppeling tussen het systeembord verzorgd. Selecteer het Picoboard in de objectenlijst. Selecteer met de rechtermuisknop edit script.
Je ziet nu dat het interface met het Systeembord via Jython geschreven is.
9.2 Jython scripts
Î Open het bestand kat-en-konijn.a2w. Î Selecteer bij het object world de optie edit script.
Î Maak een nieuwe variabele in world.
Pagina 55
Programmeren met Alice
Î Schrijf het volgende script:
Def is een sleutelwoord dat aangeeft dat dit een functiedefinitie is. De functienaam is mijntest(). Tussen de haakjes kunnen eventueel parameters toegevoegd worden. Î Roep het script als volgt aan:
Î Speel de movie. Zie je dat de variabele geüpdate worden. Î Open het bestand kat-en-konijn.a2w. Î Voeg een variabele van het type string toe in het object whiteRabbit.
Î Schrijf het volgende script voor het object whiteRabbit.
Pagina 56
Programmeren met Alice
Aan de functie greeting wordt een naam meegegeven. Afhankelijk van de tijd is de returnwaarde: Good morning, … Good afternoon, … Good night,…. Î Maak een nieuwe methode welkom onder het object WhiteRabbit.
Î Schrijf de volgende code:
NB. De functie: ask user for a string is te vinden bij de functies onder world. Î Roep de methode aan in world.my first method.
Î Speel de movie.
Pagina 57
Programmeren met Alice
10.2 Samenvatting In dit hoofdstuk is de koppeling tussen Alice en Jython besproken. Het gaat te ver om in dit hoofdstuk een samenvatting te geven van de programmeertaal Python. Een goed Nederlands pythonboek is online te vinden op: http://wiki.ubuntu-nl.org/community/ThinkPython Functie geschreven in Jython kunnen worden aanroepen vanuit Alice. De communicatie tussen Jython en Alice gebeurt via variabelen. Het resultaat van een berekening in Jython plaats je in een variabele die vooraf gedefinieerd moet worden in Alice.
Pagina 58
Programmeren met Alice
11 TOEPASSINGEN VAN ALICE Je gaat nu zelf een aantal programma’s schrijven in Alice. Je kunt kiezen uit één van de opdrachten uit dit hoofdstuk. Voor je begint aan het oplossen van een probleem, is het raadzaam dat je eerst een analyse maakt van de probleemstelling. • Lees de gehele opdracht door. Probeer de opdracht te begrijpen, onderzoek wat er gedaan moet worden voordat je begint. • Een algoritme is een beschrijving van handelingen (en de daar aangekoppelde methodes) die nodig zijn om vanuit een bepaalde situatie een doel te bereiken. • Om het geheel overzichtelijk te houden, deel je het algoritme op in delen. Leerdoelen: • Van probleemstelling naar oplossing te komen op een gestructureerde manier gebruikmakend van de programmeertaal Alice. • Bij het oplossen van de vraagstukken zal je de volgende stappen gebruiken: Probleemstelling Æ probleemanalyse Æ implementatie Æ test • Zelfstandig oplossen van een probleem in Alice. Heb je het programma af, selecteer File/Export code for printing. Zodat jouw docent de door jouw geschreven code kan bekijken.
Pagina 59
Programmeren met Alice
11.1 Alice op de ijsbaan * Doel van spel: Alice is aan het schaatsen, maar moet wel oppassen voor de wakken. Kun je Alice laveren tussen de wakken ?
11.2 Hindernis lopen * We gaan een spel maken waar een personage rondloopt in een fantasiewereld. In deze fantasiewereld komt ons personage natuurlijk een paar hindernissen tegen. Maar er vallen ook prijzen te winnen. Het is de bedoeling om het spel zo lang mogelijk vol te houden en op het einde zoveel mogelijk punten te halen. Î Maak een nieuwe wereld, en sla deze op onder de naam: hindernis.a2w Î Kies een personage. Maak vier nieuwe methodes voor dit personage (dus niet voor de wereld of de camera): o beweegNaarLinks o beweegNaarRechts o beweegNaarVoren o beweegNaarAchter Î Maak 4 events die de methodes oproepen die je hierboven hebt gemaakt, zodat je de personage met behulp van het toetsenbord kan bewegen. Gebruik hiervoor het event while a key is pressed. Gebruik style abruptly om er voor te zorgen, dat het object vloeiend verplaatst wordt. Bij de style gently zal het object geleidelijk bewegen met versnelling en vertraging, wanneer het event echter snel achter elkaar aangeroepen wordt, zal het eind resultaat er schokkerig uit zien.
Î Het zou goed zijn als de camera je personage altijd zou volgen, zodat je personage altijd in beeld blijft. Daarvoor hebben we de methode setVehicle van de camera. Zet deze op je personage.
Pagina 60
Programmeren met Alice
Î Een eerste hindernis in onze wereld! Teken een cirkel (in de verzameling Shapes bij de objecten) op de grond. Dit zal dienst doen als een “zwart gat” waar ons personage kan invallen. o Nu gaan we een functie maken die controleert wanneer ons personage over het zwart gat loopt. Deze functie noemen we isOpZwartGat. Deze functie zal gebruik maken van de bestaande functie is within threshold, zodat onze functie TRUE teruggeeft als resultaat wanneer ons personage op het zwart gat staat (of voldoende dichtbij). In het andere geval o geeft de methode FALSE terug. Î Schrijf nu een methode die ons personage doet verdwijnen wanneer het op het zwarte gat terecht komt. Noem deze methode checkZwartGat. Deze methode zal gebruik maken van de functie isOpZwartGat van hierboven. Î Tenslotte voegen we een event toe dat gedurende het hele spel zal controleren of ons personage op het zwart gat staat. Dit event heet dan ook while the world is running en roept de methode op die we net gemaakt hebben. Î Maak een methode begin die je aan het begin van de wereld laat oproepen. Deze methode doet twee dingen, namelijk: o De naam van de speler vragen en deze bijhouden in een variabele o De punten van de speler op 0 zetten (dit is een tweede variabele) Î Verzin een mooi einde: bijvoorbeeld een zonsverduistering die op het einde een tekst toont als “GAME OVER”. Toon ook de punten van de speler en zijn naam. Maak een nieuwe methode van de wereld die je einde noemt. Als deze methode af is, dan voeg je die toe aan de methode checkZwartGat, zodat het spel eindigt wanneer ons personage over het zwarte gat loopt. Î Natuurlijk kan je personage ook punten verdienen. Daarom zullen we een paar objecten op de wereld zetten. Kies een tiental objecten die je op verschillende plaatsen in de wereld neerzet. Maak één functie raaktObjectX die nagaat of de objecten geraakt zijn. Doe dit door een lijst van objecten te maken. Gebruik dezelfde werkwijze als de functie die nagaat of ons personage in het zwart gat zit. Wanneer ons personage een object raakt, dan moet dat object verdwijnen en de speler moet punten krijgen. Dat doe je door de variabele die de punten bijhoudt, te verhogen. Î Wanneer alle objecten weg zijn en de speler is er nog, dan is het spel klaar en de speler heeft gewonnen. Maak een controleerfunctie als het aantal punten groter is dan het aantal objecten. Î Maak een interactie met het systeembord, om het spel nog spannender te maken. Î Vergeet niet het spel tussentijds op te slaan. Î Test het spel !
Pagina 61
Programmeren met Alice
11.3 Memorie * * Doel van het spel: Een interactief spel waarin de gebruiker een willekeurige volgorde van kleuren moet onthouden. Er staan vijf pinguïns. De pinguïns veranderen één voor één van kleur, binnen één seconde. De gebruiker wordt daarna gevraagd om achtereenvolgens de kleuren te geven.
11.4 Quiz * * Maak een interactieve quiz. Maak hierbij een lijst (>30) met meerkeuze vragen en bijbehorende antwoorden. Er wordt iedere keer een willekeurige vraag gesteld, gebruik hiervoor de functie random.
11.5 Boter-kaas-en-eieren (gebruik van systeembord) * * * Doel van het spel: Boter, kaas en eieren wordt gespeeld op 3 bij 3 velden. Bij het begin zijn de alle velden leeg. De ene speler zet een 'kruis' en de andere speler een 'rondje'. Degene die drie van zijn eigen tekens op een rij heeft (diagonaal, verticaal of horizontaal), heeft gewonnen. Voor iemand die het spel goed genoeg kent, is het eenvoudig om ieder spel in een gelijkspel te laten eindigen, ongeacht wat de tegenstander doet. Zeker voor beginners is het veld in het midden het belangrijkste veld. Het aantal verschillende mogelijke bordposities is 765, daarbij telt het lege bord mee. Maar posities die door roteren of door spiegelen hetzelfde zijn, tellen voor één.
Pagina 62
Programmeren met Alice
Het idee is om voor dit spel een speelbord te maken. Waarmee de input bepaald wordt door het systeembord. Het bord zal er dan als volgt uit zien:
Afhankelijk welk geel vlak aangewezen wordt met de tweede krokodillenklem, zal de weerstand waarde anders zijn. Daardoor is precies te bepalen welk vlak wordt aangewezen. Hiervoor zijn 9 weerstanden nodig.
Î Bepaal voor elke weerstand de meest ideale waarde, voor R1, R2, R3, R4, R5, R6, R7, R8 en R9. Î Open het bestand: boter-kaas-en-eieren.a2w Î Bekijk en speel het spel.
Het spel is al deels geïmplementeerd. Het is de bedoeling dat jij het interface naar het systeembord ontwerpt.
Î Maak de methode: checksysteembord. In deze methode wordt er gecontroleerd of er op het spelbord geklikt wordt, en de positie. Afhankelijk van de positie moet de juiste methode aangeroepen worden. Î Voeg een event (while the world is running) toe met de naam: checksysteembord. Î Test het programma ! Het is nog leuker om het spel boter-kaas-en-eieren tegen de computer te spelen. Î Open het bestand: boter-kaas-en-eieren2.a2w Î Bekijk en speel het spel. Î Hoe zou je het algoritme om boter-kaas-en-eieren te spelen kunnen verbeteren ?
Pagina 63
Programmeren met Alice
11.6 Dansmat (gebruik van systeembord) * * * Doel van het spel: Je gaat een dansmat maken, die reageert met geluidstonen en dans, wanneer er gesprongen wordt op de dansmat. Een dansmat bestaat uit een aantal vlakken. Wanneer er op een bepaald vlak gesprongen wordt, moet er een geluid afgespeeld worden. Het idee is vergelijkbaar met het spel boter-kaas-en-eieren. Wanneer er op een vlak gesprongen wordt, zal de weerstand veranderen.
Voor elk vlak wordt er een unieke weerstand gekozen.
Î Maak een nieuwe wereld, en sla deze op onder de naam: dansmat.a2w Î Kies een personage. Î Maak 9 methodes, voor elk vlak één methode. Waarbij elke methode een ander geluid en andere dans laat horen en zien. Î Maak de methode: checksysteembord. In deze methode wordt er gecontroleerd of er op het dansmat gesprongen wordt, en op welke positie. Afhankelijk van de positie wordt de juiste methode aangeroepen. Î Voeg een event (while the world is running) toe met de naam: checksysteembord. Î Vergeet niet het spel tussentijds op te slaan. Î Test het spel.
11.7 Galgje tegen de computer * * * Doel van het spel: woorden raden Galgje is een spelletje waarbij een woord moet worden geraden. De computer selecteert uit een lijst een woord. Op het scherm verschijnen evenveel stippen als dat er letters in het woord zijn. De gebruiker typt een letter. Als de letter in het woord voorkomt, verschijnt deze op de stippen waar het voorkomt. Typt de gebruiker een verkeerde letter, dan wordt langzaam de galg opgebouwd….
Pagina 64
Programmeren met Alice
11.8 Halli Galli (gebruik van systeembord) * * * Doel van het spel: Halli Galli is een kaartspel waarbij het de bedoeling is om alle kaarten te verzamelen door zo rap mogelijk op de bel te drukken. Elke speler draait om de beurt een kaart om van zijn gedekte stapel. Wanneer er precies 5 van dezelfde vrucht zijn afgebeeld moet je zo snel mogelijk op de bel drukken. Wie als eerste heeft gedrukt mag alle omgedraaide kaarten oppakken en onderaan zijn gedekte stapel steken. Hij moet nu als eerste terug een kaart omdraaien. enz. Uiteindelijk heeft de winnaar alle kaarten. Een variant hierop: er komen verschillende objecten voorbij vliegen in de wereld. Wanneer er 5 (of een ander getal) dezelfde objecten aanwezig zijn, moet er zo snel mogelijk op de bel gedrukt worden. Gebruik hiervoor de drukknop. De snelheid tussen verschijnen en het moment van reageren wordt gemeten.
11.9 Bootje varen * * * * Doel van het spel: Alice zit in een boot. Ze moeten laveren tussen de haaien. Een belangrijk algoritme die hiervoor gebruikt moet worden is: collision detection. Het is de bedoeling om zoveel mogelijk haaien te vermijden, en punten te verzamelen door zeehonden te redden. Maar pas op voor de storm!
11.10 Apenpuzzel * * * * Doel van het spel: leg de 9 stukken zo in een vierkant dat op alle aangrenzende stukken bovenen onderkant van aapjes van dezelfde kleur precies aansluiten.
Pagina 65
Programmeren met Alice
Maak een spel waarbij de gebruiker zelf de blokjes goed schuift, aan het eind moet er gecontroleerd worden of de blokjes goed liggen.
11.11 Wack a mole * * * * * Doel van het spel: Sla de mol. Gebruik hiervoor de WackAmoleBooth object. Er zijn 9 gaten. Elk gat bevat een plastic mol en de machines beweegt de mol omhoog en omlaag. Zodra het spel begint, zal de mol willekeurig gaan opduiken. Het doel van het spel is om met kracht de mol terug in zijn hol te slaan met de hamer. Hoe sneller dit gebeurt hoe hoger de uiteindelijke score zal zijn. (zie: WackAmoleBooth.a2w)
11.12 Demonstratie: sorteerroutine * * * * * Doel: Bestuderen van sorteerroutines. Een sorteerroutine is een algoritme die elementen van een lijst in een bepaalde volgorde zet. Neem bijvoorbeeld 25 konijnen die willekeurig van grootte zijn. Sorteer deze konijnen van groot naar klein. Bestudeer één van de volgende sorteerroutine : • BubbleSort • Quicksort • Mergesort Implementeer de routine in Alice. Schrijf een verslag over de werking van het algoritme.
Pagina 66
Programmeren met Alice
11.12 Dames op schaakbord * * * * * Doel: Schrijf een algoritme die het dames probleem oplost. Gegeven een schaakbord van 8x8. Geef een oplossing dat 8 dames op een 8 bij 8 schaakbord staan zodanig dat geen dame een andere in één beurt kan slaan? Mogelijke oplossing:
Pagina 67
Programmeren met Alice
11.14 Zeeslag * * * * * Doel van het spel: Zeeslag tegen de computer. Op een bord van 10 bij 10 liggen 5 verschillende zeeboten. Het doel is om de boten zo snel mogelijk te laten zinken, hierbij moet de boot in zijn geheel geraakt worden.
11.15 Torens van Hanoi * * * * * Open de wereld: TowersOfHanoi.a2w De Torens van Hanoi is een spel met een aantal schijven. Het spel bestaat uit een plankje met daarop 3 stokjes. Bij het begin van het spel is op een van de stokjes een piramide gebouwd. Elke schijf heeft een andere diameter. De schijven zijn zo geplaatst dat de kleinste bovenop de grootste ligt. Het doel van het spel is om de toren te verplaatsen naar een ander stokje, dit zijn de regels: 1. Er mag slechts één schijf tegelijk worden verplaatst 2. Kleine schijven mogen op grote schijven gelegd worden, maar niet andersom.
Opdracht bestudeer het algoritme van de toren van Hanoi. Schrijf hierover een kort verslag.
Pagina 68
Programmeren met Alice
BIJLAGE 1: DE ALICE GALERIJ
Amusement
Dieren
Strand
Gebouwen
Stad
Controles
Egypte
Omgeving
Fantasie
Boerderij
Meubels
School
Vakantie
Japan
Keuken
Licht
Pagina 69
Programmeren met Alice
Wiskunde
Ridders
Muziekinstrumenten
Natuur
Objecten
Zee
Old West
Park
Mensen
Wegen
Science Fiction
Vormen
Skating
Ruimtevaart
Speciale effecten
Spoken
Sport
Transport
Visualisatie
3D tekst
Pagina 70
Programmeren met Alice
Walking people
Pagina 71
Programmeren met Alice
Je kunt ook jouw eigen figuur bouwen met de hebuilder, shebuilder.
Pagina 72
Programmeren met Alice
BIJLAGE 2: EIGENSCHAPPEN VAN EEN OBJECT
TYPE VARIABELEN: • • • • • • • • • • • • • • • •
Number Boolean Object Direction String Color TextureMap Sound Pose Position Orientation PointOfView ReferenceFrame Light Direction Transformable
• Make a list • Make a array
Pagina 73
Programmeren met Alice
BIJLAGE 3: METHODES BIJ EEN OBJECT
Pagina 74
Programmeren met Alice
BIJLAGE 4: FUNCTIES BIJ EEN OBJECT
Pagina 75
Programmeren met Alice
BIJLAGE 5: FUNCTIES BIJ HET OBJECT WORLD
Pagina 76
Programmeren met Alice
BIJLAGE 6: VISUALIZATION ListVisualization:
+ alle standaard methodes. ArrayVisualization:
+ alle standaard methodes.
Pagina 77
Programmeren met Alice
Met dank aan: Alice in Wonderland
Pagina 78