Deo zbornika Učimo Javascript
Vežba: napravi tekstualnu avanturu
Napravi priču sa više završetaka na osnovu promenljivih.
Minimalni uslov je da postoji uvodni opis scene, da se korisniku ponudi više izbora, i da mu zavisno od izbora izađe odgovarajuća poruka. Bonus je da postoji više nivoa izbora.
Savet: Skretnica (switch
) je veoma zgodna za rešenje ovog problema. Za korisnički unos u početku možeš koristiti prompt
, a za prikaz poruka alert
funkciju.
Rešenje
Prosto rešenje:
const pravac = prompt('Nalaziš se u mračnoj šumi, i jure te trolovi. Sa leve strane je reka. Sa desne litica. Gore je pećina. Dole se nazire kanjon. Na koju stranu ćeš nastaviti?')
switch(pravac) {
case 'levo':
alert('Naišao si na veliku reku.')
break
case 'desno':
alert('Naišao si na liticu.')
break
case 'gore':
alert('Popeo si se do pećine')
break
case 'dole':
alert('Sišao si u kanjon')
default:
alert('Nisi izabrao pravac')
}
Rešenje sa više nivoa izbora:
const pravac = prompt('Nalaziš se u mračnoj šumi, i jure te trolovi. Sa leve strane je reka. Sa desne litica. Gore je pećina. Dole se nazire kanjon. Na koju stranu ćeš nastaviti?')
switch(pravac) {
case 'levo':
const preplivava = confirm('Naišao si na veliku reku. Da li ćeš pokušati da preplivaš?')
if (preplivava) alert('Bravo, uspešno si prešao reku.')
else alert('Mrtav si, trolovi su te uhvatili.')
break
case 'desno':
const silazi = confirm('Naišao si na liticu. Da li ćeš pokušati da siđeš?')
if (silazi) alert('Pao si niz liticu i poginuo.')
else alert('Trolovi su projurili pored tebe. Spašen si.')
break
case 'gore':
alert('Popeo si se do pećine')
break
case 'dole':
alert('Sišao si u kanjon')
default:
alert('Nisi izabrao pravac')
}
Rešenje sa više nova izbora odvojenim u funkcije:
const pravac = prompt('Nalaziš se u mračnoj šumi, i jure te trolovi. Sa leve strane je reka. Sa desne litica. Gore je pećina. Dole se nazire kanjon. Na koju stranu ćeš nastaviti?')
switch(pravac) {
case 'levo':
idiLevo()
break
case 'desno':
idiDesno()
break
case 'gore':
alert('Popeo si se do pećine')
break
case 'dole':
alert('Sišao si u kanjon')
default:
alert('Nisi izabrao pravac')
}
function idiLevo() {
const preplivava = confirm('Naišao si na veliku reku. Da li ćeš pokušati da preplivaš?')
if (preplivava) alert('Bravo, uspešno si prešao reku.')
else alert('Mrtav si, trolovi su te uhvatili.')
}
function idiDesno() {
const silazi = confirm('Naišao si na liticu. Da li ćeš pokušati da siđeš?')
if (silazi) alert('Pao si niz liticu i poginuo.')
else alert('Trolovi su projurili pored tebe. Spašen si.')
}
Kada unutar skretnice nastavimo grananje, rešenje teži da postane nepregledno. Odvajanjem grana izbora u zasebne funkcije skretnica ostaje pregledna.
Dalji rad
Ugrađene funkcije za komunikaciju sa korisnikom prompt
, alert
i confirm
se ne koriste u produkciji, jer se prozorčići koji iskaču smatraju napadnim. Umesto toga, za unos koristimo HTML input
tag, a poruke ispisujemo unutar nekog elementa na stranici.
Takođe je preporučljivo dodati sliku, i poraditi na bojama, kako bi igra izgledala kao gotov proizvod.
Tekstualne avanture su jedan od prvih žanrova igara. Sa znanjem logike i uslova koje si stekao, sada ih možeš i sam praviti.