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.

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: 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ää: 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:

3. ObstacleName muodostaa tehtäväsivulle seuraavia painikkeita:

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ä