Eksamensoppgavene er utgitt av Utdanningsdirektoratet. Første nedlasting kjører en bot-sjekk i nettleseren (Vercel BotID) — mer i personvernerklæringen.
5 timer — alle hjelpemidler10 oppgaver
Oppgave 1·Hva en while-løkke er
Hjelpemiddelkrav: For hånd
Hva er en while-løkke i programmering? (ett riktig svar)
Fasit
En løkke som kjører så lenge en bestemt betingelse er sann.
LøsningsforslagKI-generert
En while-løkke sjekker en betingelse før hver runde. Er betingelsen sann, kjøres innholdet i løkka, og så sjekkes betingelsen på nytt. Blir betingelsen usann, stopper løkka. Et eksempel:
SET i TO 1WHILE i LESSER THAN OR EQUAL TO 5 DISPLAY i INCREMENT iENDWHILE
Løkka kjører så lenge er sann, altså fem ganger.
De andre alternativene er gale:
En løkke som kjører et bestemt antall ganger, er typisk en for-løkke. En while-løkke kan kjøre et ukjent antall ganger.
«Til en bestemt hendelse inntreffer» beskriver hvordan løkka stopper, men ikke hvordan den virker. En while-løkke er styrt av en betingelse som sjekkes, ikke av en hendelse. (Hendelser, som tastetrykk, brukes i hendelsesstyrt programmering.)
Betingelsen er ikke tilfeldig. Den er et logisk uttrykk som programmereren har bestemt.
SET m TO 3SET i TO 1WHILE i GREATER THAN m DISPLAY "Lukkeleg dag!" INCREMENT i
Velg hvor mange ganger teksten «Lykkelig dag!» blir skrevet ut.
Fasit
Ingen ganger: betingelsen er usann allerede første gang, så løkka kjører aldri.
LøsningsforslagKI-generert
Vi sporer programmet:
Steg
m
i
Betingelsen i GREATER THAN m
Resultat
Start
3
1
er usann
Løkka hoppes over
En while-løkke sjekker betingelsen før første runde. Siden ikke er større enn , kjøres innholdet i løkka aldri, og teksten skrives ikke ut.
Programmereren mente trolig WHILE i LESSER THAN OR EQUAL TO m. Da ville teksten blitt skrevet ut tre ganger, for , og . Med betingelsen GREATER THAN er svaret likevel ingen ganger.
Oppgave 3·Summen av de ti første trekanttallene i pseudokode
Hjelpemiddelkrav: For hånd
Tallene 1, 3, 6, 10, 15, 21 og så videre kalles for trekanttall. De tilsvarer antallet prikker som vil vises i en likesidet trekant når man bruker et grunnleggende trekantmønster for å bygge trekanten. Se illustrasjonen nedenfor:
Den følgende pseudokoden beskriver en funksjon som regner ut og returnerer trekanttallet nummer :
FUNCTION trekanttall(n) SET tn TO n * (n+1)/2 RETURN tnENDFUNCTION
Bruk funksjonen som er beskrevet ovenfor, og skriv pseudokoden til et program som regner sammen og skriver ut totalsummen av de ti første trekanttallene. Bruk dobbelt mellomrom for innrykk i koden der det er aktuelt.
OBS: Du kan bruke din egen standard for pseudokode, bare den er hensiktsmessig.
Fasit
SET sum TO 0FOR n FROM 1 TO 10 SET sum TO sum + trekanttall(n)ENDFORDISPLAY sum
Programmet skriver ut 220.
LøsningsforslagKI-generert
Vi trenger en variabel sum som starter på 0, og en løkke som går gjennom . For hver verdi av kaller vi funksjonen trekanttall(n) og legger resultatet til sum. Etter løkka skriver vi ut summen.
SET sum TO 0FOR n FROM 1 TO 10 SET sum TO sum + trekanttall(n)ENDFORDISPLAY "Summen av de ti første trekanttallene er " + sum
Forklaring:
sum må settes til 0 før løkka. Settes den inne i løkka, nullstilles den hver runde.
Løkka kjører nøyaktig ti ganger, så en for-løkke passer godt.
Funksjonen regner ut trekanttallet. Vi skal ikke skrive formelen på nytt, men bruke funksjonen.
DISPLAY står etter ENDFOR, slik at bare totalsummen skrives ut.
Sporing av programmet:
n
trekanttall(n)
sum etterpå
1
1
1
2
3
4
3
6
10
4
10
20
5
15
35
6
21
56
7
28
84
8
36
120
9
45
165
10
55
220
Programmet skriver ut 220.
Samme program med en while-løkke:
SET sum TO 0SET n TO 1WHILE n LESSER THAN OR EQUAL TO 10 SET sum TO sum + trekanttall(n) INCREMENT nENDWHILEDISPLAY sum
Oppgave 4·Pseudokode som samsvarer med et flytskjema
Hjelpemiddelkrav: For hånd
Nedenfor finner du et flytskjema for en algoritme og fire sekvenser med pseudokode.
Sekvens 1
SET n TO 1WHILE n LESSER THAN OR EQUAL TO 10INCREMENT nDISPLAY nENDWHILE
Sekvens 2
SET n TO 0FOR hver n LESSER THAN OR EQUAL TO 10DISPLAY nENDFOR
Sekvens 3
SET n TO 1WHILE n LESSER THAN 10DISPLAY nINCREMENT nENDWHILE
Sekvens 4
SET n TO 1FOR hver n LESSER THAN OR EQUAL TO 10DISPLAY nENDFOR
Hvilken av sekvensene med pseudokode gjør det samme som flytskjemaet?
Fasit
Sekvens 4. Flytskjemaet skriver ut tallene 1 til 10. Sekvens 1 skriver ut 2–11, sekvens 2 skriver ut 0–10, og sekvens 3 skriver ut 1–9.
LøsningsforslagKI-generert
Flytskjemaet. starter på 0. Så lenge er usann, økes med 1, og deretter skrives ut. Første utskrift er derfor 1. Når , er betingelsen fortsatt usann, så blir 10 og skrives ut. Deretter er sann, og algoritmen stopper. Flytskjemaet skriver altså ut tallene 1 til 10.
Sekvensene. Vi sporer hver sekvens:
Sekvens
Hva skjer
Utskrift
1
økes før utskrift, og løkka går så lenge
2, 3, …, 11
2
Starter på 0 og går til og med 10
0, 1, …, 10
3
Går så lenge
1, 2, …, 9
4
Starter på 1 og går til og med 10
1, 2, …, 10
Bare sekvens 4 gir samme utskrift som flytskjemaet.
Legg merke til at flytskjemaet og sekvens 4 er bygd opp ulikt: Flytskjemaet starter på 0 og øker før utskriften, mens sekvens 4 starter på 1 og skriver ut før neste verdi. Det som avgjør, er at utskriften blir den samme. Sekvens 1 har samme rekkefølge som flytskjemaet (øke, så skrive ut), men starter på 1 i stedet for 0 og bruker en annen betingelse. Derfor blir den forskjøvet med én.
Oppgave 5·Sortere pseudokode for største av tre tall
Hjelpemiddelkrav: For hånd
Nedenfor finner du flere linjer med pseudokode.
Sorter linjene i riktig rekkefølge, slik at det blir pseudokoden til et program som skal finne det største tallet av tre tall.
Tips: Linjene med pseudokode har ikke innrykk/indentering.
Sorter linjene
DISPLAY tall1 + " er størst"
ELSE IF tall2 GREATER THAN tall3
DISPLAY tall2 + " er størst"
ENDIF
DISPLAY tall3 + " er størst"
READ tall1, tall2, tall3
ELSE
IF tall1 GREATER THAN tall2 AND tall1 GREATER THAN tall3
Fasit
READ tall1, tall2, tall3IF tall1 GREATER THAN tall2 AND tall1 GREATER THAN tall3 DISPLAY tall1 + " er størst"ELSE IF tall2 GREATER THAN tall3 DISPLAY tall2 + " er størst"ELSE DISPLAY tall3 + " er størst"ENDIF
Rekkefølgen er entydig. Ingen av linjene kan bytte plass.
LøsningsforslagKI-generert
Programmet må først lese inn de tre tallene, så READ kommer øverst. Deretter kommer en valgsetning med tre grener:
IF sjekker om tall1 er større enn begge de andre. Da er tall1 størst.
ELSE IF kjøres bare når tall1 ikke er størst. Da står valget mellom tall2 og tall3, og det holder å sammenligne disse to.
ELSE fanger opp resten: tall3 er størst.
Hver DISPLAY-linje må stå rett under betingelsen som gjør at akkurat det tallet er størst. ENDIF avslutter hele valgsetningen og står nederst.
Rekkefølgen av grenene er ikke tilfeldig. Betingelsen i ELSE IF sier ingenting om tall1. Den er bare riktig fordi vi allerede vet at tall1 ikke er størst når vi kommer dit.
Eksempel: Med tall1 = 4, tall2 = 9 og tall3 = 7 er den første betingelsen usann, siden er usann. Betingelsen i ELSE IF er sann, så programmet skriver ut «9 er størst».
Oppgave 6·Testplan for karakterprogram med poengsum
Vi ønsker å lage et program der brukeren skal skrive inn en poengsum fra og med 0 til og med 100, og programmet skal bestemme og skrive ut tilsvarende karakter etter følgende regler:
Enhver poengsum under 50 får karakteren «Ikke bestått».
Enhver poengsum fra og med 50 til og med 69 får karakteren «Bestått».
Enhver poengsum fra og med 70 til og med 89 får karakteren «Godt bestått».
Enhver poengsum på 90 eller høyere får karakteren «Meget godt bestått».
Enhver poengsum som er mindre enn 0 eller større enn 100, får karakteren «Ikke gyldig poengsum!».
Pseudokoden nedenfor beskriver logikken og programflyten i et forslag til dette programmet:
PRINT "Skriv inn poengsummen din:"READ poengsumIF poengsum LESSER THAN 50 PRINT "Ikke bestått"ELSE IF poengsum GREATER THAN 50 AND poengsum LESSER THAN 69 PRINT "Bestått"ELSE IF poengsum GREATER THAN 70 AND poengsum LESSER THAN 89 PRINT "Godt bestått"ELSE IF poengsum GREATER THAN 90 AND poengsum LESSER THAN 100 PRINT "Meget godt bestått"ELSE PRINT "Ikke gyldig poengsum!"ENDIF
a)Hjelpemiddelkrav: Krever PC
Implementer den foreslåtte pseudokoden i det programmeringsspråket du foretrekker, gjennomfør testene som er beskrevet i testplanen nedenfor, og fyll inn de faktiske resultatene du får.
Tabell 1: Testplan
Test nr.
Input-verdier
Forventet resultat
Faktisk resultat
1
Poengsum: 30
Ikke bestått
2
Poengsum: 65
Bestått
3
Poengsum: 82
Godt bestått
4
Poengsum: 97
Meget godt bestått
5
Poengsum: 102
Ikke gyldig poengsum!
6
Poengsum: 0
Ikke bestått
7
Poengsum: 50
Bestått
8
Poengsum: 69
Bestått
9
Poengsum: 70
Godt bestått
10
Poengsum: 89
Godt bestått
11
Poengsum: 90
Meget godt bestått
12
Poengsum: 100
Meget godt bestått
13
Poengsum: −1
Ikke gyldig poengsum!
b)Hjelpemiddelkrav: For hånd
Er de forventede resultatene like de faktiske resultatene? Hvis ikke: Finn de logiske feilene i pseudokoden som forårsaker det. Skriv inn og forklar svaret ditt.
c)Hjelpemiddelkrav: Krever PC
Rett opp programmet fra punkt a slik at du får det forventede resultatet.
Fasit
a)
Test 1–6 gir forventet resultat. Test 7–12 (50, 69, 70, 89, 90 og 100) gir «Ikke gyldig poengsum!», og test 13 () gir «Ikke bestått».
b)
Nei. Betingelsene bruker GREATER THAN og LESSER THAN der det skulle vært «større enn eller lik» og «mindre enn eller lik», så grenseverdiene 50, 69, 70, 89, 90 og 100 havner i ELSE. I tillegg sjekkes det ikke om poengsummen er under 0, så gir «Ikke bestått».
LøsningsforslagKI-generert
a)
Vi finner de faktiske resultatene ved å gå gjennom betingelsene i pseudokoden ovenfra og ned for hver poengsum. Den første betingelsen som er sann, bestemmer utskriften.
Test nr.
Poengsum
Første sanne betingelse
Faktisk resultat
Som forventet?
1
30
poengsum LESSER THAN 50
Ikke bestått
ja
2
65
GREATER THAN 50 AND LESSER THAN 69
Bestått
ja
3
82
GREATER THAN 70 AND LESSER THAN 89
Godt bestått
ja
4
97
GREATER THAN 90 AND LESSER THAN 100
Meget godt bestått
ja
5
102
ingen, går til ELSE
Ikke gyldig poengsum!
ja
6
0
poengsum LESSER THAN 50
Ikke bestått
ja
7
50
ingen, går til ELSE
Ikke gyldig poengsum!
nei
8
69
ingen, går til ELSE
Ikke gyldig poengsum!
nei
9
70
ingen, går til ELSE
Ikke gyldig poengsum!
nei
10
89
ingen, går til ELSE
Ikke gyldig poengsum!
nei
11
90
ingen, går til ELSE
Ikke gyldig poengsum!
nei
12
100
ingen, går til ELSE
Ikke gyldig poengsum!
nei
13
poengsum LESSER THAN 50
Ikke bestått
nei
b)
Nei. Sju av de tretten testene gir et annet resultat enn forventet. Det skyldes to logiske feil.
Feil 1: Grenseverdiene er utelatt.GREATER THAN betyr «større enn» og LESSER THAN betyr «mindre enn». Selve grenseverdien er derfor ikke med i intervallet. Betingelsen
ELSE IF poengsum GREATER THAN 50 AND poengsum LESSER THAN 69
gjelder bare for 51–68, men reglene sier fra og med 50 til og med 69. Det samme skjer i de to neste betingelsene: «Godt bestått» gjelder bare for 71–88 og «Meget godt bestått» for 91–99. Poengsummene 50, 69, 70, 89, 90 og 100 oppfyller derfor ingen av betingelsene og havner i ELSE, som skriver «Ikke gyldig poengsum!». Test 7–12 feiler av denne grunnen.
Betingelsene burde brukt GREATER THAN OR EQUAL TO og LESSER THAN OR EQUAL TO, for eksempel poengsum GREATER THAN OR EQUAL TO 50 AND poengsum LESSER THAN OR EQUAL TO 69.
Feil 2: Den nedre grensen 0 sjekkes ikke. Den første betingelsen, poengsum LESSER THAN 50, er sann for alle tall under 50, også negative tall. Derfor gir «Ikke bestått» i stedet for «Ikke gyldig poengsum!» (test 13). Programmet må enten sjekke at poengsummen er ugyldig før de andre betingelsene, eller kreve poengsum GREATER THAN OR EQUAL TO 0 i den første betingelsen.
Testene viser hvorfor en testplan bør ha med grenseverdiene. Test 1–6 bruker verdier midt i intervallene (og 0), og de gir riktig resultat selv om programmet har feil. Først testene med 50, 69, 70, 89, 90, 100 og avslører feilene.
Sett ett kryss for hver påstand, enten sant eller usant.
Påstand
Sant
Usant
Fordi utvikling av KI kan kreve mye og uventede data, kan det være fornuftig å samle inn flere personopplysninger enn det man i utgangspunktet tror er nødvendig for et bestemt prosjekt.
Alle reglene for personvern gjelder også under utvikling av KI.
Når KI bruker personopplysninger i en beslutningsprosess, har den registrerte ikke rett til innsyn, fordi det å forklare prosessen er veldig vanskelig.
Det er viktig å gjøre tverrfaglige vurderinger av de etiske konsekvensene ved bruk av KI.
Det er enten etiske eller juridiske dilemmaer ved bruk av KI.
KI er objektiv, og derfor er bruken av KI rettferdig for alle.
KI kan alltid gjenbruke personopplysninger fra andre prosjekter, fordi utvikling av KI betraktes som forskning.
Fasit
Sant: påstand 2 og 4. Usant: påstand 1, 3, 5, 6 og 7.
LøsningsforslagKI-generert
Påstandene bygger på Datatilsynets rapport «Kunstig intelligens og personvern» (2018) fra forberedelsesdelen.
Usant. Prinsippet om dataminimering sier at opplysningene skal være adekvate, relevante og begrenset til det som er nødvendig for formålet. Datatilsynet innrømmer at det kan være vanskelig å vite på forhånd hvilke opplysninger en algoritme trenger, men mener nettopp derfor at behovet må vurderes fortløpende. Å samle inn «for sikkerhets skyld» strider mot prinsippet. Irrelevante opplysninger øker dessuten risikoen for at algoritmen finner tilfeldige sammenhenger som ikke er reelle.
Sant. Personvernforordningen (GDPR) gjelder for all behandling av personopplysninger. Utvikling av KI med personopplysninger er behandling, så alle prinsippene og reglene gjelder, også kravet om gjennomsiktighet.
Usant. Den registrerte har rett til innsyn og til informasjon om logikken bak automatiserte avgjørelser. At KI er vanskelig å forklare, fritar ikke den behandlingsansvarlige fra denne plikten. Hensynet til forretningshemmeligheter kan heller ikke brukes til å nekte innsyn i alle opplysningene.
Sant. Datatilsynet anbefaler å «tenke tverrfaglig»: KI er mer enn teknologi, og tverrfaglige team bør vurdere de etiske og samfunnsmessige konsekvensene av systemene.
Usant. Det er ikke enten etiske eller juridiske dilemmaer. Mange dilemmaer er begge deler. Diskriminering med skjeve algoritmer er for eksempel både etisk galt og i strid med prinsippet om rettferdighet i GDPR.
Usant. En algoritme er ikke mer objektiv enn menneskene som lager den og dataene den trenes på. Gir treningsdataene et skjevt bilde av virkeligheten, kan resultatet bli diskriminerende. Rapporten viser til et amerikansk system for risikovurdering av domfelte som ifølge ProPublica flagget afroamerikanere feilaktig som høyrisiko dobbelt så ofte som hvite.
Usant. Gjenbruk av opplysninger til nye formål må som hovedregel være forenlig med det opprinnelige formålet (formålsbegrensning), ellers kreves nytt samtykke eller annet behandlingsgrunnlag. Vitenskapelig forskning er et unntak, men utvikling av KI er bare i noen tilfeller forskning. Å bruke KI til å vurdere kredittverdighet er for eksempel ikke forskning. Ordet «alltid» gjør påstanden usann.
Oppgave 8·Personvernprinsipper ved utvikling av KI
a)Hjelpemiddelkrav: For hånd
Velg de tre personvernprinsippene som er mest relevante for utfordringer knyttet til utvikling og bruk av kunstig intelligens (KI), ifølge kildene fra forberedelsesdelen.
b)Hjelpemiddelkrav: For hånd
Velg ett av de tre personvernprinsippene du krysset av for i punkt a. Drøft dilemmaer og utfordringer som oppstår rundt utvikling og bruk av KI, knyttet til det prinsippet du har valgt.
Fasit
a)
Formålsbegrensning, dataminimering og lovlighet, rettferdighet og gjennomsiktighet. Det er disse prinsippene Datatilsynets rapport «Kunstig intelligens og personvern» knytter de viktigste personvernutfordringene ved KI til.
b)
For eksempel dataminimering: KI-modeller blir ofte bedre med mer data, og det er vanskelig å vite på forhånd hvilke opplysninger som trengs. Samtidig krever prinsippet at bare nødvendige og relevante opplysninger brukes, og at inngrepet står i forhold til formålet. En god drøfting tar for seg argumenter på begge sider og ender i en begrunnet konklusjon.
LøsningsforslagKI-generert
a)
GDPR artikkel 5 har sju personvernprinsipper, og alle gjelder ved utvikling og bruk av KI. Datatilsynet peker i rapporten likevel ut prinsippene om rettferdighet, formålsbegrensning, dataminimering og gjennomsiktighet som de mest relevante for KI. Rettferdighet og gjennomsiktighet er samlet i ett prinsipp i listen, «lovlighet, rettferdighet og gjennomsiktighet». De tre riktige alternativene er derfor
lovlighet, rettferdighet og gjennomsiktighet: Skjeve treningsdata kan gi diskriminerende avgjørelser, og det er vanskelig å forklare hvordan en modell kommer fram til et resultat.
formålsbegrensning: KI frister til å gjenbruke opplysninger som er samlet inn til andre formål.
dataminimering: KI er ofte avhengig av store mengder personopplysninger.
De fire andre prinsippene (ansvarlighet, riktighet, lagringsbegrensning og integritet og konfidensialitet) gjelder også, men er ikke de rapporten legger hovedvekten på.
b)
Svaret nedenfor er et eksempel. Kandidaten kan like gjerne velge formålsbegrensning eller lovlighet, rettferdighet og gjennomsiktighet.
Prinsippet. Dataminimering betyr at personopplysninger skal være adekvate, relevante og begrenset til det som er nødvendig for formålet. Prinsippet handler ikke bare om antall opplysninger. Det inneholder også et krav om proporsjonalitet: Bruken skal ikke være et større inngrep i personvernet enn nødvendig.
Dilemmaet. Maskinlæring bygger på at modellen finner mønstre i store datamengder. Jo flere og mer varierte data, desto mer treffsikker blir modellen ofte. Samtidig sier prinsippet at man skal bruke så lite personopplysninger som mulig. Utviklerne står derfor mellom en best mulig modell og et best mulig personvern.
Argumenter for å bruke mye data:
En modell som skal oppdage kreft på røntgenbilder, blir bedre og tryggere jo flere bilder den trenes på. Her kan mer data redde liv, og samfunnsnytten er stor.
Et lite og ensidig datasett kan gi skjeve modeller. Mangler en gruppe i treningsdataene, kan modellen fungere dårlig for den gruppen. Mer data kan altså gjøre modellen mer rettferdig.
Det er vanskelig å vite på forhånd hvilke opplysninger som er relevante. Algoritmen kan finne sammenhenger ingen hadde tenkt på, og formålet kan endre seg etter hvert som modellen lærer.
Argumenter for streng dataminimering:
Hver ekstra personopplysning øker risikoen. Store datasett er attraktive mål for angrep, og ved en datalekkasje rammes mange.
Irrelevante opplysninger kan gi falske sammenhenger. Datatilsynet peker på at algoritmen da kan legge vekt på tilfeldige mønstre som ikke er reelle, og modellen blir dårligere, ikke bedre.
Mange data om hver person gjør det lettere å identifisere enkeltpersoner og lage detaljerte profiler. Det kan avsløre sensitive opplysninger (særlige kategorier) som helse, religion eller seksuell orientering, selv om de ikke er registrert direkte.
De registrerte mister oversikten over hva som finnes om dem. Det svekker autonomien deres og tilliten til teknologien.
Mulige løsninger. Dilemmaet kan gjøres mindre. Opplysningene kan pseudonymiseres eller anonymiseres, slik at modellen lærer av data uten å vite hvem de gjelder. Syntetiske data og føderert læring, der dataene blir liggende hos eieren, er andre teknikker. Utviklerne kan også starte med få opplysninger og legge til flere bare når de kan dokumentere at det gir en bedre modell. Datatilsynet anbefaler at behovet vurderes fortløpende gjennom hele utviklingen, og at vurderingene dokumenteres.
Konklusjon. Etter en konsekvensetisk vurdering kan det være riktig å bruke store datamengder når nytten er stor, som i medisinsk diagnostikk. Pliktetikken minner likevel om at hver enkelt har rett til å bestemme over opplysninger om seg selv, uansett hvor nyttig modellen blir. Etter mitt syn betyr ikke dataminimering at KI må bygges på få data. Det betyr at utviklerne må kunne begrunne hvorfor hver opplysning trengs, og velge den minst inngripende måten å nå formålet på. Med pseudonymisering, fortløpende vurderinger og god dokumentasjon er det mulig å lage gode modeller og samtidig ivareta personvernet.
Du skal lage et program som leser inn informasjon fra datasettet og presenterer dette i to oversikter. Du skal bruke datasettet fra forberedelsesdelen.
Datasettet er tilgjengelig i CSV- og JSON-format. Last ned datasettet her: datasett (csv og json).
Tips: Du står fritt til å velge hvordan programmet skal presentere informasjon, så lenge presentasjonen er godt egnet til å vise det oppgaven spør etter.
a)Hjelpemiddelkrav: Krever PC
Lag et program som presenterer en oversikt over de tre største kategoriene målt i antall apper. Oversikten skal vise antallet apper, gjennomsnittsratingen og det gjennomsnittlige antallet installasjoner for hver av disse tre kategoriene. Tips: For å kunne beregne gjennomsnittet av antallet installasjoner må du tilpasse innholdet i det aktuelle datafeltet. Du vil få noe uttelling om du bare viser antallet apper og gjennomsnittsratingen.
b)Hjelpemiddelkrav: Krever PC
Utvid programmet slik at det også presenterer de tre mest populære appene, målt i antall installasjoner, i hver av disse tre kategoriene.
I denne oppgaven skal du utvikle et spill som vi har kalt PacTroll. Du bør sette av om lag to timer til denne oppgaven.
Spillet starter med et spillbrett (svart hovedboks), et troll (grønn boks merket T) og tre matbiter (gule bokser merket M) – se illustrasjonen nedenfor til venstre. Trollet skal bevege seg på spillbrettet og spise så mange matbiter som mulig. Trollet har en konstant fart og kan ikke stoppes, men spilleren styrer retningen ved å bruke tastaturet. Hver gang en matbit spises, blir den gjort om til en hindring (grå boks merket H), og en ny matbit plasseres ut på spillbrettet – se illustrasjonen nedenfor til høyre.
Hvis trollet treffer en av hindringene eller spillbrettets kanter, avsluttes spillet.
Funksjonelle krav:
Ved oppstart skal grensesnittet se ut omtrent som i illustrasjonen ovenfor til venstre. Spillet skal bestå av et spillbrett, et trollobjekt og tre matobjekter. (Du kan utelate bokstavene på boksene.)
Ved oppstart plasseres matobjektene på tre tilfeldige plasseringer på spillbrettet, og trollobjektet plasseres i sentrum. Ingen objekter skal være oppå hverandre.
Trollobjektet beveger seg i rolig hastighet i en retning, enten opp, ned, til venstre eller til høyre. Retningen trollobjektet beveger seg i, styres med piltaster (alternativt tastene W, S, A og D).
Når trollobjektet treffer et matobjekt, skal det følgende skje:
Spilleren får et poeng.
Matobjektet gjøres om til et hindringsobjekt som trollobjektet ikke skal treffe igjen.
Et nytt matobjekt opprettes et tilfeldig sted på spillbrettet, slik at det alltid er tre matobjekter på spillbrettet. Nye matobjekter skal ikke plasseres på allerede eksisterende objekter.
Farten til trollobjektet økes.
Antallet poeng spilleren har, skal hele tiden være synlig i grensesnittet.
Spillet avsluttes om trollobjektet treffer en av spillbrettets kanter eller et av hindringsobjektene.
a)Hjelpemiddelkrav: For hånd
Lag et klassediagram der du definerer nødvendige klasser, med egenskaper og metoder, for å implementere/lage spillet.
b)Hjelpemiddelkrav: Krever PC
Implementer/lag spillet i samsvar med klassediagrammet fra a.
Fasit
a)
For eksempel en abstrakt superklasse SpillObjekt med posisjon, størrelse og farge og metodene tegn() og kolliderer(). Subklassene Troll, Mat og Hindring arver fra den. Troll har fart og retning og metoder for å bevege seg, endre retning og øke farten. Spillbrett består av spillobjektene, holder poengsummen og styrer spillet (plassere ny mat, sjekke kollisjoner, avslutte).
LøsningsforslagKI-generert
a)
Det finnes mange gode klassediagrammer for dette spillet. Diagrammet nedenfor er ett forslag.
Hver boks har tre felt: klassenavnet, egenskapene med datatype og metodene. - betyr privat, # beskyttet (tilgjengelig for subklassene) og + offentlig.
Superklassen SpillObjekt. Troll, matbiter og hindringer er alle firkanter med en posisjon, en størrelse og en farge, og alle skal tegnes. Felles egenskaper og metoder samles derfor i én superklasse. Metoden kolliderer(annet) sjekker om to objekter overlapper. Den brukes både når trollet treffer mat eller hindringer og når vi plasserer nye objekter, som ikke skal ligge oppå andre. Klassenavnet står i kursiv fordi klassen er abstrakt: Vi lager aldri et objekt av selve SpillObjekt, bare av subklassene.
Arv. Pilene med hul trekant viser at Troll, Mat og Hindring arver fra SpillObjekt. Hver subklasse har dermed posisjon, størrelse, farge, tegn() og kolliderer() uten at koden skrives på nytt. Subklassene får hver sin farge (grønn, gul og grå).
Troll har fart og en retning (retningX og retningY, med verdiene , eller ). beveg() flytter trollet fart piksler i retningen hver gang spillet oppdateres. Trollet kan ikke stoppes, så det finnes ingen stoppmetode. endreRetning(tast) kalles ved trykk på piltastene eller W, A, S og D. økFart() kalles hver gang trollet spiser en matbit, og utenforBrett() sjekker om trollet har truffet kanten.
Mat har ingen egne egenskaper. blirHindring() lager en hindring på samme sted som matbiten.
Hindring har verken egne egenskaper eller metoder. Den står stille, og det eneste som skiller den fra de andre objektene, er fargen og at kollisjon avslutter spillet. Klassen trengs likevel, slik at programmet kan skille hindringer fra matbiter.
Komposisjon. Linja med fylt rombe ved Spillbrett betyr at spillbrettet består av spillobjektene. Objektene hører til brettet og finnes ikke uten det. Multiplisiteten 4..* viser at det alltid er minst fire objekter (ett troll og tre matbiter), og at antallet vokser etter hvert som det blir flere hindringer. Spillbrett holder objektene i egenskapene troll, matbiter og hindringer.
Klassen Spillbrett har ansvaret for selve spillet:
bredde og høyde er brettets størrelse, og poeng er spillerens poengsum, som vises med visPoeng().
start() plasserer trollet i sentrum og kaller leggTilMat() tre ganger. ledigPosisjon() trekker tilfeldige posisjoner til den finner en som ikke overlapper noe annet objekt.
oppdater() kjøres i spill-løkka: Den flytter trollet, kaller sjekkKollisjoner() og tegner alt på nytt med tegn().
sjekkKollisjoner() avslutter spillet (avslutt(), spillSlutt settes til sann) hvis trollet er utenfor brettet eller treffer en hindring. Treffer trollet en matbit, kalles spisMat(mat).
spisMat(mat) øker poengsummen med 1, gjør matbiten om til en hindring, flytter den fra matbiter til hindringer, kaller leggTilMat() slik at det alltid er tre matbiter, og øker farten til trollet.
Diagrammet dekker dermed alle de funksjonelle kravene. Et alternativ er å la Mat og Hindring være én klasse med en egenskap erHindring. Det gir færre klasser, men egne klasser gjør koden tydeligere og lettere å utvide.