Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Basic Skijump

Sivun loppuun

KemXy [14.03.2003 17:12:46]

#

Vähän aikaa sitten oli keskustelua mäkihyppypelistä. No naputtelin tässä yhtenä iltana oman versioni. Koodi on hidasta, epäselvää ja monet asiat olisi voitu tehdä paremmin. Heti alussa kannattaa säätää pelin hidastus (Synkkaus muuttuja) sopivaksi nopeuden säätämiseksi sopivaksi ja vilkkumisen vähentämiseksi(screen 7 ja swappailu/pcopy ei toiminut toivotulla tavalla). Ukko hyppää ylöspäin napista ja nojautumista säädetään F ja H-napeista.
Lakeutuminen tapahtuu T-napista. Alkuksi en edes ajatellut julkaisevani tätä täällä, mutta... ehkä jonain kauniina päivänä teen tuosta vielä uuden version. :)

' **************************************
' * BASIC SKIJUMP                      *
' * (c) Copyright 2003 Mika Kemppainen *
' **************************************

CLS
SCREEN 13
DIM Synkkaus AS LONG    'Arvo, joka odotetaan ennenkuin lähdetään
Synkkaus = 20000        'Uteen looppiin. 700MHz koneella dossissa sopiva arvo
                        'Oli 20000. Vaikuttaa pelin nopeuden ohella myös
                        'ruudun välkkymiseen

DIM hyppyriy(200)       'Hyppyrin Y-arvot kohdassa hyppyriy(x)
hyppyriy(0) = 10        'Hyppyrin Y-alkuarvo
hjyrkkyys = 1           'Hyppyrin jyrkkys alussa

DIM makiy(500)          'Mäen Y-arvot kohdassa makiy(x)
                        'Mäen Y-alkuarvo laitetaan myöhemmin
mjyrkkyys = 0           'Mäen jyrkkyys alussa

demo = 1

GOTO aloitus 'Ei tarvitse nollata muuttujia ensimäisellä kerralla

uusihyppy:
uhyp = 1: ulen = 0: umaa = 0: alastulo = 0
pituus = 0: pisteet = 0: tuomari1 = 0: tuomari2 = 0: tuomari3 = 0
loppupisteet = 0: jumppi = 0: suksiy1 = 0: suksiy2 = 0
vauhti = 0: katsox = 0: katsoy = 0: ualkux = 15: ualkuy = 10
kumarrus = 1: ukkoliikkeella = 0: odottelu = 0: GOTO paalooppi

aloitus:
katsox = 0 'Missä kohtaa sijaitsee ruudun yläkulma
katsoy = 0 'X- ja Y-akseleilla


suuntax = .2
suuntay = .2

ualkux = 15: ualkuy = 10
kumarrus = 1 'Missä asennossa hyppääjä on hypyn alussa


'Piirretään hyppyri ja tallennetaan y-arvot taulukkoon

LINE (0, 10)-(10, 10), 3
FOR hx = 11 TO 170
        hjyrkkyys = hjyrkkyys - .007    'Hyppyrn jyrkkyys vähenee
        hyppyriy(hx - 10) = hyppyriy(hx - 11) + hjyrkkyys
        PSET (hx, hyppyriy(hx - 10)), 3
NEXT hx


'Lasketaan, asetetaan mäen arvot ja piirretään mäki

makiy(0) = hyppyriy(160) + 20
LINE (170, hyppyriy(160))-(170, makiy(0)), 3

FOR mx = 170 TO 550
        mjyrkkyys = mjyrkkyys + .003
        makiy(mx - 169) = makiy(mx - 170) + mjyrkkyys
        PSET (mx, makiy(mx - 169)), 4
NEXT
LINE (80, 75)-(210, 90), 15, BF
LOCATE 11, 12: PRINT "BASIC SKI JUMP"
SLEEP 4
LINE (80, 75)-(210, 90), 0, BF

paalooppi: 'PŽŽLOOPPI

DO

'Pyyhitään hyppyri ja mäki
LINE (0 - katsox, 10 - katsoy)-(10 - katsox, 10 - katsoy), 0
FOR hx = 11 TO 170
PSET ((hx - katsox), hyppyriy(hx - 10) - katsoy), 0
NEXT hx
LINE (170 - katsox, hyppyriy(160) - katsoy)-(170 - katsox, makiy(0) - katsoy), 0
FOR mx = 170 TO 550
PSET (mx - katsox, makiy(mx - 169) - katsoy), 0
NEXT mx

LINE (470 - katsox, makiy(300) - katsoy - 2)-(470 - katsox, makiy(300) - katsoy + 2), 0


'Annetaan uusi "katsomon" kohta
'ja tutkitaan näppäimet ja liikutetaan ukkoa yms.

IF demo = 1 THEN
IF katsox > 250 THEN : suuntax = INT(RND * 1) * -1 - .1
IF katsox < -100 THEN : suuntax = INT(RND * 1) * 1 + .1
IF katsoy > 50 THEN : suuntay = INT(RND * 1) * -1 - .1
IF katsoy < -50 THEN : suuntay = INT(RND * 1) * 1 + .1

katsox = katsox + suuntax
katsoy = katsoy + suuntay
IF nappain$ = " " THEN : CLS : demo = 0: katsox = 0: katsoy = 0: uhyp = 1
END IF


'Tapahtumat hyppyrissä oltaessa

IF uhyp = 1 THEN
'Piirretaan ukkelia
LINE (ualkux - 4, suksiy1)-(ualkux + 5, suksiy2), 0  'Ukon sukset
LINE (ualkux, hyppyriy(ualkux - 10))-(ualkux, ualkuy), 0   'Ukon jalat
LINE (ualkux, ualkuy)-(ualkux + 4, hyppyriy(ualkux + 4 - 10) - 5), 0 'Ukon vartalo

SELECT CASE nappain$
        CASE CHR$(0) + CHR$(77): ukkoliikkeella = 1
        CASE CHR$(0) + CHR$(72)

        IF ualkux > 147 AND ualkux < 151 THEN
        uhyp = 0: ulen = 1: kiih = -.22: GOTO ulento
        ELSE
        uhyp = 0: ulen = 1: kiih = RND * -.165: GOTO ulento
        END IF


END SELECT

IF ukkoliikkeella = 1 THEN
        vauhti = vauhti + .0045
        ualkux = ualkux + vauhti
        ualkuy = hyppyriy(ualkux - 10) - 4
        IF ualkux > 164 THEN : uhyp = 0: ulen = 1: GOTO ulento
END IF

suksiapu = ualkux - 14
IF suksiapu < 0 THEN suksiapu = 1
suksiy1 = hyppyriy(suksiapu) - 1
suksiy2 = hyppyriy(ualkux + 5 - 10) - 1
LINE (ualkux - 4, suksiy1)-(ualkux + 5, suksiy2), 2
LINE (ualkux, hyppyriy(ualkux - 10))-(ualkux, ualkuy), 6
LINE (ualkux, ualkuy)-(ualkux + 4, hyppyriy(ualkux + 4 - 10) - 5), 7
END IF


nappain$ = INKEY$
IF nappain$ = CHR$(27) THEN : END


'Tapahtumat lennon aikana
ulento:

IF ulen = 1 THEN

IF nappain$ = "t" THEN
IF makiy(jumppi) - (hyppyriy(160) + katsoy) > 20 THEN
CLS : PRINT "Putosit ja kuolit": SLEEP: END
ELSE
LINE (ualkux - 4, suksiy1)-(ualkux + 5, suksiy2), 0
LINE (ualkux, ualkuy + 3)-(ualkux + 3, ualkuy), 0
LINE (ualkux + 3, ualkuy)-(ualkux + 5, ualkuy - 2), 0
alastulo = 1:
pituus = jumppi / 3
END IF

END IF


IF kumarrus = 1 THEN
LINE (ualkux - 4, suksiy1)-(ualkux + 5, suksiy2), 0
LINE (ualkux, ualkuy + 3)-(ualkux + 3, ualkuy), 0
LINE (ualkux + 3, ualkuy)-(ualkux + 5, ualkuy - 2), 0
END IF

IF kumarrus = 2 THEN
LINE (ualkux - 4, suksiy1)-(ualkux + 5, suksiy2), 0
LINE (ualkux, ualkuy + 3)-(ualkux + 3, ualkuy + 1), 0
LINE (ualkux + 3, ualkuy + 1)-(ualkux + 5, ualkuy), 0
END IF

IF kumarrus = 3 THEN
LINE (ualkux - 4, suksiy1)-(ualkux + 5, suksiy2), 0
LINE (ualkux, ualkuy + 3)-(ualkux + 3, ualkuy + 2), 0
LINE (ualkux + 3, ualkuy + 2)-(ualkux + 6, ualkuy + 1), 0
END IF

IF nappain$ = "f" THEN
        IF kumarrus = 2 THEN : kumarrus = 1
        IF kumarrus = 3 THEN : kumarrus = 2
END IF
IF nappain$ = "h" THEN
        IF kumarrus = 2 THEN : kumarrus = 3
        IF kumarrus = 1 THEN : kumarrus = 2
END IF



ualkux = ualkux + 0
katsox = katsox + vauhti
IF katsox < 100 THEN
IF kumarrus <> 1 THEN : kiih = kiih + .0063
IF kumarrus = 1 THEN : kiih = kiih + .0056
END IF
IF katsox > 99 AND katsox < 200 THEN
IF kumarrus <> 2 THEN : kiih = kiih + .0062
IF kumarrus = 2 THEN : kiih = kiih + .005
END IF
IF katsox > 199 THEN
IF kumarrus <> 3 THEN : kiih = kiih + .0061
IF kumarrus = 3 THEN : kiih = kiih + .0053
END IF


katsoy = katsoy + kiih
jumppi = katsox - (170 - ualkux)

IF jumppi >= 0 THEN
IF hyppyriy(160) + katsoy > makiy(jumppi) THEN
IF alastulo <> 0 THEN
ulen = 0: umaa = 1: GOTO umaassa
ELSE
CLS : PRINT "Kuolittt": SLEEP: END
END IF
END IF

END IF

IF kumarrus = 1 THEN
LINE (ualkux - 4, suksiy1)-(ualkux + 5, suksiy2), 2
LINE (ualkux, ualkuy + 3)-(ualkux + 3, ualkuy), 6
LINE (ualkux + 3, ualkuy)-(ualkux + 5, ualkuy - 2), 7
END IF

IF kumarrus = 2 THEN
LINE (ualkux - 4, suksiy1)-(ualkux + 5, suksiy2), 2
LINE (ualkux, ualkuy + 3)-(ualkux + 3, ualkuy + 1), 6
LINE (ualkux + 3, ualkuy + 1)-(ualkux + 5, ualkuy), 7
END IF

IF kumarrus = 3 THEN
LINE (ualkux - 4, suksiy1)-(ualkux + 5, suksiy2), 2
LINE (ualkux, ualkuy + 3)-(ualkux + 3, ualkuy + 2), 6
LINE (ualkux + 3, ualkuy + 2)-(ualkux + 6, ualkuy + 1), 7
END IF

END IF


'Tapahtumat takaisin maanpinnalle tultaessa ja oltaessa

umaassa:
IF umaa = 1 THEN

LOCATE 1: PRINT "Hyppäsit:"; pituus; "m"

LINE (ualkux - 5, suksiy1)-(ualkux + 4, suksiy2), 0
LINE (ualkux, makiy(jumppi) - katsoy)-(ualkux, makiy(jumppi) - katsoy - 3), 0
LINE (ualkux, makiy(jumppi) - katsoy - 4)-(ualkux + 1, makiy(jumppi) - katsoy - 8), 0

vauhti = vauhti - .01
ualkux = ualkux + vauhti
jumppi = jumppi + vauhti

suksiy1 = makiy(jumppi - 4) - 1 - katsoy
suksiy2 = makiy(jumppi + 5) - 1 - katsoy

IF jumppi < 370 THEN
LINE (ualkux - 5, suksiy1)-(ualkux + 4, suksiy2), 2
LINE (ualkux, makiy(jumppi) - katsoy)-(ualkux, makiy(jumppi) - katsoy - 3), 6
LINE (ualkux, makiy(jumppi) - katsoy - 4)-(ualkux + 1, makiy(jumppi) - katsoy - 8), 7
END IF
END IF



'Piirretään hyppyri ja mäki uuteen kohtaan
LINE (0 - katsox, 10 - katsoy)-(10 - katsox, 10 - katsoy), 3
FOR hx = 11 TO 170
PSET (hx - katsox, hyppyriy(hx - 10) - katsoy), 3
NEXT hx
LINE (170 - katsox, hyppyriy(160) - katsoy)-(170 - katsox, makiy(0) - katsoy), 3
FOR mx = 170 TO 550
PSET (mx - katsox, makiy(mx - 169) - katsoy), 4
NEXT mx
LINE (470 - katsox, makiy(300) - katsoy - 2)-(470 - katsox, makiy(300) - katsoy + 2), 1

FOR x = 1 TO Synkkaus: NEXT

IF umaa = 1 THEN
odottelu = odottelu + 1
IF odottelu = 100 THEN

tuomari1 = INT((pituus / 4.75 - RND * 2.5) * 10) / 10
tuomari2 = INT((pituus / 4.75 - RND * 2.5) * 10) / 10
tuomari3 = INT((pituus / 4.75 - RND * 2.5) * 10) / 10

loppupisteet = INT((1.2 * (pituus - 50) + tuomari1 + tuomari2 + tuomari3) * 10) / 10

LOCATE 22: PRINT tuomari1; tuomari2; tuomari3
LOCATE 23: PRINT " Pisteet:"; loppupisteet
SLEEP
kysyuud:
LOCATE 10: INPUT "Haluatko hypätä uudestaan?", ke$
IF ke$ <> "k" AND ke$ <> "e" THEN : GOTO kysyuud
IF ke$ = "k" THEN : CLS : GOTO uusihyppy
IF ke$ = "e" THEN : CLS : END

END IF
END IF

LOOP

Antti Laaksonen [14.03.2003 20:38:09]

#

Mukava peli kaikin puolin. Vilkkuminen tosin häiritsee, saisikohan sen pois jollain tavalla?

snakari [14.03.2003 20:56:01]

#

ihan hieno vinkki tuo on..
miten toteutit tuon suksen kulman muuten?

KemXy [15.03.2003 07:48:33]

#

Kaksoispuskurointi on koettu monesti hyväksi keinoksi, mutta miten se toteutetaan qbasicissa? Joku joka osaa voisi kirjoittaa esimerkin. Siitä olisi apua varmaan monelle.
Suksen kulma muokkautuu tietyssä kohdassa mäen pinnan mukaan.

thefox [15.03.2003 18:03:38]

#

SCREEN 7 ja PCOPY niin onnistuu suhteellisen näppärästi. Mode13hssa se onkin sitten hieman huonompi homma, pitäisi varata muistit ym, minkä jälkeen QB:n perus graffakomennot eivät enää toimisikaan. Ehkä voisi olla mahdollista pokettaa jonnekin EXE:n muistiin varatun muistialueen segmentti 0xA000:n tilalta, mutta se meneekin jo sitten melkoiseksi purkaksi :)

thefox [19.03.2003 19:36:19]

#

Itse vinkistä, mukava vinkki, en tosin jaksanut algoritmista puolta sen tarkemmin tarkkailla. Mutta sisennykset, sisennykset... ;)

KemXy [20.03.2003 07:58:46]

#

Niin, selkeämpäähän se olisi.

Jakezu91 [16.06.2003 15:01:58]

#

Hyvä!

moptim [03.07.2006 21:08:12]

#

jos sais binääri version... (en omista QBasicii, vaa VB:n

Juhko [14.08.2006 21:09:59]

#

QBasicin voit ladata kirjoittamaalla Googleen QBasic Download ja klikkaamalla "Download: DOS"-linkkiä ja sitten QBASIC.EXEä. Laillisuudesta ei tietoa...

gamehouse [11.06.2007 16:27:56]

#

Hieno!


Sivun alkuun

Vastaus

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

Tietoa sivustosta