Iltaa kaikille,
Olen uusi ohjelmointiputkan jäsen ja ajattelin aloittaa heti ensimmäisillä kysymyksilläni, että mikä on tekstiseikkailussa (QBasic) paras tapa järjestää tavarat, eli miten voi tehdä niin että yhdessä huoneessa on 1kpl tavaroita, poimittuasi sen sen menee inventoryysi ja sen jälkeen sitä ei enää ole kyseisessä huoneessa.
Alla on pelin koodi - mikäli joku osaisi korjata pelin ja saisisi sen toimimaan olisin ikionnellinen.
DIM vastaus AS STRING
DIM pNIMI AS STRING
DIM tpmViesti AS STRING
GOTO ALKURUUTU
'-------------------------------------------------------------------------------
ALKURUUTU:
COLOR 15, 0
Vaihtoehtoja = 5
CLS
PRINT "*****************************************************************************************"
PRINT "* HAUNTED CASTLE - Version 0.1 Beta *"
PRINT "*****************************************************************************************"
PRINT ""
PRINT ""
PRINT
PRINT 1. New Game
PRINT 2. Help
PRINT 3. Story
PRINT 4. Exit
PRINT 5. Credits
IF Vaihtoehtoja THEN
INPUT "?", vastaus
numero = VAL(vastaus)
IF numero <= 0 OR numero > Vaihtoehtoja THEN GOTO ALKURUUTU
SELECT CASE numero
CASE 1
GOTO GAME
CASE 2
GOTO HELP
CASE 3
GOTO STORY
CASE 4
END
CASE 5
GOTO CREDITS
END SELECT
ELSE
SLEEP
GOTO ALKURUUTU
END IF
'-------------------------------------------------------------------------------
BUSHES:
COLOR 15, 0
Vaihtoehtoja = 3
CLS
PRINT "You are standing at some huge and dark bushes."
PRINT ""
PRINT "What would you like to do?"
PRINT
PRINT 1. Walk straight into the bushes.
PRINT 2. Go back to the garden.
PRINT 3. Show inventory.
IF Vaihtoehtoja THEN
INPUT "?", vastaus
numero = VAL(vastaus)
IF numero <= 0 OR numero > Vaihtoehtoja THEN GOTO BUSHES
SELECT CASE numero
CASE 1
GOTO SCARED
CASE 2
GOTO GAME
CASE 3
GOSUB tpmNaytaTavarat
END SELECT
GOTO BUSHES
ELSE
SLEEP
GOTO BUSHES
END IF
'-------------------------------------------------------------------------------
CREDITS:
COLOR 15, 0
Vaihtoehtoja = 0
CLS
PRINT "Credits:"
PRINT ""
PRINT "Programming and original idea: Kim Lindqvist"
PRINT "Ideas: Samu Auranen"
PRINT " Jarkko Kiiski"
PRINT
IF Vaihtoehtoja THEN
INPUT "?", vastaus
numero = VAL(vastaus)
IF numero <= 0 OR numero > Vaihtoehtoja THEN GOTO CREDITS
SELECT CASE numero
END SELECT
GOTO CREDITS
ELSE
SLEEP
GOTO CREDITS
END IF
'-------------------------------------------------------------------------------
ENTRANCE:
COLOR 15, 0
Vaihtoehtoja = 0
CLS
PRINT "To be continued.."
PRINT
IF Vaihtoehtoja THEN
INPUT "?", vastaus
numero = VAL(vastaus)
IF numero <= 0 OR numero > Vaihtoehtoja THEN GOTO ENTRANCE
SELECT CASE numero
END SELECT
GOTO ENTRANCE
ELSE
SLEEP
GOTO ENTRANCE
END IF
'-------------------------------------------------------------------------------
FOUNTAIN:
COLOR 15, 0
Vaihtoehtoja = 3
CLS
PRINT "You start walking towards the fountain. You reach the fountain."
PRINT "The water is pitch black and slimey. You almost throw up when the smell coming from"
PRINT "the fountain reaches your nose. Something is shining brightly in the water."
PRINT ""
PRINT "What do you want to do?"
PRINT
PRINT 1. Stick your hand in the water.
PRINT 2. Walk back to the garden.
PRINT 3. Show inventory.
IF Vaihtoehtoja THEN
INPUT "?", vastaus
numero = VAL(vastaus)
IF numero <= 0 OR numero > Vaihtoehtoja THEN GOTO FOUNTAIN
SELECT CASE numero
CASE 1
invKEY = invKEY + 1
GOTO KEYS
CASE 2
GOTO GAME
CASE 3
GOSUB tpmNaytaTavarat
END SELECT
GOTO FOUNTAIN
ELSE
SLEEP
GOTO FOUNTAIN
END IF
'-------------------------------------------------------------------------------
GAME:
COLOR 15, 0
Vaihtoehtoja = 5
CLS
PRINT "You are in the castle garden. It looks quite pretty allthough"
PRINT "it is very dark and scary. A fountain is sprinkling somewhere -"
PRINT "you can hear it. You can see some bushes a bit from here. In front"
PRINT "of you you can see the huge castle. There is an enormous gate at the"
PRINT "stone wall. A torch is burning at the gate. It spreads a warm beam"
PRINT "of light into the area."
PRINT
PRINT 1. Walk to the bushes.
PRINT 2. Start walking towards the fountain.
PRINT 3. Walk to the castle gates.
PRINT 4. Jump into your car and drive away.
PRINT 5. Show inventory
IF Vaihtoehtoja THEN
INPUT "?", vastaus
numero = VAL(vastaus)
IF numero <= 0 OR numero > Vaihtoehtoja THEN GOTO GAME
SELECT CASE numero
CASE 1
GOTO BUSHES
CASE 2
GOTO FOUNTAIN
CASE 3
GOTO GATES
CASE 4
SLEEP 3
END
CASE 5
GOSUB tpmNaytaTavarat
END SELECT
GOTO GAME
ELSE
SLEEP
GOTO GAME
END IF
'-------------------------------------------------------------------------------
GATES:
COLOR 15, 0
Vaihtoehtoja = 4
CLS
PRINT "You walk towars the castle gates. They are dark brown coloured."
PRINT "You see a torch a little above your head. You also see a hole"
PRINT "in the door. There are two lit torches burning at both sides of the gates."
PRINT ""
PRINT "What would you like to do?"
PRINT
PRINT 1. Stick your fingers into the tiny hole.
PRINT 2. Open door with the keys.
PRINT 3. Walk back to the garden.
PRINT 4. Show inventory
IF Vaihtoehtoja THEN
INPUT "?", vastaus
numero = VAL(vastaus)
IF numero <= 0 OR numero > Vaihtoehtoja THEN GOTO GATES
SELECT CASE numero
CASE 1
GOTO HOLE
CASE 2
CASE 3
GOTO GAME
CASE 4
GOSUB tpmNaytaTavarat
END SELECT
GOTO GATES
ELSE
SLEEP
GOTO GATES
END IF
'-------------------------------------------------------------------------------
HELP:
COLOR 15, 0
Vaihtoehtoja = 1
CLS
PRINT "This is a text based adventure game. You can control the character by giving the "
PRINT "numbers to the actions. These actions are located on your screen."
PRINT
PRINT 1. Start Playing
IF Vaihtoehtoja THEN
INPUT "?", vastaus
numero = VAL(vastaus)
IF numero <= 0 OR numero > Vaihtoehtoja THEN GOTO HELP
SELECT CASE numero
CASE 1
GOTO ALKURUUTU
END SELECT
ELSE
SLEEP
GOTO HELP
END IF
'-------------------------------------------------------------------------------
HOLE:
COLOR 15, 0
Vaihtoehtoja = 1
CLS
PRINT "You stick your fingers deep into the hole. Suddenly a stream of"
PRINT "pain runs through your body - then everything is back to normal"
PRINT "you pull your finger back out. You look at your hand and notice that"
PRINT "a finger is missing. Immideatly when you start screaming in your"
PRINT "pains the door slams wide open. A demon steps out and slashes you into"
PRINT "a little pile of bone and flesh. You are dead. Please try again."
PRINT
PRINT 1. Try again.
IF Vaihtoehtoja THEN
INPUT "?", vastaus
numero = VAL(vastaus)
IF numero <= 0 OR numero > Vaihtoehtoja THEN GOTO HOLE
SELECT CASE numero
CASE 1
SLEEP 3
GOTO ALKURUUTU
END SELECT
ELSE
SLEEP
GOTO HOLE
END IF
'-------------------------------------------------------------------------------
KEYS:
COLOR 15, 0
Vaihtoehtoja = 2
CLS
PRINT "You now got a shiny golden key!"
PRINT ""
PRINT "What would you like to do?"
PRINT
PRINT 1. Go back.
PRINT 2. Show inventory.
IF Vaihtoehtoja THEN
INPUT "?", vastaus
numero = VAL(vastaus)
IF numero <= 0 OR numero > Vaihtoehtoja THEN GOTO KEYS
SELECT CASE numero
CASE 1
GOTO FOUNTAIN
CASE 2
GOSUB tpmNaytaTavarat
END SELECT
GOTO KEYS
ELSE
SLEEP
GOTO KEYS
END IF
'-------------------------------------------------------------------------------
SCARED:
COLOR 15, 0
Vaihtoehtoja = 1
CLS
PRINT "A huge demon attacks you in the darkness! It rips you into small slices! At last there is"
PRINT "only a tiny pile of bone and flesh left on the ground. Oh dear, you seem to have gotten"
PRINT "yourself killed."
PRINT
PRINT 1. Try again.
IF Vaihtoehtoja THEN
INPUT "?", vastaus
numero = VAL(vastaus)
IF numero <= 0 OR numero > Vaihtoehtoja THEN GOTO SCARED
SELECT CASE numero
CASE 1
GOTO ALKURUUTU
END SELECT
ELSE
SLEEP
GOTO SCARED
END IF
'-------------------------------------------------------------------------------
STORY:
COLOR 15, 0
Vaihtoehtoja = 1
CLS
PRINT "Your grandfathers father has recently died at a high age."
PRINT "During his long life he became famous and rich - and insane."
PRINT "He had a huge castle in Transsylvania.Transsylvania is especially "
PRINT "known for all those spooky tales,demonic inhabitants and other "
PRINT "wierd and fascinating things. The old castle built in the 16th "
PRINT "century is located deep inside a forest far away from civilization."
PRINT
PRINT 1. Start playing
IF Vaihtoehtoja THEN
INPUT "?", vastaus
numero = VAL(vastaus)
IF numero <= 0 OR numero > Vaihtoehtoja THEN GOTO STORY
SELECT CASE numero
CASE 1
GOTO ALKURUUTU
END SELECT
ELSE
SLEEP
GOTO STORY
END IF
'-------------------------------------------------------------------------------
UNLOCKED:
COLOR 15, 0
Vaihtoehtoja = 3
CLS
PRINT "The gates are now unlocked."
PRINT ""
PRINT "What would you like to do?"
PRINT
PRINT 1. Step inside.
PRINT 2. Show inventory.
PRINT 3. Quit.
IF Vaihtoehtoja THEN
INPUT "?", vastaus
numero = VAL(vastaus)
IF numero <= 0 OR numero > Vaihtoehtoja THEN GOTO UNLOCKED
SELECT CASE numero
CASE 1
GOTO ENTRANCE
CASE 2
GOSUB tpmNaytaTavarat
CASE 3
END
END SELECT
ELSE
SLEEP
GOTO UNLOCKED
END IF
END.Kiitos.
Ihan offtopicina, plussat hyvästä otsikosta sekä asiallisesti ja kohteliaasti muotoillusta viestistä. Tervetuloa putkaan :)
Edit: paitsi meinasin myös kirjottaa, että liian usein uudet keskustelijat pasteevat tänne virityksensä ilman kooditageja ja kysyvät MIKÄ TÄSSÄ ON VIKANA!!11 :P
Edit2: no tulihan ne kooditagit sieltä :)
Kiitos, PS. Käytin kyseistä ohjelmaa tehtäessa apuna Tekstipeli MAKER- editoria, vaikka olisin samaan Qbasicillä pystynyt - tosin tuntikaupalla hitaammassa ajassa.
Eli idea pelissä olisi tähän asti se, että ensin etsittäisiin avain suihkulähteestä, jonka jälkeen sillä voisi avata oven.
Tee vaikka taulukko, jossa on kaikki peliin kuuluvat tavarat. Jokaisen tavaran yhteydessä on tieto, missä huoneessa se on tai onko pelaaja jo saanut sen. Oma muuttujatyyppi (TYPE-määrityksellä) soveltuu tämmöiseen taulukkoon hyvin. Pelin laajentamisen kannalta olisi kyllä parempi, jos tapahtumat eivät olisi suoraan koodissa vaan ne ladattaisiin erillisestä tiedostosta. Nyt koodi paisuu suotta ja on täynnä samanlaisia osuuksia.
Huomenta,
Anteeksi että olen näin vajaaälyinen, mutta tämä on toinen Qbasic ohjelmani, silti olen siinä aika pitkälle päässyt, mutta en valitettavasti ymmärrä yhtään mitään taulukosta. :'( Voisikohan joku neuvoa?
Kiitos.
Dareon kirjoitti:
Anteeksi että olen näin vajaaälyinen
Tuskimpa... :)
Dareon kirjoitti:
mutta en valitettavasti ymmärrä yhtään mitään taulukosta. :'( Voisikohan joku neuvoa?
Ensihätään voisit lukea vaikkapa putkan oppaat-osion kolme QB opasta 1 2 3
Edit:
Taulukot ovat vain ryhmä samanlaisia muuttujia.
DIM Taulukko(10) AS INTEGER 'Luodaan yksitoista(0,1,2,3...9,10) INTEGER-tyypin muuttujaa, jotka ovat taulukossa.
'Taulukkoa käytetään sitten tähän tapaan Taulukko(4) = 8 'Asetetaan taulukon viidennen alkion arvoksi 8 PRINT Taulukko(4) 'Tulostetaan Taulukon viides alkio (Tulostaa: 8) PRINT Taulukko(2) 'Tulostetaan Taulukon kolmas alkio (Tulostaa: 0, sillä emme ole asettaneet taulukon kolmannelle alkiolle arvoa)
Lisää taulukoiden luomisesta ja käytöstä löytyy yllämainituista oppaista.
Huomenta taas,
Olen kyllä lukenut kyseiset oppaat, mutta niissähän ei mainita niin erityisesti taulukoista. Tarvitsisin myös sillaisen mahdollisuuden, että tavarat voisi esim. tiputtaa huoneeseen ja huonetta katsottaessa, kuvaus lisäisi mukaan tavaran, tämä alkaa mennä jo niin sotkuiseksi, että ehkä olisi parempi hankkia visual basic.
...tai java.
Dareon kirjoitti:
tämä alkaa mennä jo niin sotkuiseksi, että ehkä olisi parempi hankkia visual basic.
Ei Visual Basiciin siirtyminen kyllä tässä asiassa mitään auta. Parempi olisi, jos koodaisit alusta alkaen itse tuon, ja jättäisit pois kaikki Tekstipeli MAKERit sun muut, sillä näyttää syntyvän aika huonoa koodia minun mielestäni. Tuosta Gaxxin koodista voit ottaa mallia taulukoiden käyttöön.
Jeps, taidanpa tehdä ensin jotain vähän yksinkertaisempaa ennen kuin hyppään suoraan tällaisen projektin kimppuun, muuten mitä käytännön hyötyä tuosta taulukosta sitten olisi? Pitäisikö minun tehdä huoneetkin tuolla taulukkomuodolla, jotta saisin tavarat jotenkin heitettyä huoneeseen.. huoh.. taidan aloittaa todellakin jostain aivan perusohjelmasta.
Kiitos kuitenkin kaikille!
Dareon kirjoitti:
muuten mitä käytännön hyötyä tuosta taulukosta sitten olisi?
Pieni esimerkki taulukoiden kätevyydestä:
Jos sinun pitää tarkistaa, mitkä joistakin tietyistä muuttujista ovat arvoltaan esimerkiksi 4, voit tehdä tämän yksinkertaisesti, jos nämä muuttujat ovat kaikki saman taulukon alkioita.
Esim:
DIM Arvot(100) As INTEGER
DIM C AS INTEGER
DIM ArvojenMaara AS INTEGER
Arvot(1) = 5
Arvot(4) = 4
Arvot(68) = 13
Arvot(98) = 4
Arvot(99) = 8
FOR C = 0 TO 100
IF Arvot(C) = 4 THEN 'Jos muuttujan arvo on 4
ArvojenMaara = ArvojenMaara + 1 'Kasvatetaan löydettyjen arvojen määrää yhdellä
END IF
NEXT C
PRINT ArvojenMaara 'Tulostaa: 2Saattaa tuntua hieman teennäiseltä esimerkiltä, mutta en keksinyt tähän hätään parempaakaan.
Tuollainen ei olisi mahdollista tehdä, jos käyttäisit vain muuttujia.
Moniulotteiset taulukot ovat käteviä myös karttojen/kenttien tallennukseen.
Taulukkoja käyttämällä riittää, että kirjoitat tietyn koodinpätkän kerran. Muuttujien kanssa jokaista muuttujaa kohden pitää kirjoittaa oma koodi. Jos vaikka haluat listata pelaajalla olevat tavarat, taulukkototeutus menisi suurinpiirtein näin:
FOR i% = 0 to tmaara%
IF tavarat(i%).pelaajalla THEN
PRINT "Pelaajalla on " + tavarat(i%).nimi
END IF
NEXTMuuttujilla koodia pitäisi täydentää jatkuvasti, kun peliin tulee uusia tavaroita, ja se venyisi vaikka kuinka pitkäksi.
IF avain.pelaajalla THEN
PRINT "Pelaajalla on avain"
END IF
IF kyna.pelaajalla THEN
PRINT "Pelaajalla on kynä"
END IF
IF pyssy.pelaajalla THEN
PRINT "Pelaajalla on pyssy"
END IF
' jne.mikeful kirjoitti:
Moniulotteiset taulukot ovat käteviä myös karttojen/kenttien tallennukseen.
Miten niitä kenttiä/karttoja voi tehdä taulukkoon?
No kätevin tapa on lukea tiedostosta, jossa ne on tallennettu jotenkin sopivasti, esim:
0001100 0011020 0011000 0110200 0110000
Tuossa voisi olla vaikka 0 = ruohoa, 1 = vettä ja 2 = puu
Blaze kirjoitti:
No kätevin tapa on lukea tiedostosta, jossa ne on tallennettu jotenkin sopivasti, esim:
0001100 0011020 0011000 0110200 0110000
Paitsi että et saa kuin 9:än esinettä :) ja sitten tuloo vaikeemmaksi tai siis vaikeammaksi ja vaikemmaksi miten sen nyt sitten ottaa ..
No tuo nyt oli esimerkki. Ajattelin, että pointti selviäisi paremmin tuollaisen yksinkertaisen esimerkin kautta. Saman voi toki vaikka tehdä binäärimoodissa, jolloin saa 256 erilaista palikkaa. Tai sitten tallentaa useammalla numerolla kaikki luvut, jolloin taivas on rajana.
qwauk kirjoitti:
Paitsi että et saa kuin 9:än esinettä :) ja sitten tuloo vaikeemmaksi tai siis vaikeammaksi ja vaikemmaksi miten sen nyt sitten ottaa ..
No saahan Integer taulukkoon niin monta eri palikkaa (arvoa) kun Integer muuttuja antaa myöten (en muista nyt mikä oli suurin luku).
eli siis yks taulukon solu vastaa yhtä ruutua kentällä:
Yhtä solua voidaan ajatella myös yhdeksi erilliseksi muuttujaksi.
Esim:
Dim mappi(10,10) as Integer
Mappi(0,0) = 32000
Mappi(0,1) = 0
Mappi(0,2) = -9
...
Mappi(10,10)=59
For x = 0 to 10
For y = 0 to 10
if mappi(x,y) = 0 then
Piirretään joku esine
end if
next y
next xEt semmosta
[muoks] Itse pää asia jäi ;D
Niin siis tiedostosta ladattaessa tai tallennettaessa on kaksi vaihtoehtoa (tai on vaarmaan useempikin mut..). joko jokainen solu ladataan ja tallennetaan omalla Input #1, mappi(x,y)/Print #1, mappi(x,y) komennoilla for next silmukassa. (tiedoston kaksi ekaa "kenttää" voisi olla vaikka kartan koko). Tai sit tallettaa pötköön käyttäen jotain välimerkkiä. (mut tässä tapauksessa joutuu käyttämään parseria)
Aihe on jo aika vanha, joten et voi enää vastata siihen.