Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Autopeliesimerkki

Sivun loppuun

HtH [20.02.2002 15:56:15]

#

Joskus näkee jonkun aloittelijan tehneen inkey$ neljän suuntaisen autopelin, joka on kaiken lisäksi buginen, ja 90 asteen käännökset ovat mahdollisia. Tämä alkoi ottamaan päähän, ja teimpähän vähän realistisemman autopelimoottorin, jossa mm. auto voi lähteä sivuluisuun jne. "Pelissä" on käytetty SIN ja COS trigonometrisiä funktioita, joilla lasketaan kulma, mihin suuntaan auto(viiva) menee. Pelissä on käytetty inkey$, koska parempi näppäintunnistin olisi vienyt liikaa tilaa. Siksi älä paina kahta näppäintä yhtäaikaa. Pelissä on yksi aika hyödytön aliohjelma, joka tekee sellaisen tekstin, jonka ympärillä on laatikko, joten lisää se ohjelmaasi, se on listauksessa 2

Itse koodi

DECLARE SUB lineprint (text$, textcolor!, linecolor!, xpos!, ypos!)
'***************************Autopelin esimerkki******************************
'                                By: HaRa
'Tässäpä on aloittelijoille pieni oppimispaketti autopelin fysiikan
'ohjelmoinnista, ja muusta pienestä kivasta.
'Lähdekoodia saa ottaa vapaasti, ja maininta minusta on vapaaehtoinen.
'****************************************************************************

SCREEN 13
lineprint "Autopelin esimerkki", 14, 4, 12, 2
lineprint "By:HaRa", 12, 3, 18, 4
lineprint "Paina mitä tahansa nappia jatkaaksesi.", 15, 7, 2, 20
DO: LOOP UNTIL INKEY$ <> ""
x = 40
y = 40
suunta = 2 'Aloitussuunta
destsuunta = suunta 'Jotta auto ei luisuisi alussa...
pito = .03 'Miten hyvin autonrenkaat
'pitää. Mitä pienempi luku, sitä
'huonommin renkaat pitävät, ja lähtevät luisuun.
CLS
GOSUB piirra.rata
saundit = 1 'Jos on yksi, niin äänet on päällä...
'Jos ei, niin ei ole.
DO
GOSUB piirra.auto 'Kutsuu auton piirron...
GOSUB moottorinaani 'Kutsuu moottorin örinää...
k = k + 1
l = l + 1
IF l = 90 THEN CLS 2: l = 0
IF k = 30 THEN GOSUB piirra.rata: k = 0
'Kaksi seuraavaa riviä ei ole minun
'koodia. Sen olen saanut netistä,
'ja se tekee sillä tavalla, että
'sovellus toimii samalla nopeudella
'joka koneessa.
DO: LOOP UNTIL (INP(&H3DA) AND &H8) = 0
DO: LOOP UNTIL (INP(&H3DA) AND &H8) <> 0
'Sitten auton fysiikkaa...
x$ = INKEY$
IF x$ = CHR$(0) + "H" THEN destnop = destnop + .3
IF x$ = CHR$(0) + "P" THEN destnop = destnop - .3

IF destnop > 1 THEN destnop = 1
IF nop > 1 THEN nop = 1
IF destnop > nop THEN nop = nop + .02
IF destnop < nop THEN nop = nop - .05
destnop = destnop - .004
IF x$ = CHR$(0) + "M" AND nop > .05 THEN destsuunta = destsuunta + .1
IF x$ = CHR$(0) + "K" AND nop > .05 THEN destsuunta = destsuunta - .1
IF destsuunta > suunta THEN suunta = suunta + pito
IF destsuunta < suunta THEN suunta = suunta - pito
IF suunta - destsuunta > 3.14 / 2 THEN : IF INT(RND * 4) = 1 THEN IF saundit = 1 THEN SOUND 1500, .2
IF destsuunta - suunta > 3.14 / 2 THEN : IF INT(RND * 4) = 1 THEN IF saundit = 1 THEN SOUND 1500, .2
IF nop < 0 THEN nop = 0
'Auton liikkumiset
x = x + SIN(suunta) * nop: y = y + COS(suunta) * nop
LOOP




END
piirra.auto:
LINE (x + SIN(destsuunta) * -5, y + COS(destsuunta) * -5)-(x + SIN(destsuunta) * 5, y + COS(destsuunta) * 5), 12

LINE (x + SIN(destsuunta) * -5 + SIN(destsuunta + 3.14 / 2), y + COS(destsuunta) * -5 + COS(destsuunta + 3.14 / 2))-(x + SIN(destsuunta) * 5 + SIN(destsuunta + 3.14 / 2), y + COS(destsuunta) * 5 + COS(destsuunta + 3.14 / 2)), 7
LINE (x + SIN(destsuunta) * -5 + SIN(destsuunta - 3.14 / 2), y + COS(destsuunta) * -5 + COS(destsuunta - 3.14 / 2))-(x + SIN(destsuunta) * 5 + SIN(destsuunta - 3.14 / 2), y + COS(destsuunta) * 5 + COS(destsuunta - 3.14 / 2)), 7

PSET (x + SIN(destsuunta) * -5, y + COS(destsuunta) * -5), 7
'Katotaan, et onko perä, tai kärki ajanu seinään.
IF POINT(x + SIN(destsuunta) * 6, y + COS(destsuunta) * 6) = 15 THEN GOTO gameover
IF POINT(x + SIN(destsuunta) * -6, y + COS(destsuunta) * -6) = 15 THEN GOTO gameover
'Jos jostain kumman syystä sattuu
'menemään seinän läpi, niin sitten se ottaa
'mustasta taustaväristä gameoverin.
IF POINT(x + SIN(destsuunta) * 6, y + COS(destsuunta) * 6) = 0 THEN GOTO gameover
IF POINT(x + SIN(destsuunta) * -6, y + COS(destsuunta) * -6) = 0 THEN GOTO gameover


RETURN
piirra.rata:
'Radan piirto.
'HUOM! Nykyisessä koodissa,
'gameoveri tulee myös, jos
'on ajanut 0 väriin.
LINE (10, 10)-(230, 10), 15
LINE (10, 10)-(0, 30), 15
LINE (0, 30)-(4, 170), 15
LINE (4, 170)-(200, 166), 15
LINE (200, 166)-(250, 100), 15
LINE (250, 100)-(290, 30), 15
LINE (290, 30)-(230, 10), 15
LINE (60, 40)-(180, 150), 15, BF
PAINT (20, 20), 7, 15

RETURN
gameover:
'Sitten on hieno räjähdys
'efekti....
FOR k = 0 TO 30
lineprint "CRASH!", 4, 14, INT(x / 8), INT(y / 8)

IF saundit = 1 THEN SOUND k * 4 + 75, .3
IF saundit = 1 THEN SOUND k * 4 + 75 + INT(RND * 200), .3
IF saundit = 1 THEN SOUND k * 4 + 75 - INT(RND * 10), .3
CIRCLE (x, y), k, 4
CIRCLE (x + 1, y), k, 4
DO: LOOP UNTIL (INP(&H3DA) AND &H8) = 0
DO: LOOP UNTIL (INP(&H3DA) AND &H8) <> 0
NEXT k
FOR k = 30 TO 0 STEP -1
lineprint "CRASH!", 4, 14, INT(x / 8), INT(y / 8)
IF saundit = 1 THEN SOUND k * 4 + 75, .3
IF saundit = 1 THEN SOUND k * 4 + 75 + INT(RND * 200), .3
IF saundit = 1 THEN SOUND k * 4 + 75 - INT(RND * 10), .3
CIRCLE (x, y), k, 0
CIRCLE (x + 1, y), k, 0
DO: LOOP UNTIL (INP(&H3DA) AND &H8) = 0
DO: LOOP UNTIL (INP(&H3DA) AND &H8) <> 0
NEXT k
END
moottorinaani:
IF saundit = 1 THEN SOUND nop * 200 + 75, .2
RETURN

Aliohjelma

SUB lineprint (text$, textcolor, linecolor, xpos, ypos)
'Piirtää tekstin laatikon ympäröimänä
LINE ((xpos - 1) * 8 - 2, (ypos - 1) * 8 - 2)-((xpos - 1) * 8 + LEN(text$) * 8, ypos * 8), 0, BF
LOCATE ypos, xpos
COLOR textcolor
PRINT text$
LINE ((xpos - 1) * 8 - 2, (ypos - 1) * 8 - 2)-((xpos - 1) * 8 + LEN(text$) * 8, ypos * 8), linecolor, B

END SUB

Antti Laaksonen [21.02.2002 22:45:34]

#

Hyvältä näyttää fysiikkapuoli, vielä kun saat auton kuvan viivan tilalle. Mielestäni kontrollit tosin ovat väärin päin.

snakari [22.02.2002 14:48:15]

#

Niinpä!
Ja rata pcx kuva....
Mut täähän on vaan esimerkki!
Toimii muten hyvin!

snakari [22.02.2002 14:48:17]

#

Niinpä!
Ja rata pcx kuva....
Mut täähän on vaan esimerkki!
Toimii muten hyvin!

HaRa [22.02.2002 16:26:08]

#

No se viiva oli vaa, ku koodi ois näyttäny vaan sotkusemmalta, jos ois ollu paremman näkönen.

(nimetön) [22.03.2002 21:20:00]

#

On toi varmaan hyvä, mut miks tota koodia ei voi suoraan laittaa impattavaksi, koska sitä ei kopsaamisen jälkeen voi oikeen liittää basicciin. Ainakaan perinteisellä tavalla "Ctrl C ja Ctrl V".

Antti Laaksonen [22.03.2002 21:34:20]

#

Kannattaa kopioida koko koodi muistioon, ja sitten tallentaa se bas-päätteellä.

Lare [14.05.2002 20:05:15]

#

KESKENERÄINEN JA HUONO KOODI!!!

Arttu Korhonen [29.05.2002 15:56:19]

#

Tuosta Leikkaa-Liimmaa-jutusta, ainakin kouluin WIn 2000:sta löytyy komentokehoteikkunan ylänurkan kuvakkeen valikosta Muokkaa-valikko ja Liitä-komento. Tais löytyä myös toisen koulun NT 4.0:sta ja myös 9x:stä jopa suoraan näkyvissä.

Hanc [07.06.2002 09:19:02]

#

Niin on, se toimii jopa komentokehotteessa.

(nimetön) [20.06.2002 12:04:02]

#

Miten tääl pystyy rekisteröityy ja miks ylipäätänsä? haluaisin joskus pistää jotakin keskustelu foorumiin mutku pitäis olla tunnus ja salasana...miten ne saa!

(nimetön) [26.06.2002 15:41:13]

#

Mä vähän luulisin, että pitäis klikata rekistöröinti linkkiä. Ja hyödyt voit keksiä itse.

(nimetön) [16.07.2002 22:10:02]

#

en huomannutkaan sitä linkkiä...miksiköhän? Ei mittään ja kiitti!

hotso [12.01.2003 11:20:01]

#

EI TOIMINU MULLA

Jakezu91 [15.06.2003 14:57:54]

#

ihan ok..


Sivun alkuun

Vastaus

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

Tietoa sivustosta