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