T8 concurs

18
TEMA 8 1/18 El Gran Concurs de Presidents El Gran Concurs de Presidents és un joc de preguntes sobre els ex líders dels Estats Units. Encara que aquesta prova és de presidents, es pot utilitzar com a plantilla per construir qüestionaris sobre qualsevol tema. En els temes anteriors, has estat introduït en alguns conceptes fonamentals de programació. Ara estàs llest per a alguna cosa més difícil. Trobareu que aquest tema requereix un salt conceptual en termes de programació, habilitats i el pensament abstracte. En particular, utilitzarem dues variables de llista per emmagatzemar les dades, en aquest cas, les preguntes i respostes de l'examen. I farem servir una variable índex per fer un seguiment quan l'usuari està en el concurs. En acabar, estaràs armat amb els coneixements necessaris per crear aplicacions de concursos i moltes altres aplicacions que requereixen processament de llistes. Aquest tema assumeix que estàs familiaritzat amb els conceptes bàsics d'App Inventor: utilitzant el Dissenyador de components per crear la interfície d'usuari i utilitzar l'Editor de blocs per especificar controladors d'esdeveniments i programar el comportament dels components. Si no estàs familiaritzat amb aquests fonaments, assegureu-vos de revisar els temes anteriors abans de continuar. Vas a dissenyar el qüestionari perquè l'usuari procedeix d'una pregunta a una altra fent clic al botó Següent i rep retroalimentació sobre si cada resposta que ha introduït és correcta o incorrecta.

description

T8 concurs

Transcript of T8 concurs

Page 1: T8 concurs

TEMA 8 1/18

El Gran Concurs de PresidentsEl Gran Concurs de Presidents és un joc de preguntes sobre els ex líders dels Estats Units. Encara que aquesta prova és de presidents, es pot utilitzar com a plantilla per construir qüestionaris sobre qualsevol tema.

En els temes anteriors, has estat introduït en alguns conceptes fonamentals de programació. Ara estàs llest per a alguna cosa més difícil. Trobareu que aquest tema requereix un salt conceptual en termes de programació, habilitats i el pensament abstracte. En particular, utilitzarem dues variables de llista per emmagatzemar les dades, en aquest cas, les preguntes i respostes de l'examen. I farem servir una variable índex per fer un seguiment quan l'usuari està en el concurs.

En acabar, estaràs armat amb els coneixements necessaris per crear aplicacions de concursos i moltes altres aplicacions que requereixen processament de llistes.

Aquest tema assumeix que estàs familiaritzat amb els conceptes bàsics d'App Inventor: utilitzant el Dissenyador de components per crear la interfície d'usuari i utilitzar l'Editor de blocs per especificar controladors d'esdeveniments i programar el comportament dels components. Si no estàs familiaritzat amb aquests fonaments, assegureu-vos de revisar els temes anteriors abans de continuar.

Vas a dissenyar el qüestionari perquè l'usuari procedeix d'una pregunta a una altra fent clic al botó Següent i rep retroalimentació sobre si cada resposta que ha introduït és correcta o incorrecta.

Page 2: T8 concurs

TEMA 8 2/18

El que aprendràs

Aquesta aplicació, que es mostra a la Figura 8-1, es refereix a:

• Definició de variables de llista per a l'emmagatzematge de les preguntes i respostes en les llistes.

• Seqüenciació per una llista amb un índex, cada vegada que l'usuari fa clic a Següent, apareixerà la següent pregunta.

• Ús de condicionals (if): realitzar determinades operacions només sota condicions específiques. Anem a utilitzar un bloc if per manejar el comportament de l'aplicació quan l'usuari arriba al final de la prova.

• Canvi d'una imatge per mostrar una imatge diferent per a cada pregunta del qüestionari.

Figura 8-1. El Gran Concurs de Presidents en l'emulador

Introducció

Connectar-se a la pàgina web d'App Inventor i començar un nou projecte. El nom de "PresidentsConcurs" i establir el títol de la pantalla de "El Gran Concurs de Presidents". Obriu l'Editor de blocs i connectar al telèfon. També pots descarregar les fotos per al concurs de la carpeta Recursos 8 del tema 8 en el teu ordinador: roosChurch.gif, nixon.gif, carterChina.gif i atomic.gif. Vas a carregar aquestes imatges en el teu projecte en la pròxima secció.

Page 3: T8 concurs

TEMA 8 3/18

Disseny dels components

L'aplicació “El Gran Concurs de Presidents” té una interfície senzilla per a la visualització de la pregunta i que permet a l'usuari contestar. Pots construir els components de la instantània del Dissenyador de components com es mostra a la Figura 8-2.

Figura 8-2. El Gran Concurs de Presidents en el dissenyador

Per crear aquesta interfície, primer carreguis les imatges que has descarregat en el projecte. Fes clic a Afegeix a l'àrea de Media i seleccioneu un dels fitxers descarregats (per exemple, roosChurch.gif). Feu el mateix amb les altres tres imatges. A continuació, afegir els components enumerats en la Taula 8-1.

Taula 8-1. Components per a l'aplicació El Gran Concurs de PresidentsComponent Paleta Nom assignat Objectiu

Image Basic Image1 La imatge que es mostra amb la pregunta.

Label Basic EtPregunta Mostra la qüestió actual.

Horizontal Arrangement Screen Arrangement HorizontalArrangement1 Organitza AnswerPrompt i Text.

TextBox Basic TBResposta L'usuari haurà d'introduir la seva resposta aquí.

Button Basic BResposta L'usuari fa clic aquí per presentar una resposta.

Label Basic EtCorregit Mostra "correcte" o "incorrecte"

Button Basic BSeguent L'usuari fa clic aquí per passar a la següent pregunta.

Page 4: T8 concurs

TEMA 8 4/18

Estableixi les propietats dels components de la següent manera:

1. Establir Image1.Picture a l'arxiu d'imatge roosChurch.gif, la primera imatge que ha d'aparèixer. Estableixi el seu ample a "Fill parent" i la seva altura a 200.

2. Establir EtPregunta.Text a "Qüestió ..." (vas a la introducció de la primera pregunta a l'Editor de blocs.).

3. Establir TBResposta.Hint a "Introduïu una resposta". Estableixi la seva propietat Text en blanc. Mou-lo a HorizontalArrangement1.

4. Canviar BResposta.Text a "Envia Resposta" i moure-lo a HorizontalArrangement1.

5. Canviar BSeguent.Text a "Següent".

6. Canviar EtCorregit.Text a blanc.

Afegir comportaments als Components

Haurà de programar els següents comportaments:• Quan s'inicia l'aplicació, la pregunta apareix per primera vegada, incloent la seva imatge corresponent.• Quan l'usuari fa clic al BSeguent, la segona pregunta apareix. Quan es fa clic en ell una vegada més, la tercera qüestió apareix, i així successivament.• Quan l'usuari arriba a l'última pregunta i fa clic al BSeguent, la primera pregunta hauria d'aparèixer de nou.• Quan l'usuari respon a una pregunta, l'aplicació l'informarà si és correcte o no.

Per començar, definirem dues variables de llista sobre la base dels elements enumerats a la Taula 8-2:LlistaPreguntes que contingui la llista de preguntes, i LlistaRespostes per mantenir la llista de respostes corresponents. La Figura 8-3 mostra les dues llistes que crearà en l'Editor de blocs.

Taula 8-2. Variables per a la realització de llistes de pregunta i resposta Tipus de Bloc Calaix Objectiu

def variable ("LlistaPreguntes") Definitions Deseu la llista de preguntes (canviar-li el nom LlistaPreguntes).

def variable ("LlistaRespostes") Definitions Deseu la llista de respostes (canviar-li el nom LlistaRespostes).

make a list Lists Insert the items of the LlistaPreguntes.

text (tres d'elles) Text Les preguntes.

make a list Lists Insert the items of the LlistaRespostes.

text (tres d'elles) Text Les respostes.

Figura 8-3. Les llistes per al concurs

Page 5: T8 concurs

TEMA 8 5/18

Definició de la variable Index

L'aplicació necessita per realitzar un seguiment de la qüestió actual que l'usuari fa clic al BSeguent per continuar amb el qüestionari. Defineix una variable anomenada PreguntaActual per això, i la variable servirà com a índex tant al LlistaPreguntes i LlistaRespostes. La Taula 8-3 enumera els blocs que necessita per fer això, i la Figura 8-4 mostra com es veurà aquesta variable.

Taula 8-3. Crear l'índex

Tipus de Bloc Calaix Objectiu

def variable ("PreguntaActual")

Definitions Mantindre l'índex (posició) de la pregunta actual / resposta.

number (1) Math Establir el valor inicial de PreguntaActual l 1 (primera qüestió).

Figura 8-4. Inici dels blocs d'índex amb un valor d'1

Veient la primera pregunta

Ara que ja hem definit les variables que necessita, pot especificar el comportament interactiu de l'aplicació. Igual que amb qualsevol aplicació, és important treballar de forma incremental i definir un comportament alhora. Per començar, anem a pensar només en la pregunta, específicament, que mostra la primera pregunta a la llista quan l'aplicació s'inicia. Anem a tornar i fer front a les imatges una mica més tard.

Vol que els seus blocs de codi treballen amb independència de les qüestions específiques que es troben a la llista. D'aquesta manera, si decideix canviar les preguntes o crear una nova prova copiant i modificant aquesta aplicació, només haurà de canviar les preguntes reals en les definicions de llista, i no haurà de canviar els controladors d'esdeveniments.

Així, per aquest comportament en primer lloc, no vol referir directament a la primera pregunta, "Quin president va implantar el 'Nou Acord' durant la Gran Depressió?" En canvi, desitja fer referència, de manera abstracta, en la primera ranura a la LlistaPreguntes (independentment de la qüestió específica). D'aquesta manera, els blocs seguiran funcionant fins i tot si es modifica la qüestió en la primera ranura.

Seleccionaràs determinats elements d'una llista amb el bloc de llista d'elements de selecció. El bloc li demana que especifiqui la llista i un índex (una posició en la llista). Si una llista té tres elements, pot introduir 1, 2, o 3, segons l'índex.

Per aquest primer comportament, quan l'aplicació s'inicia, vols seleccionar el primer element de LlistaPreguntes i posar en el EtPregunta. Com recordarà el "Android, on és el meu cotxe?", si vols que alguna cosa succeeixi quan llança la seva aplicació, el comportament del programa s'ha de controlar ddes de l'esdeveniment Screen1.Initialize usant els blocs que figuren en el Quadre 8-4.

Taula 8-4. Blocs per carregar la pregunta inicial quan s'inicia l'aplicacióTipus de Bloc Calaix Objectiu

Screen1.Initialize Screen1 Controlador d'esdeveniments activa quan l'aplicació s'inicia.

set EtPregunta.Text to EtPregunta Poseu la primera pregunta a EtPregunta.

select list item Lists Seleccioneu la primera pregunta de LlistaPreguntes.

Global LlistaPreguntes My Definitions La llista de preguntes per seleccionar.

number (1) Math Seleccioni la primera pregunta amb un índex d'1.

Page 6: T8 concurs

TEMA 8 6/18

Com funcionen els blocs

L'esdeveniment Screen1.Initialize s'activa quan l'aplicació s'inicia. Com es mostra a la Figura 8-5, el primer element de la variable LlistaPreguntes es selecciona i es col·loca en EtPregunta.Text. Per tant, quan l'aplicació s'inicia, l'usuari veurà la primera pregunta.

Figura 8-5. Selecció de la primera pregunta

Posa a prova la teva app. Connecta el teu telèfon a un ordinador o fer clic a "emulador Nou" per obrir un emulador d'Android, a continuació, feu clic a "Connect to Device". Quan es carrega l'app, creu que el primer element de LlistaPreguntes: "Quin president va implantar el 'Nou Acord' durant la Gran Depressió?"

Iterar a través de les preguntes

Ara programar el comportament de BSeguent. Ja has definit l'actual QuestionIndex per a recordar que la pregunta de l'usuari està activada. Quan l'usuari fa clic al BSeguent, l'aplicació d'incrementar (afegir 1 a) el PreguntaActual (és a dir, canviar-lo de 1 a 2 o de 2 a 3, i així successivament). A continuació, utilitzar el valor resultant de PreguntaActual per seleccionar la nova pregunta que es vegi.

Com repte, a veure si es pot construir aquests blocs pel seu compte. Quan hagis acabat, compara els teus resultats amb la figura 8-6.

Figura 8-6. Passant a la pròxima pregunta

Page 7: T8 concurs

TEMA 8 7/18

Com funcionen els blocs

La primera fila de blocs incrementa la variable PreguntaActual. Si QuestionIndex actual té un 1 en ell, es canvia a 2. Si té un 2, es canvia a 3, i així successivament. Quan la variable PreguntaActual s'ha canviat, l'aplicació s'utilitza per seleccionar la nova pregunta que es vegi.

Quan l'usuari fa clic a BSeguent per primera vegada, els blocs d'increment canviaran PreguntaActual de 1 a 2, de manera que l'aplicació va a seleccionar la segona opció de LlistaPreguntes. "Quin president comunista va atorgar reconeixement oficial de la Xina el 1979?". La segona vegada que es fa clic a BSeguent, PreguntaActual canviarà de 2 a 3, i l'aplicació selecciona la tercera qüestió a la llista "Quin president va renunciar per l'escàndol Watergate?"

Nota: Pren un minut per comparar els blocs de BSeguent.Click i el del controlador d'esdeveniments Screen.Initialize. En els blocs Screen.Initialize, l'aplicació utilitza element de la llista de selecció amb un nombre concret (1) per seleccionar l'element de la llista. En aquests blocs, estàs seleccionant l'element de la llista amb una variable com a índex. L'aplicació no es tria el primer element de la llista, o el segon o el tercer, sinó que tria l'opció Indexth currentQuestion, i per tant un element diferent serà seleccionat cada vegada que es fa clic al BSeguent. Aquest és un ús molt comú per a un índex; incrementar el seu valor per trobar i mostrar els elements en una llista.

El problema de l'aplicació és que simplement s'incrementa a la següent pregunta cada vegada sense cap tipus de preocupació per al final de la prova. Quan PreguntaActual ja és 3 i l'usuari fa clic al BSeguent, l'aplicació canvia PreguntaActual de 3 a 4. A continuació, crida a select list item per obtenir l'element PreguntaActualth -en aquest cas, el quart punt. Atès que només hi ha tres elements en la variable LlistaPreguntes, el dispositiu Android no sap què fer. Llavors, com podem deixar que l'aplicació sàpiga que ha arribat al final de la prova?

Posa a prova la teva app. Proveu el comportament de la BSeguent per veure si l'aplicació està funcionant correctament. Feu clic al BSeguent al telèfon. El telèfon mostrarà la segona pregunta, "Quin president va atorgar reconeixement oficial a la Xina comunista el 1979?". I la tercera qüestió apareix en fer clic al BSeguent nou. Però si fa clic de nou, hauria de veure un error: "Tractar d'obtenir el punt 4 d'una llista de longitud 3". L'aplicació té un error! Saps quin és el problema? Intenteu d'esbrinar-ho abans de continuar.

L'aplicació ha de fer una pregunta quan es fa clic al BSeguent i executar diferents blocs en funció de la resposta. Ja que tu saps que la teua aplicació conté tres preguntes, una manera de fer la pregunta seria: "És la variable PreguntaActual superior a 3? "Si la resposta és sí, ha d'establir PreguntaActual de nou a 1 pel que l'usuari és portat de nou a la primera pregunta. Els blocs que necessitarà per això es mostren a la Taula 8-5.

Page 8: T8 concurs

TEMA 8 8/18

Taula 8-5. Blocs per comprovar el valor d'índex per al final de la llistaTipus de Bloc Calaix Objectiu

if Control Esbrinar si l'usuari està en l'última pregunta.

= Math Provar si PreguntaActual és 3.global PreguntaActual My Definitions Posar això en el costat esquerre de =.

number 3 Math Posar això en el costat dret de =. 3 és el nombre d'elements a la llista.

set global currentQuestion Index to My Definitions S'estableix a 1 per tornar a la primera pregunta.

number 1 Math Establir l'índex a 1.

Posa a prova la teva app. Atès que les variables com PreguntaActual no són visibles quan s'executa una aplicació, són sovint la font d'errors en un programa. Afortunadament, App Inventor proporciona una manera de "veure" variables durant les proves. En concret, pot fer clic a un bloc def variable i seleccioneu Watch, i una petita caixa apareixerà, mostrant el valor de la variable. En aquest cas, feu clic a la definició def PreguntaActual per veure-ho. Després feu clic al botó "Connect to Device..." en l'Editor de blocs per reiniciar

l'aplicació. El bloc def PreguntaActual apareixerà amb una caixa mostrant el valor inicial de PreguntaActual (1), com es mostra a la Figura 8-8.

Figura 8-8. Veure el valor d'una variable, mentre proves la teua aplicació

Ara agafa el telèfon i fes clic al BSeguent. La segona pregunta, "Quin president va atorgar reconeixement oficial a la Xina comunista el 1979?" Ha d'aparèixer a la EtPregunta al telèfon, com abans. A la pantalla de l'App Inventor, un 2 hauria d'aparèixer a la caixa PreguntaActual, com es mostra a la Figura 8-9.

Figura 8-9. Confirmant que l'índex s'està incrementant

Page 9: T8 concurs

TEMA 8 9/18

En fer clic de nou, la tercera qüestió ha d'aparèixer en la telèfon i un 3 han d'aparèixer a la caixa. Ja pel comportament que està realment a prova: si torna a fer clic, veurà 1 a PreguntaActual, i la primera pregunta ("Quin president va implantar el 'Nou Acord' durant la Gran Depressió?") ha d'aparèixer al telèfon.

Quan l'usuari fa clic al BSeguent, l'aplicació incrementa l'índex com ho feia abans. Però llavors, com es mostra a la Figura 8-7, es comprova per veure si PreguntaActual és superior a 3, el nombre de preguntes. Si és superior a 3, PreguntaActual s'ajusta a 1, i la primera pregunta apareix en pantalla. Si és 3 o menys, els blocs dins el bloc if no es realitzen, i la qüestió actual es mostra com de costum.

Figura 8-7. Comprovar si l'última (tercera) pregunta s'ha assolit

Page 10: T8 concurs

TEMA 8 10/18

Fer el Concurs fàcil de modificar

Afegiu una quarta pregunta a LlistaPreguntes i una quarta resposta a LlistaRespostes, com es mostra a la Figura 8-10.

Figura 8-10. Afegir un element a ambdues llistes

Posa a prova la teva app. Feu clic al BSeguent diverses vegades. Es donarà compte de que mai apareix la quarta pregunta, no importa quantes vegades feu clic a Següent.

Saps quin és el problema? Abans de seguir llegint, a veure si pot arreglar els blocs per a la quarta pregunta aparegui.

El problema és que la prova per determinar si l'usuari està en l'última pregunta és massa específic, es pregunta si la variable PreguntaActual és 3. Només cal canviar el número 3 a un 4, i l'aplicació funcionarà correctament de nou. El problema amb aquesta solució, però, és que cada vegada que modifiqui les preguntes i respostes, també s'ha recordar de fer aquest canvi. Aquestes dependències d'un programa d'ordinador sovint condueixen a errors, especialment quan una aplicació creix en complexitat.

Una estratègia molt millor és el disseny dels blocs perquè puguin treballar independentment quantes preguntes hi hagen. Aquesta generalitat fa que sigui més fàcil, com a programador, si desitja personalitzar el seu examen per algun altre tema. També és important si la llista en la que estàs treballant canvia de forma dinàmica, per exemple, pensar en una aplicació de prova que permet a l'usuari afegir noves preguntes (es construirà això en el tema 10).

Perquè un programa sigui més general, no s'ha de referir als números concrets com 3, ja que només funciona per als concursos de tres preguntes. Així, en lloc de preguntar si el valor de PreguntaActual és major que el nombre específic 3, pregunti si és tan gran com el nombre d'elements en LlistaPreguntes. Si l'aplicació es fa aquesta pregunta més general, va a treballar fins i tot quan afegisques o elimines elements del LlistaPreguntes. Per tant modificar el controlador d'esdeveniments BSeguent.Click per reemplaçar la prova anterior que es referia directament a 3. Necessitaràs els elements que figuren a la Taula 8-6.

Taula 8-6. Blocs per comprovar la longitud de la llistaTipus de Bloc Calaix Objectiu

length of list Lists Pregunti quants elements hi ha en LlistaPreguntes.

global LlistaPreguntes My Definitions Posi això en la "list" de la ranura length of list.

Page 11: T8 concurs

TEMA 8 11/18

Com funcionen els blocs

La prova if ara compara la PreguntaActual a la longitud de la LlistaPreguntes, com es mostra en la figura 8-11. Així doncs, si PreguntaActual és 5, i la longitud de la LlistaPreguntes és 4, llavors la PreguntaActual es torna a 1. Tingueu en compte que, pel fet que els blocs ja no es refereixen a 3 o un nombre específic, el comportament va a funcionar, no importa quants elements estan a la llista.

Figura 8-11. Comprovació del final de la llista d'una manera genèrica

Posa a prova la teva app. En fer clic al BSeguent, l'aplicació ara cicla a través de les quatre preguntes, per passar a la primera després de la quarta?

Page 12: T8 concurs

TEMA 8 12/18

Canvi de la imatge per a cada pregunta

Ara que ja has programat tots els comportaments per moure a través de les preguntes (i has fet el teu codi més intel·ligent i més flexible pel que és més abstracte), obtindrem les imatges funcionant correctament, també. En aquest moment, l'aplicació mostra la mateixa imatge independentment de la pregunta que s'està preguntant. Pots canviar això per una imatge corresponent a cada pregunta que apareix quan l'usuari fa clic al BSeguent. Anteriorment, has afegit quatre imatges com a Media del projecte. Ara, crearem una tercera llista, LlistaFotos, amb els noms de fitxer d'imatge com dels seus elements. També podràs modificar el controlador d'esdeveniments BSeguent.Click per canviar la imatge cada vegada que canvia el text de la pregunta. (Si ja està pensant en fer servir el PreguntaActual aquí, estàs en el camí correcte!).

En primer lloc, crear un LlistaFotos i inicialitzar amb els noms dels arxius d'imatge. Assegureu-vos que els noms són exactament els mateixos que els noms dels arxius que ha carregat en la secció Media del projecte. La figura 8-12 mostra com han de veures els blocs per a la LlistaFotos.

Figura 8-12. El LlistaFotos amb noms d'arxiu d'imatge com a elements

A continuació, modificar el controlador d'esdeveniments BSeguent.Click perquè canviï la imatge que apareix en funció de l'índex de pregunta. La propietat image.picture s'utilitza per canviar la imatge visualitzada. Per modificar BSeguent.Click, necessitarà els elements que figuren a la Taula 8-7.

Taula 8-7. Blocs d'afegir la imatge que acompanya a la preguntaTipus de Bloc Calaix Objectiu

set Image1.Picture to Image1 Establiu aquesta opció per canviar la imatge.

select list item Lists Seleccioneu la imatge corresponent a la pregunta actual.

global LlistaFotos My Definitions Seleccioneu un nom de fitxer de la llista.

global currentQuestion Index My Definitions Seleccioneu l'element numero PreguntaActual.

Page 13: T8 concurs

TEMA 8 13/18

Com funcionen els blocs

El PreguntaActual serveix d'índex per al LlistaPreguntes i la LlistaFotos. Sempre que hagis configurat correctament les teues llistes de manera que la primera pregunta que correspon a la primera imatge, la segona a la segona, i així successivament, l'únic índex pot servir a ambdues llistes, com es mostra a la Figura 8-13. Per exemple, la primera foto, roosChurch. Gif, és una imatge del president Franklin Delano Roosevelt (assegut amb el primer ministre britànic Winston Churchill), i "Roosevelt" és la resposta a la primera pregunta.

Figura 8-13. Selecció de la fotografia PreguntaActualth cada vegada

Posa a prova la teva app. Fes clic un parell de vegades. Ara bé, una altra imatge apareixerà cada vegada que feu clic al BSeguent?

Page 14: T8 concurs

TEMA 8 14/18

Comprovació de les respostes de l'usuari

Fins ara, hem creat una aplicació que simplement es desplaça per les preguntes i respostes (aparellat amb una imatge de la resposta). És un gran exemple d'aplicacions que utilitzen llistes, però per ser una aplicació de prova veritable, ha de donar als usuaris informació sobre si estan fent-ho bé o malament.

Així que ara anem a afegir blocs que informen de si l'usuari ha respost a una pregunta correctament o no. La nostra interfície està configurada perquè l'usuari introdueixi en la seva resposta a TBResposta i després fa clic al BResposta. L'aplicació ha de comparar l'entrada de l'usuari amb la resposta a la pregunta actual utilitzant un bloc ifelse. El EtCorregit llavors ha de ser modificat per informar de si o no la resposta és correcta. Hi ha bastants pocs blocs necessaris per a la programació aquest comportament, tots els quals s'enumeren a la Taula 8-8.

Tipus de Bloc Calaix Objectiu

BResposta.Click BResposta S'activa quan l'usuari fa clic al BResposta.

ifelse Control Si la resposta és correcta, fes una cosa, en cas contrari, fer una altra.

text= text Pregunti si la resposta és correcta.

TBResposta.Text TBResposta Conté la resposta de l'usuari.

select list item Lists Seleccioneu la resposta actual d'LlistaRespostes.

global LlistaRespostes My Definitions La llista per triar.

global PreguntaActual My Definitions La pregunta (i resposta) el nombre de l'usuari està activada.

set EtCorregit.Text to EtCorregit Informe la resposta aquí.

text ("correct!") text Mostra aquest cas la resposta és correcta.

set EtCorregit.Text to EtCorregit Informe la resposta aquí.

text ("incorrect!") text Mostra aquest cas la resposta és incorrecta.

Page 15: T8 concurs

TEMA 8 15/18

Com funcionen els blocs

Com es mostra a la figura 8-14, la prova ifelse pregunta si la resposta de l'usuari introduït (TBResposta.Text) és igual a l'element número PreguntaActual a la LlistaRespostes.

Si PreguntaActual és 1, l'aplicació va a comparar la resposta de l'usuari amb el primer element de LlistaRespostes, "Roosevelt." Si PreguntaActual és 2, l'aplicació va a comparar la resposta de l'usuari amb la segona resposta a la llista, "Carter", i així successivament . Si el resultat és positiu, el bloc “then-do” s'executa i la EtCorregit s'ajusta a "correcte!". Si la prova és falsa, el bloc "else-do" s'executa i la EtCorregit està en "incorrecte!".

Figura 8-14. Comprovació de la resposta

Posa a prova la teva app. Intenta respondre a una de les preguntes. S'ha d'informar de si està o no va respondre a la pregunta tal i com s'especifica al LlistaRespostes. Posa a prova tant amb una resposta correcta i incorrecta.

Probablement notaràs que la resposta que ha de marcar com a correcte, ha de ser una coincidència exacta (és a dir, en casos específics i que inclou qualsevol puntuació o espais) que s'ha especificat en el LlistaRespostes. Assegureu-vos de provar també que les coses funcionen a les preguntes successives.

L'aplicació hauria de funcionar, però és possible que notis que quan feu clic al BSeguent, el "correcte" o "incorrecte" del text i la resposta anterior encara hi són, com es mostra a la Figura 8-15, tot i que estàs buscant en la següent pregunta. És bastant inofensiu, però els usuaris de l'aplicació sense dubte es donaran compte d'aquests problemes d'interfície d'usuari.

Per aclarir la EtCorregit i TBResposta, vas a posar els blocs que figuren a la Taula 8-9 al controlador d'esdeveniments BSeguent.Click.

Figura 8-15. La primera resposta i "correcte" encara apareixen quan l'usuari es mou a la següent pregunta.

Page 16: T8 concurs

TEMA 8 16/18

Taula 8-9. Blocs per solucionar el EtCorregitTipus de Bloc Calaix Objectiu

set EtCorregit.Text to EtCorregit Aquesta és l'etiqueta que quedi en blanc.

text ("") Text Quan l'usuari fa clic a BSeguent, esborrar l'anterior resposta de retroalimentació.

set TBResposta.Text to TBResposta La resposta de l'usuari de la pregunta anterior.

set TBResposta.Text to Text Quan l'usuari fa clic al BSeguent, esborrar la resposta anterior.

Com funcionen els blocs

Com es mostra a la figura 8-16, quan l'usuari fa clic al BSeguent, es passa a la següent pregunta, de manera que les dues primeres files del controlador d'esdeveniments EtCorregit i TBResposta es tapen.

Figura 8-16. Tapes la resposta i l'etiqueta correcta / incorrecta en la següent pregunta

Posa a prova la teva app. Respon una pregunta i fes clic a "Envia Resposta" i després fes clic al BSeguent. La teua resposta anterior i els seus comentaris desapareixen?

Page 17: T8 concurs

TEMA 8 17/18

L'aplicació completa: El Gran Concurs de Presidents

La Figura 8-17 mostra la configuració del bloc final per El Gran Concurs de Presidents.

Figura 8-17

Variacions

És possible que vulgueu explorar algunes variacions. Per exemple:

• En comptes de mostrar imatges per a cada pregunta, intenti reproduir un clip de so o un vídeo curt. Amb el so, pot activar el seu concurs en un nom d'aquesta aplicació melodia.

• El concurs és molt rígit en termes del que s'accepta com una resposta vàlida. Hi ha un nombre de mètodes per modificar això. Un és utilitzar el bloc text.contains per veure si la resposta de l'usuari està continguda en la resposta real. Una altra opció és donar múltiples respostes per a cada pregunta i comprovar iterant (foreach) a través d'ells per veure si alguna correcta. També pot trobar la manera de fer front a qualsevol espai extra d'usuari introduït en la resposta o permeten els caràcters en majúscules i minúscules (és a dir, fer que les respostes entre majúscules i minúscules).

Page 18: T8 concurs

TEMA 8 18/18

Resum

Aquestes són algunes de les idees que hem tractat en aquest tema:

• Separeu una aplicació en les seves dades (sovint s'emmagatzemen en una llista) i els seus controladors d'esdeveniments. Utilitza un bloc de ifelse per comprovar les condicions.

• Els blocs en els controladors d'esdeveniments ha de referir només a la llista d'elements abstracta i la mida de la llista perquè l'aplicació funcionarà fins i tot si les dades de la llista es canvia.

• Les variables d'índex fan un seguiment de la posició actual d'un element dins d'una llista. Quan se'ls incrementa, cal anar en compte en utilitzar un bloc if per manejar el comportament de l'aplicació quan l'usuari arriba al final de la llista.