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.