Esteet eli Obstaclet.
Johdanto
Pelin toimintoihin eli actioneihin voidaan liittää tehtäviä, jotka
pelaajan täytyy ratkaista ennen, kuin toiminto voidaan suorittaa.
Tehtäviä nimitetään esteiksi (obstacles). Tässä pelissä niiden on
tarkoitus olla erilaisia kielitehtäviä, kuten esimerkiksi projektissa
ensimmäiseksi aukkotehtävä (fill-in-blank), monivalinta ja sanan
keksiminen määrittelyn mukaan (glossary).
Pelinkirjoittajat voivat muokata omia esteitä kunkin esteen editorilla
(Obstacle Editor), joka toimii kirjoittajan käyttöliittymän
alaisuudessa.
Esimerkiksi pelinkirjoittaja voi halutessaan asettaa
uuteen paikkaan siirtymisen ehdoksi bussilipun omistamisen sekä
lisäksi aukkotehtävän, jossa pelaajan on täydennettävä
linja-autonkuljettajan kanssa käytävä keskustelu.
Toimintojen esittely
Yhteiset toiminnot
Esteille yhteisiä toimintoja hoitavat tiedostot sijaitsevat hakemistossa:
../cgi-bin/
obstacle_editor.pl
Este-editorin yhteinen osa, jossa on kaikille esteille yhteisiä
toimintoja (palveluita). Editorista voidaan valita muokattavaksi
haluttavan esteen luokka ja haluttaessa esteen lähdetiedosto.
Ohjelma etsii esteen hakemistosta sen oman editorin ja käynnistää
sen tarvittavilla parametreilla.
Editori siis sisältää esteiden lähdetiedostojen avaamiseen (=valitsemiseen)
tarvittavat rutiinit.
link_obstacle.pl
Ohjelma esteen liittämiseksi pelin toimintoon (action).
Ohjelma kysyy esteen luokan ja hakee esteen modulin sekä estekohtaisen
liittämis-rutiinin, jota kutsuu tarvittavin parametrein.
Estekohtaiset toiminnot
Este vaatii toimiakseen seuraavia hakemistoja ja tiedostoja:
Hakemistot
Esteelle on luotava sen luokan, ObstacleClass (esim. fill-in-blank) nimiset hakemistot:
- ../cgi-bin/obstacles/ObstacleClass/
- ../data/obstacles/ObstacleClass/
Esteen ohjelmat sijaitsevat binäärihakemistossa:
../cgi-bin/obstacles/ObstacleClass/.
Esim. ../cgi-bin/obstacles/fill-in-blank/
Tässä hakemistossa on esteen muokkaamisen, ja luomisen mahdollistava
editori; esteen peliin liittämistä varten ohjelma, joka kysyy
käyttäjältä vaaditut parametrit oikean muotoisina; Varsinainen
este-moduli, joka tulostaa esteen html-muotoisena argumenttiensa
mukaan; sekä mahdollisesti muita estekohtaisia ohjelmia ja scriptejä -
ei muuttuvia data-tiedostoja.
Estekohtaiset datatiedostot taas ovat jälkimmäisessä hakemistossa:
Esteen lähdekoodi, joka on käyttäjän antama. Se säilytetään
esteen muokkaamisen ja uudelleen generoimisen mahdollistamiseksi.
Tiedostolla on tunniste .txt. Esteellä voi olla html-muotoinen
templatetiedosto eli instanssi, joka on valmiiksi generoitu
este. Esteen oikeat vastaukset voivat olla tunnisteella .answer
olevassa tiedostossa.
Ohjelmatiedostot
Estekohtaisen editorin nimi on muotoa edit_ObstacleClass*. Editorilla
voidaan muokata esteitä (sanavarastot ym.) ja niihin kuuluvia
instansseja. Esimerkiksi aukkotehtävässä editori generoi käyttäjän
antamasta tekstistä html-muotoisen template-tiedoston ja
este-modulille jää tässä tapauksessa tehtäväksi ainoastaan sen
tulostaminen
Esteen liittämiseksi pelin toimintoon olevan estekohtaisen ohjelman
nimi on muotoa link_ObstacleClass* Tämä huolehtii vaadittujen
parametrien kysymisestä, oikeellisuudesta ja välittämisestä
kirjoittan käytt|liittymään.
Estemodulin nimi on muotoa ObstacleClass* (esim. fill-in-blank.pl) ja
tarkka nimi kuljetetaan objektissa ObstacleName. Estemoduli muodostaa
käyttäjälle (tai pelin kirjoittajalle) html-muotoisen esteen saamiensa
parametrien ja esteen data-hakemistossa
../data/obstacles/ObstacleClass/ olevien tiedostojen avulla. Este
voidaan muodostaa joko lähdetiedostosta generoimalla tai valmiiksi
generoidusta template-tiedostosta. Estemodulin parametrina saamaan
tiedoston nimi on objektissa: ObstacleInstance.
Estemoduli voi kutsua käyttäjien vastauksia tarkistavaa
check_ObstacleClass* nimistä ohjelmaa, kuten fill-in-blank -este
tekee. Oikeat vastaukset ovat tässä modulissa .answer tunnisteisessa
tiedostossa data-hakemistossa.
FUNKTIOKUVAKSET
Esteille yhteiset toiminnot
Yhteisiä toimintoja hoitavat tiedostot sijaitsevat hakemistossa:
../cgi-bin/
Huom. lähes jokainen ohjelma "kutsuu" formien kautta myös
itseään. Tämä on WWW:lle tyypillinen ominaisuus, koska ohjelmat eivät
ole jatkuvasti päällä, vaan ne suoritetaan aina formeihin kytkettyjen
toimintojen seurauksena.
Nimi:
obstacle_editor.pl
Kutsuminen:
Nimi polkuineen:
../cgi-bin/obstacle_editor.pl
Kutsuja(t):
Päävalikko, writer's interfacen yläpalkki-menu, esteiden omat editorit sekä
itse itseään
Argumentit:
- UserID, int
- RoundNumber, int
- AdventureID, int
- ActionID, int
- ObstacleClass, string(40)
- Memo, string
- start_obstacle_editor - string, a hidden object which implicates that
the obstacle editor will be started
Kutsuu funktiota:
../cgi-bin/obstacles/ObstacleClass/edit_ObstacleClass*
Argumenteilla:
- UserID, int
- AdventureID, int
- ActionID, int
- RoundNumber, int
- Memo, string
- ObstacleClass, string(40)
- name, string(40)
- edit_obstacle - indicates that the editor prints the begin screen.
Kutsuu funktiota:
../cgi-bin/print_header_buttons
Argumenteilla:
- UserID, int
Kuvaus:
Este-editorin yhteinen osa, jossa on kaikille esteille yhteisiä
toimintoja (palveluita). Editorista voidaan valita muokattavaksi
haluttavan esteen luokka ja haluttaessa esteen lähdetiedosto.
Ohjelma etsii esteen hakemistosta sen oman editorin ja käynnistää
sen tarvittavilla parametreilla.
Editori siis sisältää esteiden lähdetiedostojen avaamiseen (=valitsemiseen)
tarvittavat rutiinit.
--
Nimi:
link_obstacle.pl
Kutsuminen:
Nimi polkuineen:
../cgi-bin/link_obstacle.pl
Kutsuja(t):
writer's interfacen actionin muokkaus-osa, esteiden omat liittämis-
ohjelmat
Argumentit:
- UserID, int
- AdventureID, int
- ActionID, int
- RoundNumber, int
- Memo, string
- select_linked_obstacle - a hidden object which indicates that the editor
prints the begin screen.
Kutsuu funktiota:
link_ObstacleClass*
Argumenteilla:
- UserID, int
- AdventureID, int
- ActionID, int
- RoundNumber, int
- Memo, string
- ObstacleClass, string(40)
- class_selected - a hidden object which indicates that the editor
prints the begin screen.
Kutsuu funktiota:
../cgi-bin/print_header_buttons
Argumenteilla:
- UserID, int
Kuvaus:
Ohjelma esteen liittämiseksi pelin toimintoon (action).
Ohjelma kysyy esteen luokan ja hakee esteen modulin sekä estekohtaisen
liittämis-rutiinin, jota kutsuu tarvittavin parametrein.
Estekohtaiset toiminnot
Esteiden ohjelmat sijaitsevat hakemistossa:
../cgi-bin/obstacles/ObstacleClass/, jossa ObstacleClass on esteen luokka, esim.
../cgi-bin/obstacles/fill-in-blank/
Nimi:
link_ObstacleClass*
Kutsuminen:
Nimi polkuineen:
../cgi-bin/obstacles/ObstacleClass/link_ObstacleClass*, esim.
../cgi-bin/obstacles/fill-in-blank/link_fill-in-blank.pl)
Kutsuja(t):
link_obstacle.pl
Argumentit:
- UserID, int
- AdventureID, int
- ActionID, int
- RoundNumber, int
- Memo, string
- ObstacleClass, string(40)
- class_selected - a hidden object which indicates that the editor
prints the begin screen.
Kutsuu funktiota:
link_ObstacleClass*
Argumenteilla:
- UserID, int
- AdventureID, int
- ActionID, int
- RoundNumber, int
- Memo, string
- ObstacleClass, string(40)
- ObstacleInstance, string(40)
- ObstacleOptions, string(40)
Kuvaus:
Esteen liittämiseksi pelin toimintoon oleva estekohtainen
ohjelma. Tämä huolehtii vaadittujen parametrien kysymisestä,
oikeellisuudesta ja välittämisestä kirjoittan käytt|liittymään.
---
Nimi:
ObstacleClass*
Kutsuminen:
Nimi polkuineen:
../cgi-bin/obstacles/ObstacleClass/ObstacleClass*
(esim. ../cgi-bin/obstacles/fill-in-blank/fill-in-blank.pl)
Kutsuja(t):
actexe1:
Argumentit:
- UserID, int
- ActionID, int
- RoundNumber, int
- ObstacleClass, string(40)
- ObstacleInstance, string(40)
- ObstacleOptions, string(40)
- BeforeDescription, string(255)
edit_ObstacleClass*:
Argumentit:
- UserID, int
- ActionID, int
- RoundNumber, int
- ObstacleClass, string(40)
- ObstacleInstance, string(40)
- ObstacleOptions, string(40)
- NoGame
Kutsuu funktiota:
edit_ObstacleClass*
Argumenteilla:
- UserID, int
- ActionID, int
- RoundNumber, int
- Memo, string
- AdventureID, int
- start_obstacle_editor - string, a hidden objhect which implicates that
the obstacle editor will be started
Kutsuu funktiota:
loccrea
Argumenteilla:
- UserID, int
- RoundNumber, int
Kutsuu funktiota:
check_ObstacleClass*
Argumenteilla:
- UserID, int
- ActionID, int
- RoundNumber, int
- ObstacleInstance, string(40)
- ObstacleOptions, string(40)
- BeforeDescription, string(255)
Kuvaus:
Estemoduli, joka muodostaa käyttäjälle (tai pelin kirjoittajalle)
html-muotoisen esteen saamiensa parametrien ja esteen
data-hakemistossa ../data/obstacles/ObstacleClass/ olevien tiedostojen
avulla. Este voidaan muodostaa joko lähdetiedostosta generoimalla tai
valmiiksi generoidusta template-tiedostosta. Estemodulin parametrina
saamaa tiedostoa kutsutaan instanssiksi eli ObstacleInstance.
Estemoduli voi kutsua käyttäjien vastauksia tarkistavaa check_ObstacleClass*
nimistä ohjelmaa. Oikeat vastaukset voivat olla .answer tunnisteisessa
tiedostossa data-hakemistossa.
--
Nimi:
check_ObstacleClass*
Kutsuminen:
Nimi polkuineen:
../cgi-bin/obstacles/ObstacleClass/check_ObstacleClass*
(esim. ../cgi-bin/obstacles/fill-in-blank/check_fill-in-blank.pl)
Kutsuja(t):
ObstacleClass*
Argumentit:
- UserID, int
- ActionID, int
- RoundNumber, int
- ObstacleInstance, string(40)
- ObstacleOptions, string(40)
- BeforeDescription, string(255)
Kutsuu funktiota:
loccrea
Argumenteilla:
- UserID, int
- RoundNumber, int
Kutsuu funktiota:
actexe2
Komentorivi-argumenteilla:
- UserID, int
- ActionID, int
- RoundNumber, int
- Score - 0-100
Kutsuu funktiota:
edit_ObstacleClass*
Argumenteilla:
- UserID, int
- ActionID, int
- RoundNumber, int
- AdventureID - 311
- Memo, string
- start_obstacle_editor - string, a hidden objhect which implicates that
the obstacle editor will be started
Kuvaus:
Joihinkin esteisiin kuuluva käyttäjien vastauksia tarkistavaa
ohjelma. Oikeat vastaukset voivat olla .answer tunnisteisessa
tiedostossa data-hakemistossa.
---
Esteisiin liittyvät toiminnot
Esteisiin liittyviä käyttöliittymä-kuvia
Esteen muokkaus ja luonti
Obstacle Editorissa käyttäjä valitsee ensin selaimella sen esteen
luokan (ObstacleClass), jota haluaa editoida. Pelinkirjoittaja voi
joko aloittaa uuden esteen muokkaamisen toiminnolla Create a new
Obstacle tai valita olemassaolevan esteen muokattavaksi toiminnolla
Open an existing Obstacle, jolloin selaimella valitaan haluttu
tehtävätiedosto. Tämän jälkeen käynnistyy valitun esteen oma
editori. Esteelle annetaan yksilöllinen nimi ja editoriin täydennetään
esteen vaatimant tiedot. Käyttäjä voi poistaa esteen toiminnolla
Delete an Obstacle.
Esimerkkitapauksessa valitaan täyttötehtävän editori
(edit_fill-in-blank.pl).Täyttötehtävän teksti voidaan joko kirjoittaa
suoraan ruudulle avautuvaan teksti-editoriin tai kopioda leikepöydältä
täyttötehtävän editoriin. Kirjoittaja ympäröi pelaajalta piiloon
jääviksi tarkoitetut sanat hakasuluilla. Esim. [tämä lause jäisi
pelaajalta piiloon]. Hakasulkuihin on mahdollista laittaa useampiakin
oikeita vastauksia, jolloin ne erotetaan toisistaan pilkulla. Teksti
voi olla joko pelkässä tekstimuodossa tai html-muodossa, jolloin
tehtävään voidaan liittää esimerkiksi kuvia tai muita tehokeinoja.
Tämä mahdollistaa näyttävien ja monipuolisten tehtävien laadinnan,
eikä käyttäjän kuitenkaan tarvitse osata HTML, että voisi tehdä
yksinkertaisia tehtäviä.
Esten muodostus
Kun teksti on valmis, editori muokkaa esteen omaan data-hekemistoon ../data/obstacles/ObstacleClass tekstistä html-muotoisen
template-tiedoston, jolla on .html tunniste. Tiedosto voidaan liittää
html-dokumentin sisälle.
Esimerkin este-tiedosto sisältää tyttötehtävän tekstin ja tyhjät html-formeit
vastauksia varten.
sekä painike, joka kutsuu tehtävän tarkistusrutiinia
check_ObstacleClass*. Pelaajan antamia vastauksia verraraan Obstacle
Editorin tekemään vastaustiedostoon, jossa on .answer tunniste.
Vastaustiedostossa oikeat vastaukset ovat allekkain. Jos on useampi
oikea vastaus, niin ne ovat samalla rivillä pilkulla
erotettuna. Käyttäjän kirjoittama teksti talletetaan myös
alkuperäisessä muodossa .txt tunnisteiseen tiedostoon, jotta tehtävän
editoiminen jälkikäteen olisi mahdollista.
Eli fill-in-blank -editori
luo jokaisesta estettä varten kolme tiedostoa: Esteen toiminnoista
huolehtivan .html-tiedoston, täyttötehtävän vastaukset sisältävän
.answer-tiedoston ja esteen tekstin käyttäjän kirjoittamassa muodossa
sisältävän .txt-päätteisen tiedoston.
Esteet pelissä
Pelissä este on siis liitetty toimintoon (Action). Toiminnossa on
lisäksi esteeseen kuuluva selostus (BeforeMessage), joka tulostuu
ennen estettä. Toiminnoista huolehtiva ohjelma actexe1 kutsuu
html-muotoisen este-sivun muodostavaa ohjelmaa ObstacleName
(esim. fill-in-blank.pl) Parametreina annetaan: UserID, RoundNumber,
ActionID, BeforeDescription, ObstascleClass ja ObstacleOptions.
Este-moduli (ObstacleClassObstacle*) tekee html-sivun määrittelyt,
tulostaa esteen selostuksen ja muodostaa annettujen parametrien
mukaisen esteen, joko generoimalla itse sen, tai lataamalla
annetun nimisen valmiin instanssin esteen tominnasta
riippuen. Este liitetään html-sivuun.
Sivuun liitetään Check the Answers -painike, joka
kutsuu tehtävän tarkistusrutiinia check_ObstacleClass* sekä
Cancel-painike, jolla voidaan keskeyttää tehtävän ratkaiseminen ja
palata edelliselle sivulle.
Kun esimerkkitapauksen täyttötehtävä on saatu valmiiksi, pelaaja
voi painaa Check the Answers -painiketta, joka käynnistää vastaukset
tarkastavan rutiinin check_ObstacleClass*. Parametreina ovat UserID
RoundNumber ja ActionID.
Pelaaja voi myös keskeyttää tehtävän ratkaisemisen Cancel-painikkeesta
ja palata edelliselle sivulle. Painikkeesta kutsutaan rutiinia
loccrea. Parametrina ovat UseID ja RoundNumber.
Vastausten tarkastus rutiinissa pelaajan antamia vastauksia verraraan
Obstacle Editorin tekemään vastaustiedostoon, jossa on .answer
tunniste. Vastaustiedostossa oikeat vastaukset ovat allekkain. Jos on
useampi oikea vastaus, niin ne ovat samalla rivillä pilkulla
erotettuna. Pelaajan tarvitsee suorittaa kukin este vain kerran.
Jos vastaukset olivat oikein, kutsutaan rutiinia actexe2, joka
suorittaa tehtävän, johon este oli liitetty. Parametreiksi annetaan:
UserID, ActionID ja RoundNumber.
Jos pelaaja ei vastannut riittävän
hyvin, eikä läpäise estettä kutsutaan rutiinia kutsutaan rutiinia
loccrea. Parametrina ovat UseID ja RoundNumber.
Toiminnot ja rakenne opettajan käyttöliittymässä
1. Esteen muokkaus ja luonti.
1.1. Haluttaessa luoda uusi este:
1.1.1. Valitaan toiminto Create a new Obstacle.
1.1.2. Valitaan esteen luokka (ObstacleClass) valinta-ikkunasta.
1.1.3. Esteen oma editori käynnistyy. Editori on esteen binäärihakemistossa
/cgi-bin/ObstacleClass/. Editorin nimenä on edit_ObstacleClass*.
1.1.4. Kirjoitetaan esteelle nimi.
1.2. Editoitaessa vanhaa estettä:
1.2.1. Valitaan toiminto Open an Obstacle for Editing.
1.2.2. Select Obstacle Class, valitaan esteen luokka valintaikkunasta.
1.2.3. Select the Source File, valitaan editoitava este.
1.2.4. Esteen editori käynnistyy, esteellä on oletusarvona valittu
nimi. Vanha este ladataan levyltä editoriin
.
2. Kun este on editoitu valmiiksi, painetaan Save the Obstacle -painiketta, jolloin
3. Editori muokkaa annettujen tietojen mukaisen esteen. Este on html-muotoinen
template-tiedosto, joka huolehtii tarpeellisten rutiinien ajamisesta.
4. Esteestä tallennetaan levylle erikseen myös
käyttäjän antamat määrittelyt / tekstit, jotta esteen
muokkaaminen olisi mahdollista myöhemmin.
5. Esteen mahdollisesti tarvitsemat sisäiset tiedostot talletetaan
levylle.
6. Kaikki esteen muodostamat tiedostot talletetaan esteen omaan hakemistoon,
esimerkiksi ../data/obstacles/fill-in-blank/.
7. Käyttäjä voi katso muodostettua estettä toiminnolla
Show Obstacle.
8. Käyttäjä voi poistaa luomansa esteen toiminnolla Delete
Obstacle.
9. Uuden obstaclen voi valita toiminnolla Open an Obstacle
Aukkotehtävä-esteen
(Fill-in-blank Obstacle) luonti ja rakenne.
1. Editori käynnistyy
2. Kirjoitetaan esteelle nimi teksti-ikkunaan.
3. Aukkotehtävän teksti voidaan antaa seuraavilla tavoilla:
3.1. Teksti voidaan kirjoittaa suoraan ruudulle avautuvaan teksti-editoriin.
3.2. Kopioda haluttu teksti leikepöydälle ja sieltä
editoriin.
4. Kirjoittaja ympäröi pelaajalta piiloon jääviksi
tarkoitetut sanat hakasuluilla.
5. Hakasulkuihin on mahdollista laittaa tyhjiä vastauksia tai useampiakin
oikeita vastauksia, jolloin ne erotetaan toisistaan pilkulla.
6. Teksti voi olla joko pelkässä tekstimuodossa tai html-muodossa,
jolloin tehtävään voidaan liittää esimerkiksi kuvia
tai muita tehokeinoja.
7. Kun este on editoitu valmiiksi, painetaan Save the Obstacle -painiketta, jolloin
8. Editori muokkaa annettujen tietojen mukaisen
täyttötehtäväesteen. Este on
html-muotoinen pelin sivulle liitettävä template-tiedosto, joka
sisältää:
8.1. Täyttötehtävän tekstin ja tyhjät html-formeit
pelaajan vastauksia varten.
8.2. Check the Answers -painikkeen, joka kutsuu tehtävän
tarkistusrutiinia check_fill-in-blank.pl.
9. Tehdään .answer tunnisteinen tiedosto, jossa oikeat
vastaukset ovat allekkain hakasuluilla ympäröityinä. Jos on
useampi oikea vastaus, niin ne ovat samalla rivillä pilkulla erotettuna.
Tyhjä vastaus on muodossa [-]. Check_fill-in-blank.pl. vertaa pelaajan antamia
vastauksia tähän tiedostoon.
10. Käyttäjän kirjoittama teksti talletetaan myös
alkuperäisessä muodossa .txt tunnisteiseen tiedostoon, jotta
tehtävän editoiminen jälkikäteen olisi mahdollista.
11. Kaikki esteen muodostamat tiedostot talletetaan esteen omaan hakemistoon
../data/obstacles/fill-in-blank/.
Esteen toiminta pelin aikana
1. Jos toimintoon on liitetty este, niin actexe1 käynnistää
obstacle-modulin ObstacleName. Parametreina annetaan: UserID, RoundNumber, ObstacleClass, ObstacleInstance, ObstacleOptions, ActionID ja BeforeDescription.
2. ObstacleName muodostaa estesivun seuraavien tietojen avulla:
2.1. Parametrina saadusta tehtävänkuvaksesta BeforeDescription.
2.2. ObstacleOptions objektissa olevien parametrin mukaan.
2.3. ../data/obstacles/ hakemistosta luetusta esteen instanssista ObstacleInstance.
3. ObstacleName muodostaa tehtäväsivulle seuraavia painikkeita:
3.1. keskeytyspainike(Return), josta voidaan palata edelliselle sivulle.
Painiketta painettaessa ajetaan rutiini loccrea. Se saa parametriksi
UserID:n ja RoundNumberin.
3.2. E-Mail to Authors -painike lähettää postia ohjelman
tekijöille.
3.3. Help on Playing vie pelin ohjesivuille.
3.4. Dictionaries & other useful links -painike vie sivulle, jossa on mm.
elektronisia sanakirjoja ja muita kieliaiheisia sivuja, jotka voivat auttaa mm.
tehtävien ratkaisussa.
4. Template-sivulla on määritelty esteen tarvitsemat rutiinit, kuten
vastausten tarkistaminen. Esimerkiksi aukkotehtävässä kutsutaan
rutiinia check_ObstacleClass*, kun käyttäjä on saanut
tehtävänsä valmiiksi.
5. Paluu esteestä
5.1. Este-moduli (tai jokin sen alirutiineista) kutsuu actexe2:ta, kun
pelaaja on ratkaissut tehtävän ja siten saa suorittaa toiminnon.
sDoAction.pl saa parametreiksi UserID:n, RoundNumberin ja ActionID:n.
5.2. Este-moduli (tai jokin sen alirutiineista) kutsuu rutiinia loccrea,
jos pelaaja ei ole saanut suoritettua tehtävää riittävän hyvin.
Parametrina on UserID, RoundNumber.