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
Hyvältä näyttää fysiikkapuoli, vielä kun saat auton kuvan viivan tilalle. Mielestäni kontrollit tosin ovat väärin päin.
Niinpä!
Ja rata pcx kuva....
Mut täähän on vaan esimerkki!
Toimii muten hyvin!
Niinpä!
Ja rata pcx kuva....
Mut täähän on vaan esimerkki!
Toimii muten hyvin!
No se viiva oli vaa, ku koodi ois näyttäny vaan sotkusemmalta, jos ois ollu paremman näkönen.
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".
Kannattaa kopioida koko koodi muistioon, ja sitten tallentaa se bas-päätteellä.
KESKENERÄINEN JA HUONO KOODI!!!
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ä.
Niin on, se toimii jopa komentokehotteessa.
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!
Mä vähän luulisin, että pitäis klikata rekistöröinti linkkiä. Ja hyödyt voit keksiä itse.
en huomannutkaan sitä linkkiä...miksiköhän? Ei mittään ja kiitti!
EI TOIMINU MULLA
ihan ok..
Aihe on jo aika vanha, joten et voi enää vastata siihen.