Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Hedelmäpeli

Chaosworm [04.09.2007 18:16:27]

#

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

Chaosworm [04.09.2007 18:17:25]

#

Eli kommentteja vaan tulemaan, mikäli tämä läpäisee vaatimukset.

moptim [08.09.2007 19:44:54]

#

Ai-ai-ai, goto goto goto goto goto. Sisentäny sentään oot.

Sami [16.09.2007 12:23:59]

#

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.

Vastaus

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

Tietoa sivustosta