- ValgFrame, hvor man velger språk i en komboboks.
- QuizFrame, hvor man gjør språktesten.
- RapportFrame, hvor man gir tilbakemelding til bruker.
Jeg tar her bare for meg selve språktesten i den andre rammen (QuizFrame).
Skal ikke leveres, men bør gjøres på kladdeark uansett:
Tegning av skjermbilde, med angivelser av komponentnavn og lytterfunksjoner.
Komponentnavn: Lytterfunksjon: sporsmalLbl alt1Chk alt2Chk ... alt5Chk videreBtn videreKlikket()
Noe av det viktigste her er at alle data bør lagres ett sted; i datastrukturen!
Her er det snakk om å legge til flere språk, og det ideelle er at dette bare krever endringer i datastrukturen, ikke i koden!
Navn: | Type: | Innhold: | Navn: | Type: | Innhold: |
spraktabell | Array | Hovedtabell | poeng | int | Score for bruker |
svartabell | Array | Lagrer brukersvar | makspoeng | int | Må regnes ut! |
sprak | int | AMERIKANSK=0, ... | melding | String | Melding til bruker |
nr | int | Spørsmålsnummer |
Bør ikke skrive en linje kode før man har bestemt strukturen på disse tabellene!
Tegn en figur og start programmeringen med å legge inn tabellen, for eksempel slik:
const AMERIKANSK: int = 0; const TYSK: int = 1; const FRANSK: int = 2; var spraktabell: Array = [ { melding: "Avisen Lillevik Tidende tilbyr språkkurs i New-York", sporsmal: ["Hva betyr ordet Where?", "Hvilke(t) ord kan legges til her?\nHow are ...", "Spill av lydfilen \"Oversetting.mp3\" og velg"+ riktig oversettelse:" ], alternativer: [ ["Hvor","Vi er", "Var","Hvorfor"], ["you","John doing?","things","the house","the wife"], ["Hei, mitt navn er Tom", "Jeg er Tom", "Kjenner du Tom?", "Når kommer Tom?"] ], fasit: [ [0], [0,2], [2] ], media: [ ["","","Oversetting.mp3"] //media, .mp3, .flv, ... ] }// Amerikansk /* og her kan vi legge inn tysk, fransk osv: {melding: " ", sporsmal: [ ], alternativer: [ [ ], ... ], fasit: [ [ ], ... ], media: [ ... ] }//Tysk ... */ ];// spraktabell |
oppdaterGUI() // Hent spørsmål, alternativer, ...videreBtn -> videreKlikket() // Sett opp lytterfunksjon
hentSvar() // Ta vare på brukersvar nr ++ Hvis nr == antall svar lagRapport() // Finn poeng og lag tilbakemelding gå til rapport ramme ellers oppdaterGUI()
//Sjekker hva bruker har krysset av og lagrer
valgtabell = new Array() Hvis alternativ 1 er valgt valgtabell.push(0) Hvis alternativ 2 er valgt valgtabell.push(1) ... svartabell.push(valgtabell)
// Henter spørsmål, alternativer fra spraktabell, fjerner avkryssinger
// fra sjekkbokser. (Burde også hente og presentere eventuelle lyd-
// filer eller videofiler)
hent spørsmålstekst og legg i sporsmalLbl for alle alternativer hent alternativtekst og legg i sjekkboks sett visible=false hvis ikke i bruk
// Regner ut poeng og lager tilbakemelding
// Regner ut poengsum: poeng = 0 for alle spørsmål hent antallsvar fra svartabell Hvis antallsvar>0 for alle alternativer Hvis svar i fasit-tabell poeng++ ellers poeng-- // Finner antall mulige poeng (trenger senere) makspoeng=0 for alle spørsmål makspoeng += lengde på fasit-tabell // lager tilbakemelding Hvis poeng<0 melding = SVAKMELDING ellers hvis poeng == makspoeng melding = BRAMELDING ellers melding = melding i spraktabell
/* Skisse av quizdelen (frame 2), forutsetter at frame 1 har valgt språk og satt dette til Amerikansk. Forutsetter at vi følger opp med en ny frame som gir tilbakemelding til bruker. */ import flash.events.MouseEvent; /// --- Datastruktur --- /// const SVAKMELDING: String = "Dette gikk ikke så bra, men det er håp for alle "+ "som vil lære et nytt språk!"; const BRAMELDING: String = "Alt riktig, veldig bra!"; const AMERIKANSK: int = 0; const TYSK: int = 1; const FRANSK: int = 2; var spraktabell: Array = [ { melding: "Avisen Lillevik Tidende tilbyr språkkurs i New-York", sporsmal: ["Hva betyr ordet Where?", "Hvilke(t) ord kan legges til her?\nHow are ...", "Spill av lydfilen \"Oversetting.mp3\" og velg "+ "riktig oversettelse:" ], alternativer: [ ["Hvor","Vi er", "Var","Hvorfor"], ["you","John doing?","things","the house","the wife"], ["Hei, mitt navn er Tom", "Jeg er Tom", "Kjenner du Tom?", "Når kommer Tom?"] ], fasit: [ [0], [0,2], [2] ], media: [ ["","","Oversetting.mp3"] // media, kan sjekke ] // på endelse .mp3, .flv } /* og her kan vi legge inn tysk, fransk osv: {melding: " ", sporsmal: [ ], alternativer: [ [ ], ... ], fasit: [ [ ], ... ], media: [ ... ] } */ ]; var svartabell: Array = new Array(); // Husker hva bruker har svart. var sprak: int = AMERIKANSK; // Default språk var nr: int = 0; // Nummer på spørsmål var poeng: int = 0; // Poeng og rapport brukes var makspoeng: int = 0; var melding: String = ""; // i siste RapportFrame /// --- Hovedprogram --- /// stop(); var alternativtabell: Array = // Legger sjekkbokser i tabell [alt1Chk,alt2Chk,alt3Chk,alt4Chk,alt5Chk]; // Må sette opp første spørsmål: nr=0; oppdaterGUI(); // Kobler opp lytterfunksjon videreBtn.addEventListener(MouseEvent.CLICK, videreKlikket); /// --- Underprogram/funksjoner --- /// function videreKlikket(evt: MouseEvent): void { hentSvar(); var antallsporsmal = spraktabell[sprak].sporsmal.length; nr++; if(nr == antallsporsmal) { // Hvis ferdig lagRapport(); // Skal ha: gotoAndStop( rapport-frame ) } else if (nr < antallsporsmal) { oppdaterGUI(); }//if }//videreKlikket() /* Tar vare på brukers svar */ function hentSvar(): void { var valgtabell: Array = new Array(); for(var i:int =0; i < 5; i++) { if(alternativtabell[i].selected) {valgtabell.push(i); } }//for alle alternativ-sjekkbokser svartabell.push(valgtabell); }//hentSvar() /* Legger inn riktige tekster på skjermen, (Burde også sette opp lydfil eller video) Har også forenklet til 4 alternativer på alle spørsmål foreløpig. */ function oppdaterGUI(): void { var t: Object = spraktabell[sprak]; sporsmalLbl.text = t.sporsmal[nr]; var antallalternativer: int = t.alternativer[nr].length; for(var i:int =0; i < 5; i++) { if(i < antallalternativer) { // alternativtabell[i].label = t.alternativer[nr][i]; alternativtabell[i].visible = true; }else{ alternativtabell[i].visible = false; }// hvis det finnes alternativ alternativtabell[i].selected = false; }//for alle alternativ-sjekkbokser }//oppdaterGUI(); /* Regner ut poeng og lager rapport ved å sammenligne svar med fasit. */ function lagRapport():void { var t: Object = spraktabell[sprak]; poeng = 0; for(var sp:int=0;sp<t.sporsmal.length;sp++){ var antallsvar:int = svartabell[sp].length; if(antallsvar>0) { //Sjekk om minst et valgt alternativ er valgt for(var alt:int=0;alt<antallsvar;alt++) { //for alle alt if(t.fasit[sp].indexOf(svartabell[sp][alt])>-1) { poeng++; }else{ poeng--; }//if riktig eller galt svar }//for }//if }//for alle spørsmål makspoeng = 0; for(sp=0;sp<t.sporsmal.length;sp++){ // finner makspoeng makspoeng += t.fasit[sp].length; }//for alle spørsmål if(poeng<0) { melding = SVAKMELDING; } else if (poeng <= 3) { melding = t.melding; //tilbud om språkkurs } else if(poeng == makspoeng) { melding = BRAMELDING; }// hvis poeng... trace("Melding: " + melding); trace("Poeng: " + poeng); }//lagRapport() |