Kommentarer til Eksamen H2011

Bildegjenkjenning

Komponenten TileList

© H-P Ulven, 26.04.13

Oppgave 1

Greit å redigere bildene til 200 x 200 pixler. Teoretisk skulle .png bli mindre enn .jpg på tegnede bilder, så det kan være en ide å bruke .png - formatet.

Lydkuttene tilpasses med Audacity

Oppgave 2

Beste måten å gjøre dette på er antageligvis:

Se også kommentarer til en prøve i høst.

Hvis animasjonen får navnet intro, vil følgende kode gi det resultatet oppgaven ønsker:

intro.addEventListener(MouseEvent.MOUSE_OUT, snurr);     
intro.addEventListener(MouseEvent.MOUSE_OVER, stopp);    
function snurr(evt:MouseEvent) {
	intro.play();
}//snurr()
function stopp(evt:MouseEvent) {
	intro.stop();
}//stopp()

Oppgave 3

a) Egen intro-nøkkelramme med kode omtrent noe slikt:

(txtNavn, txtMelding og btnVidere er komponenter i GUI.)

stop();
var navn:String;
btnVidere.addEventListener(MouseEvent.CLICK, videre);
function videre(evt:MouseEvent) {
   navn = txtNavn.text;               
   if(navn != "") {
      txtMelding.text = "";
      gotoAndStop(2);
   } else {
      txtMelding.text = "Du må oppgi navn for å gå videre"; 
   }//if navn ok
}//videre()

b) Datastruktur omtrent slik:

// Figurer (filnavn) i tabell:
var figurer : Array = ["kvadrat.png", "trekant.png", "rombe.png", "sirkel.png", "trapes.png" ];
var antalloppgaver: int = figurer.length;
// Diverse variabler for å huske ting:
var antallforsok: int = 0;
var oppgavenummer: int = 0;
var resultat: Array = new Array();
// Lyd som allerede er importert til Library fra lydfiler:
var lydfeil:   LydFeil = new LydFeil();
var lydriktig: LydRiktig = new LydRiktig();

Funksjon som kjøres for hver oppgave og som også brukes til å starte det hele:

function nyOppgave(): void {
   if(oppgavenummer < antalloppgaver) {
      visOppgaveFigur();
      visAlternativFigurer();
      antallforsok = 0;
      oppgavenummer ++;
      ... sett diverse tekstfelter...
   } else {
      gotoAndStop("Resultat");
   }//if
}//nyOppgave()  

Visning av oppgavefiguren:

Her er det lurt å laste figuren inn i en UILoader-komponent (loader) som er lagt inne i et MovieClip (oppgavefigur).
MovieClip kan som kjent roteres, og da følger innholdet med på rotasjonen!

function visOppgaveFigur(): void {
   oppgavefigur.loader.source = figurer[oppgavenummer];
   var rotasjon: Number = 90*Math.floor(Math.random()*4);      // 90 grader * 0,1,2 eller 3
   oppgavefigur.rotation += rotasjon; 
}//VisOppgaveFigur()  

Visning av de alternative figurene:

Her kan man spare endel koding ved å bruke komponenten TileList, en komponent som man kan legge bilder på:

TileList (Se også side 269 i PiAS!)
x, y, width, height, visible, ...
selectedItem
rowCount, columnCount
rovHeight, columnWidth
direction
removeAll()
addItem()
getItemAt()

Denne komponenten (alternativer) gjør det enklere å lage funksjonen som viser alle de alternativene brukeren kan velge:

function visAlternativFigurer(): void {
   alternativer.removeAll();              // Fjerner alt fra TileList
   var eske: Array = figurer.concat();    // Kopi av opprinnelig tabell er en "Eske"
                                          // som vi trekker figurer fra tilfeldig,         
   for(var i:int = 0; i< figurer.length; i++) {
      var indeks: int = Math.floor(Math.random()*eske.length);   // Trekker en indeks
      var figur: String = eske.splice(indeks,1);                 // Fjerner trukket figur     
      alternativer.addItem({source:figur});       // Legger figur i alternativer
   }//for
}//VisAlternativFigurer()  

Her kunne man eventuelt laget 5-6 ekstra tabeller med figurene i forskjellige rekkefølger, men det kan være greit å
merke seg hvordan man lager en "eske" og trekker ut "lapper" tilfeldig uten å legge tilbake slik det er gjort i funksjonen
visAlternativFigurer() over!

TileList komponenten fungerer også som en knapp hver gang brukeren klikker på en av figurene, så i starten av
programmet henger vi på en lytter:

alternativer.addEventListener(MouseEvent.CLICK, sjekkSvar);

og lytterfunksjonen kan da se omtrent slik ut:

function sjekkSvar(): void {
   antallforsok++;
   var valg: Object = alternativer.selectedItem;  // Henter valgt figur
   var navn: String = valg.source;                  // og navnet på figuren 
   var fasit: String = oppgavefigur.loader.source;  // og fasiten
   if( svar == fasit ) {
      lydriktig.play();
      resultat.push(antallforsok);
      nyOppgave();
   } else {
      lydfeil.play();      
   }//if
}//sjekkSvar()

 

Oppgave 4

"Relevant dokumentasjon":

Bør skrive noe om disse punktene:

Viktig å prioritere Testing, da oppgaven spesielt nevner dette.

Skriv da forslag til testprosedyrer og testdata som kontrollerer i forhold til en kravspesifikasjon.

Kravspesifikasjon bør inneholde:

Fyll ut punktene i kravspesifikasjonen med krav fra oppgaveteksten og ting du mener er relevant i forhold til hele konteksten til oppgaven.