Tag Archives: quizme smartphone

Quiz Me

Que estas construint

QuizMe és un joc de preguntes sobre beisbol, però es pot utilitzar com a plantilla per construir qüestionaris sobre qualsevol tema.Amb QuizMe:

  • L’usuari respon pas a pas a una sèrie de preguntes, fent clic en un botó per passar a la següent pregunta.
  • L’usuari introdueix una resposta per a cada pregunta i l’aplicació informa si cada resposta és correcta o no.

Amb QuizMe, les pregunta del qüestionari són sempre les mateixes llevat que tu, el programador, les canviïs. Més tard, pots crear MakeQuiz , una aplicació que permet als usuaris de l’aplicació crear i modificar les preguntes del qüestionari.

Primers passos

Connecta’t a la pàgina web de App Inventor i comença un nou projecte. Nombralo QuizMe, i també estableix el títol de la pantalla com QuizMe. Obre l’Editor de blocs i conectalo amb el telèfon.

Descàrrega també aquestes fotografies de jugadors de beisbol i guardar-les en el teu ordinador: Larsenberra.jpg , dallasbraden.jpg ,cyyoung.jpg , nolanryan.jpg . Més tard, vas a carregar aquestes imatges en el teu projecte.

Introducció

Vas a dissenyar un joc de preguntes perquè l’usuari passi d’una pregunta a una altra fent clic al botó Següent, per rebre la teva senzilla retroalimentació correcte / incorrecte a cada resposta.

Aquest tutorial presenta:

  • Definició i visualització de llistes d’informació
  • La seqüenciació a través d’una llista que utilitza una variable d’índex – una variable que segueix la pista d’una posició en una llista.
  • Comportaments condicionals – dur a terme determinades operacions només quan es compleix una condició.
  • Canvi d’una imatge per mostrar una imatge diferent en diferents moments.

Configuració dels components

Utilitza el dissenyador de components per crear la interfície d’QuizMe. Quan hagis acabat, ha de ser semblant a la figura de sota (també hi ha instruccions més detallades per sota de la imatge).

Per crear aquesta interfície, primer carrega les imatges que has descarregat en el projecte. Feu clic al botó Add a l’àrea de Mitjana i selecciona un dels arxius descarregats (per exemple, Larsenberra.jpg). Després fes el mateix amb les altres tres imatges.

A continuació, crea els següents components arrossegant des de la Paleta al Visor.

Tipus de component Grup de la paleta Com ho diràs Propòsit del component
Image Basic Image1 La imatge part de la pregunta
Label Basic QuestionLabel Mostra la pregunta actual
HorizontalArrangement Screen Arrangement HorizontalArrangement1 Organitza l’etiqueta i calaix de text
Label Basic AnswerPromptLabel Text per al calaix de resposta
TextBox Basic AnswerText L’usuari introdueix la teva resposta aquí.
Label Basic RightWrongLabel Correcte / Incorrecte es mostra aquí.
HorizontalArrangement Screen Arrangement HorizontalArrangement2 Organitza el AnswerButton i nextButton
Button Basic AnswerButton On l’usuari fa clic per enviar una resposta
Button Basic NextButton On l’usuari fa clic per passar a la següent resposta

Estableix les propietats dels components que es descriuen a continuació:

Component Acció
Image1 Estableix la seva propietat Picture a Larsenberra.jpg. Aquesta és la primera imatge que ha d’aparèixer.
QuestionLabel Canvia la seva propietat Text a “question”
AnswerPromptLabel Canvia la seva propietat Text a “Enter Answer:”. A la pantalla Viewer (visor). Mou el botó dins de HorizontalArrangement1.
AnswerText Canvia la seva propietat Hint a “please enter an answer”. Al Visor, mou ​​AnswerText dins HorizontalArrangement1.
AnswerButton Canvia la seva propietat Text a “Submit”. Al Visor, mou ​​el botó dins de HorizontalArrangment2.
NextButton Canvia la seva propietat Text a “Next”. Mou el botó dins de HorizontalArrangement2.
RightWrongLabel Canvia la seva propietat Text a “correct / incorrect”

Afegir comportaments als components

Obre l’Editor de blocs per afegir els comportaments de l’aplicació. En primer lloc, definirem dues variables de llista, QuestionList per mantenir la llista de preguntes, iAnswerList per mantenir la llista de respostes corresponents.

Per definir les dues variables de llista, necessitareu els següents blocs:

Tipus de bloc Calaix Propòsit
def variable Definitions Defineix la variable QuestionList (Canvia-li el nom)
def variable Definitions Defineix la variable AnswerList (Canvia-li el nom)
make a list Lists Utilitzada per inserir els elements de QuestionList
text (3 d’ells) Text les preguntes actuals
make a list Lists Utilitzada per inserir els elements de AnswerList
text (3 d’ells) Text les respostes actuals

Per crear variables globals arrossega un bloc definició de variable del calaix Definitions i feu doble clic al nom per defecte “variable” per canviar-li el nom. El bloc def variable té una ranura per al valor inicial de la variable. Si la variable representa un nombre o text, feu clic al triangle del bloc vermell-i tria el tipus que desitgis. Si la variable representa una llista, arrossega bloc vermell? A la paperera, veu el calaix Lists, i connecta un bloc make a list en la definició de la variable.

Els blocs han de tenir el següent aspecte:

Defineix la variable oculta d’Índex

Cada vegada que l’usuari fa clic al NextButton per procedir a través del qüestionari, l’aplicació ha de recordar la pregunta en què es troba. En programació, per recordar alguna cosa, es defineix una nova variable. En aquest cas, l’aplicació ha de recordar el nombre de pregunta en curs – l’índex en la llista QuestionList.

Per crear la variable currentQuestionIndex, necessitareu els següents blocs:

Tipus de bloc Calaix Propòsit
def variable Definitions Defineix la variable currentQuestionIndex (Canvia-li el nom)
number (1) Math Establir el valor inicial currentQuestionIndex a 1

Els blocs han de tenir el següent aspecte:

index

Mostra la primera pregunta

Per començar, fes cas omís de les respostes i simplement treballa en el comportament de la seqüència per les preguntes. El comportament desitjat és el següent: quan l’aplicació s’inicia, la primera pregunta hauria d’aparèixer a l’etiqueta amb el nom QuestionLabel. Quan l’usuari fa clic a NextButton, la segona pregunta ha d’aparèixer.Quan l’usuari fa clic una vegada més, la tercera ha d’aparèixer. Quan s’arriba a la darrera pregunta, fent clic a NextButton ha de donar lloc a la primera pregunta, que un cop més ha d’aparèixer en QuestionLabel.

Amb App Inventor, es seleccionen els elements particulars d’una llista amb el bloc select list item. El bloc demana que especifiquis la llista i un índex – una posició en la llista. Si una llista té tres elements, els índexs 1,2, i 3 són vàlids.

Per QuizMe, quan l’aplicació s’inicia, l’aplicació ha d’elegir la primera pregunta a la llista i mostrar-la en el component QuestionLabel.

Per aquest comportament d’inicialització d’aplicació, necessites els següents blocs:

Tipus de bloc Calaix Propòsit
Screen1.Initialize Screen1 Quan aplicació comença, aquest controlador d’esdeveniments s’activa.
setembre QuestionLabel.Text to QuestionLabel Necessari per posar la primera pregunta en QuestionLabel
select list item Lists Necessari per seleccionar la primera pregunta de QuestionList
global QuestionList My Definitions La llista per seleccionar
number (1) Math Selecciona la primera pregunta amb l’índex 1

Els blocs han de tenir el següent aspecte:

Com treballen els blocs

L’esdeveniment Screen1.Initialize s’activa quan l’aplicació s’inicia. El primer element de la variable QuestionList es selecciona i es col · loca en QuestionLabel.Text.Així que quan l’aplicació s’inicia, l’usuari veurà la primera pregunta.

Prova d’aquest comportament. Fes clic a Restart Phone App (o Connect Phone si el telèfon no està connectat). Què apareix al telèfon? Si heu creat QuestionList com es descrivia anteriorment, el primer element de QuestionList, “Who pitched a perfect game in the World Series?” (Qui va llançar un joc perfecte en les Sèries Mundials?), Hauria aparèixer en l’etiqueta QuestionLabel.

Passant a través de les preguntes

Ara programa el comportament de NextButton. Ja has definit currentQuestionIndex per recordar la pregunta en què l’usuari es troba. Quan es prem NextButton,l’aplicació necessita incrementar aquesta variable, per exemple, canviar d’1 a 2 o de 2 a 3, etc, i aleshores utilitzar el valor resultant per seleccionar la nova pregunta “actual”. Per aquest comportament, necessitareu els següents blocs:

Tipus de bloc Calaix Propòsit
NextButton.Click NextButton Quan l’usuari prem Next, aquest controlador de evnto és activat.
setembre currentQuestionIndex to My Definitions Necessari per col · locar la primera pregunta a QuestionLabel
Bloc + Math Usat per incrementar currentQuestionIndex
global currentQuestionIndex My Definitions El nou valor és el vell + 1
number (1) Math Per al + 1
setembre QuestionLabel.Text to QuestionLabel Necessari per mostrar la següent pregunta aquí
select list item Lists Necessari per seleccionar la primera pregunta de QuestionList
global QuestionList My Definitions Es col · loca a la ranura list de l’anomenada select list item
global currentQuestionIndex My Definitions Es col · loca a la ranura index de l’anomenada select list item, volem l’últim element referit

Els blocs han de tenir el següent aspecte:

Com treballen els blocs

La primera fila de blocs incrementa la variable currentQuestionIndex. Si currentQuestionIndex té un 1 al, és canviat a 2. Si té un 2, és canviat a 3, i així successivament. Quan la variable currentQuestionIndex ha canviat, l’aplicació s’utilitza per seleccionar la pregunta “actual”.

Recordem que al controlador d’esdeveniments Screen.Initialize, l’aplicació selecciona la primera pregunta per mostrar:

Quan es fa clic a NextButton, l’aplicació no tria el primer element de la llista, o el segon o el tercer, tria l’element referit a currentQuestionIndex .

Els blocs s’executen d’esquerra a dreta. L’aplicació primer avalua el paràmetre index de select list item, que és la variable currentQuestionIndex. El nombre emmagatzemat en currentQuestionIndex s’utilitza com a índex quan l’element de la llista de selecció s’executa.

Quan es fa clic a NextButton per primera vegada, els blocs d’increment d’establir currentQuestionIndex d’1 a 2, de manera que l’aplicació selecciona el segon element de QuestionList, “who pitched the first perfect game of 2010?”. La segona vegada que es fa clic a NextButton, currentQuestionIndex es canvia de 2 a 3, i l’aplicació selecciona la 3 ª pregunta a la llista, “who pitched the first perfect game of the modern era?”

Prova d’aquest comportament. Prova el comportament de NextButton per veure si l’aplicació està treballant correctament fins ara.Per provar-ho, pren el paper de l’usuari i fes clic a NextButton al telèfon. ¿Mostra la pantalla del telèfon a la segona pregunta?, “Who pitched the first perfect game of 2010?” Hauria, i la tercera pregunta ha d’aparèixer quan fas clic a NextButton de nou. Si això funciona, fes-te un copet a l’esquena ràpidament, i després sige endavant.

Intenta fer clic a NextButton de nou (una tercera vegada). Has de veure un error: “Attempting to get item 4 of una llista dels length 3” (Intent d’obtenir el punt 4 d’una llista de longitud de 3). L’aplicació té un error – Saps quin és el problema?

El problema amb l’aplicació és que sempre incrementa la variable currentQuestionIndex quan NextButton es prem. Quan currentQuestionIndex ja està en 3 i l’usuari fa clic a NextButton, l’aplicació canvia currentQuestionIndex de 3 a 4, truca al element de la llista de selecció per obtenir el currentQuestionIndex , O en aquest cas, l’element quart. Atès que només hi ha tres elements QuestionList, Android es queixa.

El que l’aplicació ha de fer és fer una pregunta – comprovar una condició – quan NextButton es prem, i executa diferents blocs dependendiendo de la resposta. Una manera de fer la pregunta és preguntar, “¿És la variable currentQuestionIndex actualment en 3?” Si la resposta és si, Has ajustar currentQuestionIndex de nou a 0 de manera que l’usuari és portat de nou a la primera pregunta.

Necessitaràs els següents blocs:

Tipus de bloc Calaix Propòsit
if test then estat Control Per preguntar si l’usuari està en l’última pregunta
= Block Math Per provar si currentQuestionIndex és 3
global currentQuestionIndex My Definitions
number 3 Math 3 és el nombre d’elements a la llista
setembre currentQuestionIndex to My Definitions Ajustar a 0 per tornar a la primera pregunta
number (0) Math Estableix a 0, perquè els propers blocs s’incrementaran en 1

El controlador d’esdeveniments NextButton.Click modificat ha de tenir aquest aspecte:

Com treballen els blocs

Quan es fa clic a NextButton, l’aplicació 1 comprova si currentQuestionIndex té un 3 en el mateix. Si és així currentQuestionIndex es torna de nou a 0 perquè quan es agrégé 1 a ell amb els blocs de baix, sigui 1 i l’aplicació mostri de nou la primera pregunta. Tingues en compte que només els blocs inserits en if-test-then estatdepenen de la condició – els blocs increment i set QuestionLabel.Text to s’executen en totes les condicions.

Prova aquest comportament. Atès que les variables com currentQuestionIndex estan ocultes, són sovint la font d’errors en un programa. Afortunadament, App Inventor ofereix una manera de fer aquestes variables ocultes transparents durant la prova. En concret, App Inventor et permet “veure” com el valor d’una variable canvia segons progressa l’aplicació. Per aquesta prova, feu clic dret en el bloc de definició currentQuestionIndex a l’Editor de blocs i tria Watch. A continuació, tria Restart Phone App A continuació, en el bloc de definició apareixerà una caixa que mostra el valor inicial de currentQuestionIndex (1):

Ara agafa el telèfon i feu clic al NextButon. La segona pregunta, “who pitched the most Recent perfect game in the major Leagues?”(Qui va llançar el joc perfecte més recent en les Grans Lligues?) Ha d’aparèixer en QuestionLabel al telèfon, com abans. A la pantalla d’App Inventor, 2 hauria d’aparèixer a la cel · la de memòria de currentQuestionIndex:

En fer clic un cop més, la tercera pregunta ha d’aparèixer al telèfon i 3 ha d’aparèixer en la cel · la de memòria. Si fas clic de nou, 1 d’aparèixer en currentQuestionIndex i la primera pregunta al telèfon.

Una aplicació sostenible: Fer que sigui fàcil modificar les preguntes

A continuació, es modificarà l’aplicació perquè sigui fàcil afegir i eliminar elements de la llista. Vas a reescriure els blocs perquè treballin en qualsevol llista, no només en una amb exactament tres elements. Per començar, afegeix una quarta pregunta a QuestionList i una altra resposta a AnswerList. Els blocs han de tenir el següent aspecte:

Prova l’aplicació modificada. Fes clic a NextButton un nombre de vegades. Has de veure que no apareix la quarta pregunta, no importa quantes vegades facis clic a Next.

El problema és que la prova per veure si l’usuari està en l’última pregunta és molt concreta: se li pregunta si la variable currentQuestionIndex és 3:

Pots només canviar el número 3 a 4, i l’aplicació tornarà a funcionar correctament. El problema amb aquesta solució, però, és que cada vegada que modifiquis les preguntes i respostes, també has de recordar-te de fer aquest canvi. Aquestes dependències en un programa d’ordinador sovint condueixen a errors, especialment quan una aplicació creix en complexitat. És molt millor establir el programa de manera que treballi, sense importar quantes preguntes hagi. Tal generalitat és encara més important que la llista està treballant amb canvis de forma dinàmica, per exemple, una aplicació de prova que permet a l’usuari afegir noves preguntes.

La millor solució és fer la pregunta d’una manera més general. Realment vols saber si la pregunta en què s’encuntra l’usuari està – el valor de currentQuestionIndex – és tan llarg com el nombre d’elements en QuestionList. Si l’aplicació fa la pregunta d’una manera més general, funcionarà fins i tot quan agreges o treguis elements de QuestionList. Per modificar el controlador d’esdeveniments NextButton.Click vas a substituir la comprovació anterior que es referia directament a 3. Necessitaràs els següents blocs:

Tipus de bloc Calaix Propòsit
length of list Lists Comprova el nombre d’elements en QuestionList
global QuestionList My Definitions Es col · loca a la ranura list de length of list

El teu controlador d’esdeveniments NextButton.Click ha d’aparèixer ara així:

Com treballen els blocs

La prova if ara compara currentQuestionIndex amb la longitud de QuestionList. Així, si currentQuestionIndex té un 4 en l’, i la longitud de QuestionList és 4, llavorscurrentQuestionIndex es posa a 0 (i després a 1 després de l’operació d’increment en la primera fila de blocs després de if). Tingues en compte que, pel fet que els blocs no es refereixen a tres o ni a cap mida específica, el comportament funcionarà independentment quants elements hi ha a la llista.

Posa a prova el comportament modificat. Quan fas clic al nextButton, realitza l’aplicació ara la seqüència a través de les quatre preguntes, passa a la primera després de la quarta?

Canvi de la imatge per a cada pregunta

L’aplicació actual mostra sempre la mateixa imatge, no importa la pregunta que se li demani. Pots canviar això perquè la imatge correspongui a la pregunta que apareix quan es fa clic a NextButton. Anteriorment, has agregat quatre imatges en els mitjans per al projecte. Ara, crearem una tercera llista, PictureList, amb els noms dels arxius d’imatge com els seus elements i modificar el controlador d’esdeveniments NextButton.Click per canviar la imatge cada vegada.

En primer lloc, crea una PictureList i inicializala amb els noms dels arxius d’imatge. Assegura’t que els noms són exactament els mateixos que els noms dels arxius que es van carregar en els mitjans del projecte. Així és com els blocs de PictureList han de quedar:

A continuació, has de modificar el controlador d’esdeveniments NextButton.Click perquè es modifiqui la imatge en funció de la pregunta que l’usuari estigui en aquest moment. Si s’estableix la propietat Image.Picture a el nom d’un arxiu d’imatge que s’ha carregat, aquesta imatge apareixerà. Per modificar NextButton.Click,necessitareu els següents blocs:

Tipus de bloc Calaix Propòsit
setembre Image1.Picture to Image1 estableix aquesta per canviar la imatge
select list item Lists necessària per seleccionar la imatge corresponent a la pregunta actual
global PictureList My Definitions selecciona un nom de fitxer d’aquesta llista
global currentQuestionIndex My Definitions selecciona l’element indicat de currentQuestionIndex

Els blocs han de tenir aquest aspecte:

Com treballen els blocs

CurrentQuestionIndex serveix d’índex per QuestionList i PictureList. Quan currentQuestionIndex és 1, l’aplicació selecciona la primera pregunta i la primera imatge.Quan currentQuestionIndex és 2, l’aplicació selecciona la segona pregunta i la segona imatge. aquest sistema depèn de les llistes que estan sincronitzades com a efecte están.ía i indeed they are. Per exemple, la primera foto, LarsenBerra.jpg és una imatge de Don Larsen, i Don Larsen és la resposta a la primera pregunta, “Qui va llançar un joc perfecte en la Sèrie Mundial?” Posa a prova el comportament modificat. Apareix una imatge diferent cada vegada que fas clic a nextButton?

L’avaluació de les respostes

A continuació, anem a afegir blocs que informen de si l’usuari ha respost a una pregunta correctament o no. L’usuari introdueix la resposta a AnswerText i després fa clic a AnswerButton. L’aplicació de comparar l’entrada de l’usuari amb la resposta a la pregunta “actual”, utilitzant un bloc ifelse per comprovar-ho. L’etiquetaRightWrongLabel s’ha de modificar per informar si la resposta és correcta o no. Necessitaràs els següents blocs per aquest comportament:

Tipus de bloc Calaix Propòsit
AnswerButton.Click AnswerButton el comportament s’activa quan l’usuari fa clic a AnswerButton
ifelse Control si la resposta és correcta, fa una cosa, si no fa altra cosa
= Block Math per preguntar si és la resposta correcta
AnswerText.Text AnswerText la resposta de l’usuari es troba en aquesta caixa de text
select list item Lists per seleccionar la resposta actual d’AnswerList
global AnswerList My Definitions La llista de la de seleccionar
global currentQuestionIndex My Definitions el número de la pregunta (i el nombre de resposta) en què l’usuari està
setembre RightWrongLabel.Text to RightWrongLabel informar sobre la resposta aquí
text “correct” Text si la resposta és correcta
setembre RightWrongLabel.Text to RightWrongLabel informar sobre la resposta aquí
text “incorrect” Text si la resposta és incorrecta

Els blocs han de tenir el següent aspecte:

Com treballen els blocs

La prova ifelse comprova, “és la resposta de l’usuari (AnswerText.Text) igual a l’element currentQuestionIndex h corresponent a AnswerList?” SicurrentQuestionIndex és 1, l’aplicació compara la resposta de l’usuari amb el primer element de AnswerList, “Don Larsen”. Si currentQuestionIndex és 2, l’aplicació compara la resposta de l’usuari amb la segona resposta a la llista, “Dallas Braden”, i així successivament. Si el resultat és positiu, els blocs then estat s’executen iRightWrongLabel s’ajusta a “correcte!”. Si la prova és negativa, els blocs else estat blocks s’executen i RightWrongLabel s’ajusta a “incorrecte”.

Prova l’aplicació modificada. Tracta de respondre a una de les preguntes. Ha d’informar has respost a la pregunta tal i com s’especifica en AnswerList. Posa a prova tant amb una resposta correcta com incorrecta (com el text es compara, la prova distingeix entre majúscules i minúscules).

Fes clic a NextButton i respon a una segona pregunta. Encara funciona? Ha, però és possible que notis que quan fas clic NextButton,el text “correct” .. / .. / .. / “incorrect” i la resposta anterior encara hi són. Encara que és bastant innocu, com qüestions de la interfície d’usuari sense dubte seran observades pels usuaris de la teva aplicació.

Per deixar en blanc RightWrongLabel i AnswerText, vas a posar els següents blocs dins del controlador d’esdeveniments NextButton.click:

Tipus de bloc Calaix Propòsit
setembre RightWrongLabel.Text to RightWrongLabel L’etiqueta per deixar en blanc
text (blank) Text Quan es fa clic a Següent, esborra l’avaluació a la resposta anterior
setembre AnswerText.Text to AnswerText La resposta de l’usuari per a la pregunta anterior
text (blank) Text Quan es fa clic a Següent, esborra la resposta anterior

Els blocs han de tenir el següent aspecte:

Com treballen els blocs

Quan es fa clic a NextButton l’usuari es mou a la següent pregunta, de manera que les dues primeres files del controlador d’esdeveniments esborren RightWrongLabeli AnswerText.

Prova d’aquest comportament. Respon la pregunta i fes clic a Submit, a continuació, fes clic a NextButton. El teu resposta anterior i l’avaluació de l’aplicació desapareixen?

Programa Final

QuizMe! Versió Final

Embolica la versió final de l’aplicació triant Package For Phone | Barcode al menú del Component Designer. Quan aparegui el codi de barres, utilitza l’escàner de codi de barres del teu telèfon per descarregar i instal · lar l’aplicació.

Variacions

Quan aconsegueixis una quiz funcinando, és possible que desitgis explorar algunes variacions. Per exemple,

  • En comptes de mostrar imatges per a cada pregunta, intenta reproduir un clip de so o un vídeo de curta durada. Amb el so, pots convertir la teva aplicació en una aplicació Endevina aquesta cançó.
  • La prova és molt rígida en termes del que és acceptat com una resposta vàlida. Hi ha diferents formes de modificar això. Una d’elles és utilitzar el bloctext.contains per veure si la resposta de l’usuari està dins de la resposta actual. Una altra és la de proporcionar respostes múltiples per a cada pregunta, i comprovar per iteració (foreach) a través d’elles per veure si algúna coincideix.
  • Transforma la prova perquè sigui d’opció múltiple. La llista de respostes haurà de ser una llista de llistes, i cada sub-llista mantindrà les opcions de resposta. Fes servir el component ListPicker per permetre a l’usuari triar una resposta.

Revisió

Aquestes són algunes de les idees que es tracten en aquest tutorial:

  • Les aplicacions poden ser escrites d’una manera general perquè funcionin amb qualsevol llista de dades.
  • Les variables d’índex s’utilitzen per fer un seguiment de la posició actual dins d’una llista. Quan les incrementes, vés amb compte amb arribar a la final de la llista.

Continua llegint

Etiquetat , , , , ,
Design a site like this with WordPress.com
Per començar