Vad du kommer att lära dig
Hur man skriver en programspecifikation för ett mer komplicerat program.
Vad du först behöver kunna
Hur man skriver en enkel programspecifikation enligt kapitel 7.
Hur man kan skriva programspecifikationen för spelet memory:
Programspecifikation: namn
Memory
Programspecifikation: spelets funktion
En röd startknapp syns på skärmen.
När man trycker på startknappen lottas 6 brickor ut.
Brickorna visar sig som månar som ligger med tre månar i rad i två rader.
På "baksidan" av månarna finns "leaf", "leaf", "flower", "flower", "batman" och "batman" på slumpvisa platser.
När en raket visar sig får man trycka på en valfri måne.
Man ser då vad som finns på baksidan. "leaf", "flower" eller "batman".
När raketen visar sig igen får man trycka på en annan valfri måne.
Man ser då vad som finns på baksidan. "leaf", "flower" eller "batman".
Om bilderna är olika vänds brickorna automatiskt tillbaka efter en stund så att de visar sig som månar igen. Man får då börja om och trycka på månar igen när raketen visat sig. Om bilderna är lika försvinner de efter en stund.
När man har plockat alla 6 brickorna visar game over på skärmen.
Sedan visar sig den röda startknappen igen och man får börja om.
Programspecifikation: Data
FALSE 0
TRUE 1
LOOKHIDE 0
LOOKFLOWER 1
LOOKBATMAN 2
LOOKLEAF 3
LOOKHIDEFLOWER 11
LOOKHIDEBATMAN 12
LOOKHIDELEAF 13
StateWaitToStart 1
StateInitNewGame 2
StatePickFirst 3
StatePickSecond 4
StateCheckMatch 5
StateNoMatch 6
StateMatch 7
StateGameOver 8
ObjectDoAPick TRUE om objektet ska köras, FALSE när klart
ObjectGameOver TRUE om objektet ska köras, FALSE när klart
ObjectStartButton TRUE om objektet ska köras, FALSE när klart
ManageInitNewGame TRUE om hjälpprogrammet ska köras, FALSE när klart
ManageLayOutChar TRUE om hjälpprogrammet ska köras, FALSE när klart
ManageMatch TRUE om hjälpprogrammet ska köras, FALSE när klart
ManageNoMatch TRUE om hjälpprogrammet ska köras, FALSE när klart
ManagePickFirst TRUE om hjälpprogrammet ska köras, FALSE när klart
ManagePickSecond TRUE om hjälpprogrammet ska köras, FALSE när klart
ManageTest TRUE om hjälpprogrammet ska köras, FALSE när klart
InitDone: TRUE när InitProgram har gjort klart initieringarna.
AllPicked: TRUE när alla memorybrickor är tagna.
CharAtObject1 Innehåll i memorybricka 1, t.ex. LOOKLEAF, se ovan
CharAtObject2 Innehåll i memorybricka 2
CharAtObject3 Innehåll i memorybricka 3
CharAtObject4 Innehåll i memorybricka 4
CharAtObject5 Innehåll i memorybricka 5
CharAtObject6 Innehåll i memorybricka 6
DoAPick: TRUE när spelaren får peka på en bricka
NrOfPicked Antal tagna memorybrickor (2, 4 eller 6)
ObjectsMatch TRUE om de två tagna brickorna har samma figur.
PickedCharacter1: Karaktären på den först valda memorybrickan.
PickedCharacter2: Karaktären på den andra valda memorybrickan.
RandomNumber Karaktären på en lottad memorybricka.
State Tillstånd i huvudprogrammets tillståndsmaskin.
RandomList En lista med 6 karaktärer som man ska lotta från:
LOOKHIDEFLOWER
LOOKHIDEFLOWER
LOOKHIDEBATMAN
LOOKHIDEBATMAN
LOOKHIDELEAF
LOOKHIDELEAF
Programspecifikation: Programstruktur
InitProgram
MainProgram: StateWaitToStart
ObjectStartButton
MainProgram: StateInitNewGame
ManageInitNewGame
ManageLayOutChar
MainProgram: StatePickFirst
ManagePickFirst
ObjectDoAPick
MainProgram: StatePickSecond
ManagePickSecond
ObjectDoAPick
MainProgram: StateCheckMatch
MainProgram: StateNoMatch
ManageNoMatch
MainProgram: StateMatch
ManageMatch
MainProgram: StateGameOver
ObjectGameOver
Object1
Object2
Object3
Object4
Object5
Object6
Programspecifikation: Initieringsprogram
Namn: InitProgram
Utseende: Blue Start Flag
Placering på skärmen: Längst uppe i vänstra hörnet.
Funktion: Sätter FALSE till 0 och TRUE till 1.
Sätter InitDone till FALSE.
Ger följande konstanter sina värden:
LOOKHIDE: 0
LOOKFLOWER: 1
LOOKBATMAN: 2
LOOKLEAF: 3
LOOKHIDEFLOWER: 11
LOOKHIDEBATMAN: 12
LOOKHIDELEAF: 13
StateWaitToStart: 1
StateInitNewGame: 2
StatePickFirst: 3
StatePickSecond: 4
StateCheckMatch: 5
StateNoMatch: 6
StateMatch: 7
StateGameOver: 8
Sätt följande flaggor till FALSE
ManageInitNewGame
ManageLayOutChar
ManagePickFirst
ManagePickSecond
ManageNoMatch
ManageMatch
ManageTest
ObjectStartButton
ObjectGameOver
ObjectDoAPick
AllPicked
DoAPick
ObjectsMatch
Sätter InitDone till TRUE när initieringen är färdig.
Programspecifikation: Huvudprogram
Namn: MainProgram
Utseende: Hatt
Placering på skärmen: Längst uppe i mitten av skärmen.
Funktion: Är uppbyggd av en tillståndsmaskin enligt figuren på nästa sida och övergångarna mellan de olika tillstånden framgår av denna figur.
StateWaitToStart: Kör objektet ObjectStartButton som visar en startknapp och väntar på att spelaren ska trycka på den.
StateInitNewGame: Kör hjälpprogrammet ManageInitNewGame som slumpar ut 6 nya memorybrickor.
StatePickFirst: Kör hjälpprogrammet ManagePickFirst som sköter spelarens första tryck på en memorybricka.
StatePickSecond: Kör hjälpprogrammet ManagePickSecond som sköter spelarens andra tryck på en memorybricka.
StateCheckMatch: Går till StateMatch om flaggan ObjectsMatch = TRUE.
Går till StateNoMatch om flaggan ObjectsMatch = FALSE.
StateNoMatch: Kör hjälpprogrammet ManageNoMatch som vänder två memorybrickor som inte var lika upp och ner.
StateMatch: Kör hjälpprogrammet ManageMatch som tar bort två memorybrickor som är lika.
Går till StateGameOver om flaggan AllPicked = TRUE
Går till StatePickFirst om flaggan AllPicked = FALSE
StateGameOver: Kör objektet ObjectGameOver som visar en Gameover flagga.
Programspecifikation: Objekt
Namn: ObjectStartButton
Utseende: Röd startflagga
Placering på skärmen: Till vänster på skärmen snett under hatten.
Funktion: Gömmer memorybrickorna genom att sätta
CharAtObject1, CharAtObject2, CharAtObject3, CharAtObject4, CharAtObject5, CharAtObject6 till LOOKHIDE.
Visar röd startflagga mitt på skärmen och väntar till spelaren trycker på den.
Gömmer startflaggan igen.
Namn: ObjectDoAPick
Utseende: Raket
Placering på skärmen: Under hatten
Funktion: Visar en raket högt uppe på skärmen i 0,5 sekunder.
Namn: ObjectGameOver
Utseende: Röd GameOver flagga
Placering på skärmen: Till höger om raketen
Funktion: Gömmer memorybrickorna genom att sätta
CharAtObject1, CharAtObject2, CharAtObject3, CharAtObject4, CharAtObject5, CharAtObject6 till LOOKHIDE.
Visar röd GameOverflagga mitt på skärmen i 3 sekunder.
Namn: Object1, (Object2, Object3, Object4, Object5, Object6)
Utseende: 1, (2, 3, 4, 5, 6)
Placering på skärmen: Under raketen i ordningen 1, (2, 3, 4, 5, 6)
Funktion: Object 1 placeras på x: -90 y: 45
(Object 2 placeras på x: 0 y: 45)
(Object 3 placeras på x: 90 y: 45)
(Object 4 placeras på x: -90 y: -45)
(Object 5 placeras på x: 0 y: -45)
(Object 6 placeras på x: 90 y: -45)
Om CharAtObject1 >= 10 (då är brickan upp och ner)
Om DoAPick = TRUE (spelaren får tillstånd att trycka)
Om spelaren trycker på objektet
Vänd på brickan (Minska CharAtObject1 med 10)
Om State = StatePickFirst så
Sätt PickedCharacter1 till CharAtObject1
Om State = StatePickSecond så
Sätt PickedCharacter2 till CharAtObject1
Sätt DoAPick till FALSE (Vi har tagit en bricka)
Använd värdet i CharAtObject1 för att gömma objektet eller visa
blomma, Batman eller löv.
Annars (spelaren tryckte inte på objektet)
Visa månen
Annars (spelaren får inte tillstånd att trycka)
Visa månen
Annars (Då är brickan inte upp och ner)
Använd värdet i CharAtObject1 för att gömma objektet eller visa
blomma, Batman eller löv.
Programspecifikation: Hjälpprogram
Namn: ManageInitNewGame
Utseende: 1 Gömd!
Placering på skärmen: längst ner till vänster på skärmen
Funktion: Lägg 11 (en gömd blomma) på plats 1 och 2 i RandomList.
Lägg 12 (en gömd Batman) på plats 3 och 4 i RandomList.
Lägg 13 (ett gömt löv) på plats 5 och 6 i RandomList.
Kör hjälpprogrammet ManageLayOutChar som lägger en gömd
blomma, en gömd Batman eller ett gömt löv i variabeln
RandomNumber. Sätt CharAtObject1 till RandomNumber.
Kör ManageLayOutChar och sätt CharAtObject2 till RandomNumber.
Kör ManageLayOutChar flera gånger och sätt på samma sätt
CharAtObject3, CharAtObject4, CharAtObject5 och CharAtObject6
till RandomNumber.
Sätt NrOfPicked till 0.
Sätt DoAPick till FALSE.
Namn: ManageLayOutChar
Utseende: 2 Gömd!
Placering på skärmen: längst ner till vänster på skärmen
Funktion: Slumpa ett valfri plats i listan RandomList.
Sätt RandomNumber till talet på den platsen i RandomList.
Ta bort hela den platsen från RandomList.
Exempel: RandomList, plats 1: gömd blomma.
RandomList, plats 2: gömd blomma.
RandomList, plats 3: gömd Batman.
RandomList, plats 4: gömt Batman.
RandomList, plats 5: gömt löv.
RandomList, plats 6: gömt löv.
Slumpa plats 3.
Sätt RandomNumber till gömd Batman.
Ta bort plats 3 så att listan nu ser ut så här:
RandomList, plats 1: gömd blomma.
RandomList, plats 2: gömd blomma.
RandomList, plats 4: gömt Batman.
RandomList, plats 5: gömt löv.
RandomList, plats 6: gömt löv.
Namn: ManageManagePickFirst
Utseende: 3 Gömd!
Placering på skärmen: längst ner till vänster på skärmen
Funktion: Sätt DoAPick till TRUE.
Kör ObjectDoAPick som visar en raket.
Vänta tills DoAPick = FALSE. (Spelaren har vänt en memorybricka).
Namn: ManagePickSecond
Utseende: 4 Gömd!
Placering på skärmen: längst ner till vänster på skärmen
Funktion: Sätt DoAPick till TRUE.
Kör ObjectDoAPick som visar en raket.
Vänta tills DoAPick = FALSE. (Spelaren har vänt en memorybricka).
Om PickedCharacter1 = PickedCharacter2 så
Sätt ObjectsMatch till TRUE
Annars
Sätt ObjectsMatch till FALSE
Namn: ManageNoMatch
Utseende: 5 Gömd!
Placering på skärmen: längst ner till vänster på skärmen
Funktion: Om det finns en uppvänd bricka i CharAtObject1 så
vänd på brickan. (1 blir 11, 2 blir 12, 3 blir 13).
Gör på samma sätt för CharAtObject2, CharAtObject3,
CharAtObject4, CharAtObject5 och CharAtObject6.
Namn: ManageMatch
Utseende: 6 Gömd!
Placering på skärmen: längst ner till vänster på skärmen
Funktion: Om det finns en uppvänd bricka i CharAtObject1 så
ta bort brickan (ge CharAtObject1 värdet 0).
Gör på samma sätt för CharAtObject2, CharAtObject3,
CharAtObject4, CharAtObject5 och CharAtObject6.
Öka NrOfPicked med 2.
Om NrOfPicked = 6 så
Sätt AllPicked till TRUE
Annars
Sätt AllPicked till FALSE