Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB: Tavarat - Tekstiseikkailu

Sivun loppuun

Dareon [10.12.2004 21:05:07]

#

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.

ajv [10.12.2004 21:15:37]

#

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

Dareon [10.12.2004 21:31:03]

#

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.

Antti Laaksonen [10.12.2004 23:13:45]

#

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.

Dareon [11.12.2004 06:58:49]

#

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.

Gaxx [11.12.2004 09:13:32]

#

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.

Dareon [11.12.2004 09:23:49]

#

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.

SysRq868 [11.12.2004 10:18:24]

#

...tai java.

hunajavohveli [11.12.2004 10:44:49]

#

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.

Dareon [12.12.2004 09:18:52]

#

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!

Gaxx [12.12.2004 10:59:26]

#

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

Saattaa tuntua hieman teennäiseltä esimerkiltä, mutta en keksinyt tähän hätään parempaakaan.

mikeful [12.12.2004 16:59:40]

#

Tuollainen ei olisi mahdollista tehdä, jos käyttäisit vain muuttujia.
Moniulotteiset taulukot ovat käteviä myös karttojen/kenttien tallennukseen.

Antti Laaksonen [12.12.2004 19:11:13]

#

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
NEXT

Muuttujilla 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.

p-p [13.12.2004 15:38:35]

#

mikeful kirjoitti:

Moniulotteiset taulukot ovat käteviä myös karttojen/kenttien tallennukseen.

Miten niitä kenttiä/karttoja voi tehdä taulukkoon?

Blaze [13.12.2004 17:47:33]

#

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

efteri [13.12.2004 19:25:04]

#

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 ..

Blaze [13.12.2004 19:45:03]

#

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.

maka78 [13.12.2004 23:07:15]

#

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 x

Et 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)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta