- 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()
|