Ennen pelin testaamista, sinun tulee tehdä tyhjä tekstitiedosto, jonka nimi on SCORES.txt.
Tämä siis on ensimmäinen pelini joka ei ole tekstiseikkailupeli. Olen yrittänyt kommentoida mahdollisimman huolellisesti, jotta aivan totaaliset aloittelijatkin ymmärtäisivät koodivinkistäni jotakin. Totaalisia aloittelijoita varten vinkki onkin, sillä siinä käsitellään todella yksinkertaisia asioita, olen yrittänyt saada mahdollisimman monia tapoja tehdä asioita.
'Hedelmäpeli by Chaosworm. Melko yksinkertainen, mutta ensimmäinen
'"non-tekstiseikkailu"-pelini, jonka olen ohjelmoinut alusta alkaen itse.
'Olenhan tehnyt Pelien Parhaat-kirjan QB peleistä paljon vähemmän bugiset,
'mutta se ei ole sama asia. Mutta nyt asiaan:
RANDOMIZE TIMER
alkuruutu: 'Subin nimi.
CLS 'Tyhjentää ruudun.
LOCATE 3, 10 'Kun printataan, niin printataan kohtaan 3, 10
COLOR 9 'Väri = sininen, taustaväri ei vaihdu
PRINT "Hedelmäpeli by Chaosworm." 'Nyt printataan.
LOCATE 5, 10
PRINT "Painaos 1, jos haluat informaatiota."
LOCATE 6, 10
PRINT "Painaos Välilyönti, jos haluat poistua."
LOCATE 8, 10
PRINT "Jos haluat pelata, niin ole hyvä, ja paina Entteriä."
ykkos = 0 'asetetaan ensimmäisen rullan merkki nollaan.
kakkos = 0 'asetetaan toisenkin rullan merkki nollaan.
kolmos = 0 'asetetaan kolmas rulla nollaan.
Panos = 1 'panos ykköseksi
alku2:
a$ = INKEY$ 'Muuttuja a$ ottaa arvonsa napin painalluksesta.
IF a$ = "1" THEN GOSUB Info 'Eli siis jos painettiin 1, niin INKEY$ on 1, eli a$ on 1, mikä tarkoittaa, että mennään subiin Info.
IF a$ = " " THEN END 'Välilyöntiä painettaessa lopetetaan ohjelma.
IF a$ = CHR$(13) THEN GOSUB Peli 'jos painetaan Enteriä, niin mennään subiin Peli.
GOTO alku2
Info:
LOCATE 3, 10
COLOR 15, 9 'Väri = Valkoinen, Taustaväri = Sininen
CLS
PRINT "Kun peli on arponut ensimmäiset hedelmät, niin"
LOCATE 4, 10
PRINT "sinun täytyy valita, mitkä niistä lukitset."
LOCATE 5, 10
PRINT "Tämä onnistuu nämisköillä 1,2 ja 3."
LOCATE 6, 10
PRINT "Ennen pelin alkua, sinun täytyy kirjoittaa haluttu summa."
LOCATE 7, 10
PRINT "Tämä summa tarkoittaa, kuinka paljon laitat rahaa koneeseen."
LOCATE 8, 10
PRINT "Panosta voi vaihtaa (jos peli ei ole käynnissä) näppäimestä P."
LOCATE 9, 10
PRINT "Rahat saa vaihdettua pisteisiin painamalla R. Tällöin peli loppuu."
LOCATE 11, 10
PRINT " - Paina Välilyöntiä, että näkisit seuraavan sivun - "
SLEEP 'Odottakaamme, kunnes jotain nämiskää painetaan. Ei tarvitse olla välilyönti.
CLS
LOCATE 3, 10
PRINT "Voittotaulukko"
LOCATE 5, 1
PRINT "* * * = Panos * 15" 'Tässä tilanteessa printataan teksti
PRINT "* * ? = Panos * 4" 'seuraavan tyhjän rivin kohtaan 1.
PRINT "C C C = Panos * 10" 'Eli siis jos teksti on rivin reunassa, LOCATE-komennon voi jättää pois.
PRINT "C C ? = Panos * 3"
PRINT "% % % = Panos * 10"
PRINT "& & & = Panos * 10"
PRINT "# # # = Panos * 5"
PRINT
PRINT "Paina Väli, niin peli loppuu."
SLEEP
COLOR 15, 0 'Väri = Valkoinen, Taustaväri = Musta
CLS
END
Peli:
CLS
COLOR 12
PRINT "Siulla on 30 euroa. Paljon tunget rahaa koneeseen?"
INPUT a 'Ohjelma kysyy lukua, jonka käyttäjä näpyttelee, ja tämän jälkeen painetaan Enter.
IF a > 30 THEN CLS : PRINT "Etpäs voikaan laittaa noin paljon rahaa kun siulla ei oo!": SLEEP: GOTO Peli 'Komennot voi erottaa toisistaan kaksoispisteellä, ja kirjoittaa ne samalle riville.
IF a < 1 THEN CLS : PRINT "Eipäs laiteta liian vähän rahaa eihän kone toimi ilman!": SLEEP: GOTO Peli
GOTO PeliII
PeliII:
CLS
COLOR 4
PRINT "Tungit "; a; " euroa koneeseen!" 'Näytetään muuttuja "a" tekstin sisällä.
SLEEP 3 'Ootellaan kunnekka kolme sekuntia kuluu, tahi painetaan jotain näppäintä.
GOTO Kone 'Mennään koneeseen sisälle???
Kone:
CLS
luk1tus = 0
luk2tus = 0
luk3tus = 0
Voitto = 0
COLOR 15
PRINT " Rahat: "; a; " Panos: "; Panos; " "
PRINT " _______ _______ _______"
PRINT " - - - - - -"
PRINT " - - - - - - "
PRINT " - - - - - -"
PRINT " - - - - - -"
PRINT " - - - - - -"
PRINT " - - - - - -"
PRINT " _ _ _ _ _ _"
PRINT " ________ ________ ________"
PRINT
PRINT "Paina A kun haluat arpoa"
PRINT "Paina P jos haluat vaihtaa panosta"
PRINT "Paina R jos haluat lopettaa"
PRINT "Painamisen jäkeen paina vielä enter"
INPUT a$
IF a$ = "A" THEN a = (a - Panos): GOTO arvo
IF a$ = "P" THEN GOTO Panos
IF a$ = "R" THEN GOTO Savetus
GOTO Kone
arvo:
SOUND 70, 1 'Hienot ääniefektit
SOUND 60, 1
SOUND 50, 1
SOUND 80, 1
SOUND 70, 1
SOUND 60, 1
SOUND 50, 1
SOUND 80, 1
SOUND 70, 1
SOUND 60, 1
SOUND 50, 1
SOUND 80, 1
ykkos = INT(RND * 5) 'Arvotaan muuttuja ykkos. Tulos pyöristyy kokonaisluvuksi.
kakkos = INT(RND * 5) 'Arvan väli on 0-4.
kolmos = INT(RND * 5)
IF ykkos = 0 THEN 'Nyt jätetään tapahtumat seuraaville riveille,
LOCATE 5, 6
PRINT "*"
END IF 'kunnekka looppi lopetetaan.
IF ykkos = 1 THEN
LOCATE 5, 6
PRINT "C"
END IF
IF ykkos = 2 THEN
LOCATE 5, 6
PRINT "%"
END IF
IF ykkos = 3 THEN
LOCATE 5, 6
PRINT "&"
END IF
IF ykkos = 4 THEN
LOCATE 5, 6
PRINT "#"
END IF 'ensimmäiseen rullaan on nyt piirretty oikeanlainen merkki.
IF kakkos = 0 THEN
LOCATE 5, 22
PRINT "*"
END IF
IF kakkos = 1 THEN
LOCATE 5, 22
PRINT "C"
END IF
IF kakkos = 2 THEN
LOCATE 5, 22
PRINT "%"
END IF
IF kakkos = 3 THEN
LOCATE 5, 22
PRINT "&"
END IF
IF kakkos = 4 THEN
LOCATE 5, 22
PRINT "#"
END IF 'Huh huh. Vielä viimeinen rulla!
IF kolmos = 0 THEN
LOCATE 5, 39
PRINT "*"
END IF
IF kolmos = 1 THEN
LOCATE 5, 39
PRINT "C"
END IF
IF kolmos = 2 THEN
LOCATE 5, 39
PRINT "%"
END IF
IF kolmos = 3 THEN
LOCATE 5, 39
PRINT "&"
END IF
IF kolmos = 4 THEN
LOCATE 5, 37
PRINT "#"
END IF 'JES! Piirtämys on valmis!
'nyt tulee lukitseminen!!!
LOCATE 11, 1
PRINT "Paina enter kun lukitus on valmis."
PRINT " 1 2 3"
lukitse:
a$ = INKEY$
IF a$ = "1" THEN luk1tus = 1
IF a$ = "2" THEN luk2tus = 1
IF a$ = "3" THEN luk3tus = 1
IF a$ = CHR$(13) THEN GOTO arpa2
GOTO lukitse
arpa2:
IF luk1tus = 0 THEN ykkos = INT(RND * 5)
IF luk2tus = 0 THEN kakkos = INT(RND * 5)
IF luk3tus = 0 THEN kolmos = INT(RND * 5)
SOUND 70, 1 'Hienot ääniefektit
SOUND 60, 1
SOUND 50, 1
SOUND 80, 1
SOUND 70, 1
SOUND 60, 1
SOUND 50, 1
SOUND 80, 1
SOUND 70, 1
SOUND 60, 1
SOUND 50, 1
SOUND 80, 1
IF ykkos = 0 THEN 'Nyt jätetään tapahtumat seuraaville riveille,
LOCATE 5, 6
PRINT "*"
END IF 'kunnekka looppi lopetetaan.
IF ykkos = 1 THEN
LOCATE 5, 6
PRINT "C"
END IF
IF ykkos = 2 THEN
LOCATE 5, 6
PRINT "%"
END IF
IF ykkos = 3 THEN
LOCATE 5, 6
PRINT "&"
END IF
IF ykkos = 4 THEN
LOCATE 5, 6
PRINT "#"
END IF 'ensimmäiseen rullaan on nyt piirretty oikeanlainen merkki.
IF kakkos = 0 THEN
LOCATE 5, 22
PRINT "*"
END IF
IF kakkos = 1 THEN
LOCATE 5, 22
PRINT "C"
END IF
IF kakkos = 2 THEN
LOCATE 5, 22
PRINT "%"
END IF
IF kakkos = 3 THEN
LOCATE 5, 22
PRINT "&"
END IF
IF kakkos = 4 THEN
LOCATE 5, 22
PRINT "#"
END IF 'Huh huh. Vielä viimeinen rulla!
IF kolmos = 0 THEN
LOCATE 5, 39
PRINT "*"
END IF
IF kolmos = 1 THEN
LOCATE 5, 39
PRINT "C"
END IF
IF kolmos = 2 THEN
LOCATE 5, 39
PRINT "%"
END IF
IF kolmos = 3 THEN
LOCATE 5, 39
PRINT "&"
END IF
IF kolmos = 4 THEN
LOCATE 5, 37
PRINT "#"
END IF 'JES! Piirtämys on valmis!
'copypastetin edellisen piirroskoodin.
SLEEP
Voitto:
CLS
IF ykkos = 0 AND kakkos = 0 AND kolmos = 0 THEN Voitto = Panos * 15 'AND- komento tarkoittaa, että IF täyttyy, jos sekä ANDia edeltävä että jäljentävä ehto täyttyvät.
IF ykkos = 0 AND kakkos = 0 AND kolmos > 0 THEN Voitto = Panos * 4
IF ykkos > 0 AND kakkos = 0 AND kolmos = 0 THEN Voitto = Panos * 4
IF ykkos = 0 AND kakkos > 0 AND kolmos = 0 THEN Voitto = Panos * 4
IF ykkos = 1 AND kakkos = 1 AND kolmos = 1 THEN Voitto = Panos * 10
IF ykkos = 1 AND kakkos = 1 AND kolmos > 1 THEN Voitto = Panos * 3
IF ykkos = 1 AND kakkos = 1 AND kolmos < 1 THEN Voitto = Panos * 3
IF ykkos > 1 AND kakkos = 1 AND kolmos = 1 THEN Voitto = Panos * 3
IF ykkos < 1 AND kakkos = 1 AND kolmos = 1 THEN Voitto = Panos * 3
IF ykkos = 1 AND kakkos > 1 AND kolmos = 1 THEN Voitto = Panos * 3
IF ykkos = 1 AND kakkos < 1 AND kolmos = 1 THEN Voitto = Panos * 3
IF ykkos = 2 AND kakkos = 2 AND kolmos = 2 THEN Voitto = Panos * 10
IF ykkos = 3 AND kakkos = 3 AND kolmos = 3 THEN Voitto = Panos * 10
IF ykkos = 4 AND kakkos = 4 AND kolmos = 4 THEN Voitto = Panos * 5
IF Voitto > 0 THEN a = a + Voitto
GOTO Kone
Panos:
CLS
PRINT "Paljonka panosta?" 'ja se ei tarkoita SITÄ.
INPUT Panos
IF Panos > a THEN Panos = a
IF Panos < 1 THEN Panos = 1
GOTO Kone
Savetus:
CLS
OPEN "SCORES.txt" FOR INPUT AS #1 'Avataan SCORES.txt että sieltä voidaan sitten hakea #1
DO 'aloitetaan looppi
INPUT #1, score '#1:stä haetaan muuttuja score
LOOP UNTIL EOF(1) = -1 'tehdään looppia kunnes haettu
CLOSE #1 'suljetaan #1 eli SCORES.txt.
COLOR 9
LOCATE 3, 10
PRINT "Paras tulos: "; score; " "
IF a > score THEN
OPEN "SCORES.txt" FOR OUTPUT AS #2
PRINT #2, a
CLOSE #2
PRINT "Jee, sait parhaan tuloksen!"
SLEEP
GOTO Savetus
ELSE
SLEEP
END
END IFEli kommentteja vaan tulemaan, mikäli tämä läpäisee vaatimukset.
Ai-ai-ai, goto goto goto goto goto. Sisentäny sentään oot.
Kannattaisi opetella silmukoiden, funktioiden ja taulukoiden käyttöä. Tuokin koodi lyhenisi ja siistiytyisi huomattavasti, jos lähes toistensa kopioita olevat rivit suorittaisi joko silmukalla tai funktioilla. Lisäksi ainakin arvotut numerot (ja ehkä myös mahdolliset symbolit) olisi luonnollista lisätä taulukoihin, jolloin niiden käsittelykin helpottuisi.
Sitten vielä sellainen, että qbasicistakin löytyy vertailuoperaattori "<>", joka vertailee ovatko kaksi muuttujaa erisuuria.
Aihe on jo aika vanha, joten et voi enää vastata siihen.