Teinpä tässä omaksi huvikseni tällaisen mättöpelin. Peli-moodeja on kaksi, ja muutama valittava härveli. (Kamujen määrä, vihulaisten määrä ja energia palkit.) Koodista käsin pystyy kyllä muuttamaan paljon paljon muutakin.
Koodi on täysin sisennetty(ainakin sen pitäisi olla), ja kommentoitu myös paljon. Että ainakin tietää mihin voi koskea.
Pelin ainoa harmillinen puoli on, että näppäimet jäävät silloin tällöin pohjaan. Mutta Numpad-nuolilla ja Num Lock päällä harvemmin.
Peli ohjautuu siis Numpad nuolista, mutta numpad 5 on taakse päin, ja ampuu space:sta.
DIM gamestate AS INTEGER: gamestate = 0 'gamestate 0 on muuttujien alustus 'gamestate 1 on päävalikko 'gamestate 2 on peli 'gamestate 3 on muuttujien uudelleen alustus DO 'PŽŽLOOPPI SELECT CASE gamestate CASE IS = 0 'MUUTTUJIEN ALUSTUS YMS. 'Näppäimistön lukua varten nämä SCREEN 7, 0, , 1 'Näyttötila DIM mode AS INTEGER 'mode 0 on että kaikki tapetaan ja sitten arvotaan uusiksi 'mode 1 on että kun ukko kuolee niin se vähän ajan päästä tulee takaisin DIM showhealth AS INTEGER DIM orcs AS INTEGER DIM elfs AS INTEGER showhealth = 0 orcs = 1 elfs = 1 DIM text1 AS STRING 'Valikoiden tekstit... DIM text2 AS STRING DIM text3 AS STRING DIM text4 AS STRING DIM tyhjarivi AS STRING text1 = "PELAA" text2 = "ASETUKSET" text3 = "LOPETA" text4 = "PŽŽVALIKKO" tyhjarivi = SPACE$(40) DIM menustate AS INTEGER 'Valikoiden "tilat". Siis että missä kohdassa ne on.. DIM menucurstate AS INTEGER DIM nappain AS STRING 'Muuttuja valikoiden näppäimille. menustate = 0 menucurstate = 0 gamestate = 1 'Ja tila seuraavaan ettei jäädä alustamaan muuttujia koko loppu ikää. CASE IS = 1 'VALIKKO nappain = INKEY$ 'Haetaan näppäin IF nappain = CHR$(13) THEN 'Jos ENTER on pohjassa SELECT CASE menustate 'Katsotaan missä valikossa ollaan CASE IS = 0 SELECT CASE menucurstate 'Ja katsotaan missä kursori on CASE IS = 0 gamestate = 2 'Ja toimitaan sen mukaan CASE IS = 1 menustate = 1 menucurstate = 0 CASE IS = 2 EXIT DO END SELECT 'menucurstate CASE IS = 1 SELECT CASE menucurstate CASE IS = 0 IF mode = 0 THEN mode = 1 IF mode = 1 THEN mode = 0 CASE IS = 3 IF showhealth = 0 THEN showhealth = 1 IF showhealth = 1 THEN showhealth = 0 CASE IS = 4 menustate = 0 menucurstate = 0 END SELECT 'menucurstate END SELECT 'menustate END IF 'nappain = chr$(13) SELECT CASE menustate 'Tässä katotaan muita näppäimiä CASE IS = 0 IF nappain = CHR$(0) + "H" THEN menucurstate = menucurstate - 1 IF menucurstate < 0 THEN menucurstate = 2 END IF IF nappain = CHR$(0) + "P" THEN menucurstate = menucurstate + 1 IF menucurstate > 2 THEN menucurstate = 0 END IF CASE IS = 1 IF nappain = CHR$(0) + "H" THEN menucurstate = menucurstate - 1 IF menucurstate < 0 THEN menucurstate = 4 END IF IF nappain = CHR$(0) + "P" THEN menucurstate = menucurstate + 1 IF menucurstate > 4 THEN menucurstate = 0 END IF IF nappain = CHR$(0) + "K" THEN SELECT CASE menucurstate CASE IS = 0 mode = 0 CASE IS = 1 elfs = elfs - 1 IF elfs < 1 THEN elfs = 1 CASE IS = 2 orcs = orcs - 1 IF orcs < 1 THEN orcs = 1 CASE IS = 3 showhealth = 0 END SELECT 'menucurstate END IF IF nappain = CHR$(0) + "M" THEN SELECT CASE menucurstate CASE IS = 0 mode = 1 CASE IS = 1 elfs = elfs + 1 IF elfs > 200 THEN elfs = 200 CASE IS = 2 orcs = orcs + 1 IF orcs > 200 THEN orcs = 200 CASE IS = 3 showhealth = 1 END SELECT 'menucurstate END IF END SELECT IF nappain = CHR$(27) THEN IF menustate = 1 THEN menustate = 0 menucurstate = 0 ELSEIF menustate = 0 THEN EXIT DO END IF END IF GOSUB piirravalikko CASE IS = 2 'PELIN VALMISTELU DEF SEG = &H40 DIM nap(1 TO 128) DIM nappi(1 TO 128) AS INTEGER RANDOMIZE TIMER DIM oh AS INTEGER, eh AS INTEGER, ohit AS INTEGER, ehit AS INTEGER 'Värejä bgcolor = 2 'Taustaväri pcolor = 15 'Pelaajan väri acolor = 6 'Ammuksien väri ecolor = 6 'Ystävien väri ocolor = 0 'Vastustajien väri DIM info AS INTEGER DIM e.speed AS SINGLE DIM o.speed AS SINGLE DIM knopeus AS SINGLE DIM pnopeus AS SINGLE DIM ammusdamage AS INTEGER info = 10 'Infopalkin leveys 'showhealth = 1 'Näytetäänkö kaikkien energiat vai ei 'orcs = 30 'Vastustajien määrä 'elfs = 7 'Ystävien määrä (muukaan lukien pelaaja) 'mode = 0 'Pelimoodi oh = 86 'Vastustajien max energia eh = 100 'Ystävien ja itsemme max energia ohit = 1 'Lyönnin vahinko vastustajilla ehit = 3 'Lyönnin vahinko ystävillä ammusdamage = 30 'Ammusten vahinko pnopeus = .4 'Pelaajan nopeus knopeus = 2.5 'Ja kääntämisen nopeus o.speed = .4 'Vastustajien nopeus e.speed = .4 'Ystävien nopeus DIM ammuksia AS INTEGER: ammuksia = 20 'Tämä määrää ammuksien maksimin kerralla näytöllä.(Žlä turhaan suurenna, ellet sitten hakkaa spacea hyyyvin nopeaan.) DIM ammus(ammuksia) 'Tällä katotaan onko ammus ammuttu DIM ammusx(ammuksia) AS SINGLE 'Koordinaatit DIM ammusy(ammuksia) AS SINGLE 'ammuksille DIM ammusk(ammuksia) 'Ammuksen kulma DIM ammusspeed(ammuksia) AS SINGLE 'nopeus DIM power AS INTEGER: power = 0 'Muuttujan nimi on hämäävä. Mutta tarvitaan ammuksien ampumiseen. a = 6 'tätä isontamalla voit suurentaa kolmiota..!! B = SQR(a * a + (a / 2) * (a / 2)) 'Tömö on toinen kolmioiden pituuksista. (En menisi muuttamaan.) DIM muuttuja AS INTEGER 'Tälle laitetaan joko orcs tai elfs muuttujan arvo, suurempi niistä. IF orcs > elfs THEN muuttuja = orcs ELSE muuttuja = elfs END IF DIM vari AS INTEGER 'Healthbarien värin muuttuja 'Vihulaisille kaikkea tärkeää... DIM o.life(1 TO orcs) AS INTEGER 'Muuttuja elossaolemisesta DIM o.x(1 TO orcs) AS SINGLE 'Koordinaatit DIM o.y(1 TO orcs) AS SINGLE '... DIM kulmao(1 TO orcs) AS SINGLE 'Kulma DIM opituus(1 TO muuttuja) 'Jokin muuttuja pituuksien mittaamiseen DIM o.health(1 TO orcs) 'Energiat DIM otarget(orcs) 'Kohde DIM otarget.x(orcs), otarget.y(orcs) 'Ja kohteen koordinaatit 'Ja ystäville ja pelaajalle samoja juttuja DIM e.x(1 TO elfs), e.y(1 TO elfs) DIM kulmae(1 TO elfs), e.life(1 TO elfs) DIM e.health(1 TO elfs) DIM etarget(elfs) DIM etarget.x(elfs), etarget.y(elfs) DIM epituus(1 TO muuttuja) DIM tama AS SINGLE 'Kaksi muuttujaa (atn-funktiolle arvo, josta se laskee kulman) DIM radeja AS SINGLE 'Ja se mihin se tallentaa sen DIM kulma2 AS SINGLE, rad2 AS SINGLE DIM PI AS SINGLE PI = 3.1416 'PI:n likiarvo kulma2 = 26.6 'Kolmioille muotoa tässä rad2 = (kulma2 * 3.14 / 180) 'Joka muutetaan radiaaneiksi DIM startwaiting AS INTEGER, timeri AS INTEGER 'Alussa odotus muuttuja ja timeri sille ajalle... startwaiting = 1 'Tämä laittaa odotuksen alussa päälle DIM starttimer AS INTEGER 'Ja aika kuinka kauan odotetaan starttimer = 100 '(100 loopin läpiajoa) 'mode 0:lle DIM endtimer AS INTEGER 'Loppupysähdys endtimer = 100 'Ja sillekkin 100 loopin läpiajoa. DIM alldead AS INTEGER 'Muuttuja jolla tarkistetaan ovatko kaikki jommalta kummalta puolelta kuolleet. alldead = 0 DIM waiting AS INTEGER 'Ja muuttuja joka määrää odotuksen päälle. waiting = 0 'mode 1: lle DIM deadtimer AS INTEGER 'Kuoleman jälkeinen odotus uuteen "respawniin." deadtimer = 100 DIM odead(orcs), edead(elfs) 'Ja niille kuolema muuttuja(joka mittaa aikaa). FOR i = 1 TO elfs e.x(i) = INT(RND * 200) e.y(i) = INT(RND * (200 - info)) e.life(i) = 1 kulmae(i) = 0 e.health(i) = eh NEXT i FOR i = 1 TO orcs o.x(i) = INT(RND * 200) + 120 o.y(i) = INT(RND * (200 - info)) o.life(i) = 1 kulmao(i) = 0 o.health(i) = oh NEXT i gamestate = 3 CASE IS = 3 'PELI SELECT CASE mode 'Tarkistetaan mode CASE IS = 0 'Ja tehdään tarkistuksia sen moden mukaan. FOR i = 1 TO elfs '(Tässä tapauksessa ovatko kaikki kuolleet, että alitetaan uusi kierros.) IF e.life(i) = 1 THEN alldead = alldead + 1 NEXT i IF alldead = 0 THEN waiting = 1 'Odotus päälle ELSE alldead = 0 FOR i = 1 TO orcs IF o.life(i) = 1 THEN alldead = alldead + 1 NEXT i IF alldead = 0 THEN waiting = 1 '... ELSE alldead = 0 END IF END IF IF waiting = 1 THEN 'Ja jos odotetaan timeri = timeri + 1 'niin timeriä eteenpäin IF timeri > endtimer THEN 'Ja jos ollaan odotettu tarpeeksi timeri = 0 'timeri nollaan waiting = 0 'Odotus pois päältä FOR i = 1 TO elfs 'Ja arvotaan kaikki uusiin paikkoihin e.x(i) = INT(RND * 200) e.y(i) = INT(RND * (200 - info)) e.life(i) = 1 kulmae(i) = 0 e.health(i) = eh NEXT i FOR i = 1 TO orcs o.x(i) = INT(RND * 200) + 120 o.y(i) = INT(RND * (200 - info)) o.life(i) = 1 kulmao(i) = 0 o.health(i) = oh NEXT i FOR i = 1 TO ammuksia 'Ja poistetaan ammukset ammus(i) = 0 NEXT i startwaiting = 1 'Ja alkuodotus päälle END IF END IF CASE IS = 1 'Mutta toisessa modessa FOR i = 1 TO orcs 'Tarkistetaan... IF o.life(i) = 0 THEN '...ovatko he kuolleita odead(i) = odead(i) + 1 'Jos niin timeriä eteenpäin IF odead(i) > deadtimer THEN 'Ja jos ollaan odotettu tarpeeksi o.x(i) = INT(RND * 200) + 120 'Arvotaan se takaisin. o.y(i) = INT(RND * (200 - info)) 'Yksinkertaista eikö totta? :) o.life(i) = 1 kulmao(i) = 0 o.health(i) = oh odead(i) = 0 END IF END IF NEXT i FOR i = 1 TO elfs 'Toisilla sama juttu. IF e.life(i) = 0 THEN edead(i) = edead(i) + 1 IF edead(i) > deadtimer THEN e.x(i) = INT(RND * 200) e.y(i) = INT(RND * (200 - info)) e.life(i) = 1 kulmae(i) = 0 e.health(i) = eh edead(i) = 0 END IF END IF NEXT i END SELECT 'mode nappi = INP(&H60) IF nappi < 128 THEN nap(nappi) = 1 ELSE nap(nappi - 128) = 0 POKE &H1A, PEEK(&H1C) IF nap(1) = 1 THEN EXIT DO 'Jos ESC on pohjassa vaihdetaan pelin tilaa IF startwaiting = 1 THEN 'Mutta jos "aloitusodotus" on päällä timeri = timeri + 1 'niin lasketaan taas aikaa(looppien läpimenoja) IF timeri > starttimer THEN timeri = 0 startwaiting = 0 'Ja oikean ajan tullessa ei enää odotetakkaan.. Hienoa! END IF ELSE 'Mutta jos siis ei odoteta IF e.life(1) = 1 THEN 'Tarkistetaan, jos pelaaja on elossa IF nap(57) = 1 THEN 'Ja käydään sen liikkuttaminen ja ampuminen läpi power = power + 1 'SPACE:n painaminen lisää power muuttujaa... IF power > 0 THEN power = 1 'arvoon 1 asti ELSEIF nap(57) = 0 AND power <> 0 THEN 'Ja jos SPACE ei ole enää pohjassa ja power on suurentunut, niin.. FOR i = 1 TO ammuksia 'Lisätään yksi ammus IF ammus(i) = 0 THEN ammus(i) = 1 ammusx(i) = e.x(1) ammusy(i) = e.y(1) ammusk(i) = kulmae(1) ammusspeed(i) = 2 nuolitimeri = 1 EXIT FOR END IF NEXT i power = 0 'Ja laitetaan tämä muuttuja nollaan END IF IF nap(75) = 1 THEN 'Täällä sitä pyöritetään kulmae(1) = kulmae(1) - (knopeus * PI! / 180) END IF IF nap(77) = 1 THEN kulmae(1) = kulmae(1) + (knopeus * PI! / 180) END IF IF nap(76) = 1 THEN 'Ja täällä taakse... e.x(1) = e.x(1) - (COS(kulmae(1)) * pnopeus) e.y(1) = e.y(1) - (SIN(kulmae(1)) * pnopeus) IF e.x(1) > 319 THEN e.x(1) = 319 IF e.x(1) < 0 THEN e.x(1) = 0 IF e.y(1) > ((199 - info) - a) THEN e.y(1) = ((199 - info) - a) IF e.y(1) < 0 THEN e.y(1) = 0 END IF IF nap(72) = 1 THEN '...ja eteenpäin liikutetaan. e.x(1) = e.x(1) + (COS(kulmae(1)) * pnopeus) e.y(1) = e.y(1) + (SIN(kulmae(1)) * pnopeus) IF e.x(1) > 319 THEN e.x(1) = 319 IF e.x(1) < 0 THEN e.x(1) = 0 IF e.y(1) > ((199 - info) - a) THEN e.y(1) = ((199 - info) - a) IF e.y(1) < 0 THEN e.y(1) = 0 END IF END IF' e.life(1) = 1 FOR i = 1 TO ammuksia 'Tässä tämmönen pikku härveli... IF ammus(i) = 1 THEN FOR o = 1 TO orcs 'joka laskee etäisyyden jokaiseen vihulaiseen... IF o.life(o) = 1 THEN xx = ammusx(i) - o.x(o) yy = ammusy(i) - o.y(o) IF SQR(((xx) * (xx)) + ((yy) * (yy))) <= a THEN '...ja sen ollessa tarpeeksi pieni... ammus(i) = 0 '...poistaa nuolen o.health(o) = o.health(o) - ammusdamage 'ja vähentää vihulaisen energiaa... IF o.health(o) <= 0 THEN o.life(o) = 0 'ja poistaa sen olemasta jos energiat meni negatiiviseksi tai nolliin END IF END IF NEXT o END IF NEXT i IF elfs > 1 THEN 'JA TŽSSŽ ON TIETOKONEPELAAJIEN TEKOŽLY... (on esimerkkinä ohjelmointiputkassa...) FOR i = 2 TO elfs 'Nyt ystävät havaitsee örkkejä..!! FOR o = 1 TO orcs 'lasketaan pituudet jokaiseen örkkiin xx = (e.x(i) - o.x(o)) 'x-suuntainen ero yy = (e.y(i) - o.y(o)) 'y-suuntainen ero epituus(o) = SQR((xx * xx) + (yy * yy)) 'ja sitten pituus NEXT o FOR g = 1 TO orcs 'etitään ensimmäinen elävä vihulainen ja laitetaan se kohteeksi IF o.life(g) <> 0 THEN etarget(i) = g EXIT FOR END IF NEXT g FOR g = 1 TO orcs 'ja tässä etitään lähin elävä vihulainen IF epituus(g) < epituus(etarget(i)) THEN IF o.life(g) <> 0 THEN etarget(i) = g END IF END IF NEXT g 'Nyt määritellään kohde: etarget.x(i) = o.x(etarget(i)) etarget.y(i) = o.y(etarget(i)) o = etarget(i) 'lasketaan kulma siihen kohteeseen. xx = (e.x(i) - o.x(o)) 'x-suuntainen ero yy = (e.y(i) - o.y(o)) 'y-suuntainen ero IF epituus(o) <> 0 THEN tama = yy / epituus(o) IF tama <> 1 AND tama <> -1 AND tama <> 0 THEN 'nämä siksi että cotangentilla(ATN) käy huonosti 90 ja 270 asteen kulmat... radeja = ATN(tama / SQR(1 - (tama * tama))) ELSE SELECT CASE tama CASE IS = -1: radeja = -3.1416 / 2 'ja jos se on jotain kiellettyä niin CASE IS = 1: radeja = 3.141 / 2 CASE IS = 0 'Tai muuten vain... IF xx > 0 THEN radeja = 3.1416 ELSE radeja = 0 END IF END SELECT END IF kulmae(i) = radeja - PI IF xx < 0 AND yy > 0 THEN 'ensimmäinen neljännes korjataan... kulmae(i) = (PI / 2) - kulmae(i) kulmae(i) = (PI / 2) + kulmae(i) END IF IF xx < 0 AND yy < 0 THEN 'neljäs neljännes korjataan myös... kulmae(i) = PI - kulmae(i) END IF END IF NEXT i 'havainnointi loppuu haltioilta END IF 'elfs > 1 FOR i = 1 TO orcs FOR o = 1 TO elfs xx = (e.x(o) - o.x(i)) yy = (e.y(o) - o.y(i)) opituus(o) = SQR((xx * xx) + (yy * yy)) NEXT o FOR g = 1 TO elfs IF e.life(g) <> 0 THEN otarget(i) = g EXIT FOR END IF NEXT g FOR g = 1 TO elfs IF opituus(g) < opituus(otarget(i)) THEN IF e.life(g) <> 0 THEN otarget(i) = g END IF END IF NEXT g otarget.x(i) = e.x(otarget(i)) otarget.y(i) = e.y(otarget(i)) o = otarget(i) xx = (e.x(o) - o.x(i)) yy = (e.y(o) - o.y(i)) IF opituus(o) <> 0 THEN tama = yy / opituus(o) IF tama <> 1 AND tama <> -1 AND tama <> 0 THEN radeja = ATN(tama / SQR(1 - (tama * tama))) ELSE SELECT CASE tama CASE IS = -1: radeja = -3.1416 / 2 CASE IS = 1: radeja = 3.1416 / 2 CASE IS = 0 IF xx > 0 THEN radeja = 0 ELSE radeja = 3.1416 END IF END SELECT END IF kulmao(i) = radeja IF xx < 0 AND yy > 0 THEN kulmao(i) = (PI / 2) - kulmao(i) kulmao(i) = (PI / 2) + kulmao(i) END IF IF xx < 0 AND yy < 0 THEN kulmao(i) = -kulmao(i) kulmao(i) = kulmao(i) - PI END IF END IF NEXT i '******************* Tässä nyt sitten liikutaan... ******************* IF elfs > 1 THEN FOR i = 2 TO elfs 'Ystävät liikkuu ensin IF e.life(i) <> 0 THEN 'Aluksi tarkistetaan onko se edes elävä IF o.life(etarget(i)) <> 0 THEN 'ja onko sen kohde elävä? xx = (e.x(i) - o.x(etarget(i))) 'Ja taas pythagoraan lausetta yy = (e.y(i) - o.y(etarget(i))) epituus(i) = SQR((xx * xx) + (yy * yy)) IF epituus(i) >= (a * 2) THEN 'jos ollaan liian kaukana mennään lähemmäks e.x(i) = e.x(i) + COS(kulmae(i)) * e.speed 'Eli lasketaan x:n ja y:n muutokset e.y(i) = e.y(i) + SIN(kulmae(i)) * e.speed 'Jos ne menee ulos ruudulta vejetään ne takas. IF e.x(i) > (320 - a) THEN e.x(i) = (320 - a) IF e.x(i) < a THEN e.x(i) = a IF e.y(i) > ((200 - info) - a) THEN e.y(i) = ((200 - info) - a) IF e.y(i) < a THEN e.y(i) = a ELSE 'Mutta jos ollaankin tarpeeksi lähellä niin lyödään kohdetta IF o.life(etarget(i)) <> 0 THEN 'Jos se on elossa niin lyödään o.health(etarget(i)) = o.health(etarget(i)) - ehit 'lyödään IF o.health(etarget(i)) <= 0 THEN o.life(etarget(i)) = 0 'Jos enut meni tasan 'tai alle 0 nii se kuoli END IF END IF END IF END IF 'Muutama... NEXT i END IF 'elfs > 1 FOR i = 1 TO orcs 'ja sitten vihulaiset IF o.life(i) <> 0 THEN IF e.life(otarget(i)) <> 0 THEN xx = (e.x(otarget(i)) - o.x(i)) yy = (e.y(otarget(i)) - o.y(i)) opituus(i) = SQR((xx * xx) + (yy * yy)) IF opituus(i) >= (a * 2) THEN o.x(i) = o.x(i) + COS(kulmao(i)) * o.speed o.y(i) = o.y(i) + SIN(kulmao(i)) * o.speed IF o.x(i) > (320 - a) THEN o.x(i) = (320 - a) IF o.x(i) < a THEN o.x(i) = a IF o.y(i) > ((200 - info) - a) THEN o.y(i) = ((200 - info) - a) IF o.y(i) < a THEN o.y(i) = a ELSE IF e.life(otarget(i)) <> 0 THEN e.health(otarget(i)) = e.health(otarget(i)) - ohit IF e.health(otarget(i)) <= 0 THEN e.life(otarget(i)) = 0 END IF END IF END IF END IF NEXT i END IF 'startwaiting = 1 GOSUB piirra 'Käydään piirtämässä END SELECT 'gamestate LOOP 'PŽŽLOOPPI END piirra: LINE (0, 0)-(319, 199), bgcolor, BF 'Mustataan kaikki i = 1 IF e.life(1) = 1 THEN 'Piirretään pelaaja erikseen, koska se on erin värinen xa! = (a * COS(kulmae(i))) ya! = (a * SIN(kulmae(i))) xb! = (B * COS(kulmae(i) + (PI! / 2) + ((PI! / 2) - rad2!))) yb! = (B * SIN(kulmae(i) + (PI! / 2) + ((PI! / 2) - rad2!))) xc! = (B * COS(kulmae(i) + PI! + rad2!)) yc! = (B * SIN(kulmae(i) + PI! + rad2!)) LINE (e.x(i) + xa!, e.y(i) + ya!)-(e.x(i) + xb!, e.y(i) + yb!), pcolor LINE (e.x(i) + xb!, e.y(i) + yb!)-(e.x(i) + xc!, e.y(i) + yc!), pcolor LINE (e.x(i) + xc!, e.y(i) + yc!)-(e.x(i) + xa!, e.y(i) + ya!), pcolor END IF FOR i = 2 TO elfs 'Sitten ystävät IF e.life(i) = 1 THEN xa! = (a * COS(kulmae(i))) ya! = (a * SIN(kulmae(i))) xb! = (B * COS(kulmae(i) + (PI! / 2) + ((PI! / 2) - rad2!))) yb! = (B * SIN(kulmae(i) + (PI! / 2) + ((PI! / 2) - rad2!))) xc! = (B * COS(kulmae(i) + PI! + rad2!)) yc! = (B * SIN(kulmae(i) + PI! + rad2!)) LINE (e.x(i) + xa!, e.y(i) + ya!)-(e.x(i) + xb!, e.y(i) + yb!), ecolor LINE (e.x(i) + xb!, e.y(i) + yb!)-(e.x(i) + xc!, e.y(i) + yc!), ecolor LINE (e.x(i) + xc!, e.y(i) + yc!)-(e.x(i) + xa!, e.y(i) + ya!), ecolor END IF NEXT i FOR i = 1 TO orcs 'Ja sitten vihulaiset IF o.life(i) = 1 THEN xa! = (a * COS(kulmao(i))) ya! = (a * SIN(kulmao(i))) xb! = (B * COS(kulmao(i) + (PI! / 2) + ((PI! / 2) - rad2!))) yb! = (B * SIN(kulmao(i) + (PI! / 2) + ((PI! / 2) - rad2!))) xc! = (B * COS(kulmao(i) + PI! + rad2!)) yc! = (B * SIN(kulmao(i) + PI! + rad2!)) LINE (o.x(i) + xa!, o.y(i) + ya!)-(o.x(i) + xb!, o.y(i) + yb!), ocolor LINE (o.x(i) + xb!, o.y(i) + yb!)-(o.x(i) + xc!, o.y(i) + yc!), ocolor LINE (o.x(i) + xc!, o.y(i) + yc!)-(o.x(i) + xa!, o.y(i) + ya!), ocolor END IF NEXT i FOR i = 1 TO ammuksia 'Sen jälkeen ammukset IF ammus(i) = 1 THEN ammusx(i) = ammusx(i) + ((COS(ammusk(i)) * ammusspeed(i))) ammusy(i) = ammusy(i) + ((SIN(ammusk(i)) * ammusspeed(i))) IF ammusx(i) > 320 OR ammusx(i) < 0 OR ammusy(i) > (200 - info) OR ammusy(i) < 0 THEN ammus(i) = 0 END IF IF ammus(i) = 1 THEN PSET (ammusx(i), ammusy(i)), acolor END IF END IF NEXT i IF showhealth = 1 THEN 'Tässä piirretään energiapalkit FOR i = 1 TO elfs IF e.life(i) = 1 THEN SELECT CASE e.health(i) CASE 0 TO (.25 * eh) vari = 4 CASE (.25 * eh) TO (.75 * eh) vari = 10 CASE IS >= (.75 * eh) vari = 2 END SELECT 'e.health(1) LINE (e.x(i) - 6, e.y(i) - 11)-(e.x(i) + 6, e.y(i) - 9), 8, BF LINE (e.x(i) - 5, e.y(i) - 10)-(e.x(i) + 5, e.y(i) - 10), 0 LINE (e.x(i) - 5, e.y(i) - 10)-(e.x(i) - 5 + (e.health(i) / (eh * .1)), e.y(i) - 10), vari END IF NEXT i FOR i = 1 TO orcs IF o.life(i) = 1 THEN SELECT CASE o.health(i) CASE 0 TO (.25 * oh) vari = 4 CASE (.25 * oh) TO (.75 * oh) vari = 10 CASE IS >= (.75 * oh) vari = 2 END SELECT 'o.health(i) LINE (o.x(i) - 6, o.y(i) - 11)-(o.x(i) + 6, o.y(i) - 9), 8, BF LINE (o.x(i) - 5, o.y(i) - 10)-(o.x(i) + 5, o.y(i) - 10), 0 LINE (o.x(i) - 5, o.y(i) - 10)-(o.x(i) - 5 + (o.health(i) / (oh * .1)), o.y(i) - 10), vari END IF NEXT i END IF 'Tietopalkki!!! LINE (0, 199 - info)-(319, 199), 8, BF 'Piirretään harmaa laatikko alareunaan LINE (1, 199 - info + 1)-(103, 199 - 1), 0, BF 'Piirretään musta laatikko enujen alle IF e.health(1) <> 0 THEN SELECT CASE e.health(1) CASE 0 TO (.25 * eh) vari = 4 CASE (.25 * eh) TO (.75 * eh) vari = 10 CASE IS >= (.75 * eh) vari = 2 END SELECT 'e.health(1) LINE (2, 199 - info + 2)-(2 + e.health(1) / (eh * .01), 199 - 2), vari, BF'Piirretään enut END IF IF startwaiting = 1 THEN 'Kirjotetaan pelin alkua odotellessa näytölle numeroita pelin alkuun(3,2,1,0) LOCATE 13, 19: PRINT INT((100 - timeri) / 33) END IF PCOPY 0, 1 'Ja laitetaan piirrokset näkyviin... RETURN 'Ja palataan päälooppiin takaisin piirravalikko: FOR y = 1 TO 25 LOCATE y, 1: PRINT tyhjarivi NEXT y SELECT CASE menustate CASE IS = 0 LOCATE 1, (20 - (LEN(text4) / 2)): PRINT text4 LOCATE 11, 3: PRINT text1 LOCATE 13, 3: PRINT text2 LOCATE 15, 3: PRINT text3 LOCATE 11 + (menucurstate * 2), 1: PRINT ">" CASE IS = 1 LOCATE 1, (20 - (LEN(text2) / 2)): PRINT text2 LOCATE 9, 3: PRINT "MODE: "; mode: LOCATE 9, 25: PRINT "(0/1)"'Mode LOCATE 11, 3: PRINT "KAMUT: "; elfs - 1 'Ystäviä LOCATE 13, 3: PRINT "VASTUSTAJAT: "; orcs 'Vihulaisia LOCATE 15, 3: PRINT "NŽYTŽ ENERGIAT: "; showhealth: LOCATE 15, 25: PRINT "(0/1)" 'Healthbars LOCATE 17, 3: PRINT "SULJE" 'Pois LOCATE 9 + (menucurstate * 2), 1: PRINT ">" END SELECT PCOPY 0, 1 RETURN
Aika näyttävä tekele...! Paitsi että tekoälyn olisi voinut opettaa ampumaan, ja valikoissa senhetkisen valinnan olisi voinut korostaa eri värillä.
Asetuksia en onnistunut muuttamaan, kun lähdin asetukset valikosta, ja yritin aloittaa pelin, ohjelman suorittaminen loppui. Itse en kuitenkaan tällaisen ohjelman tekemiseen olisi pystynyt, tai jaksanut...
Itse asiassa ne valikot ovat vain pikainen härveli, jotta .EXE-muotoisenakin pelistä voi muokata jotain. En kyllä ymmärrä miksi se sammui kun asetuksia vaihdoit, koska minulla niin ei ole käynyt. Ja niin ei ainakaan pitäisi tapahtua painamatta ESC:iä. :S
binäärinä pliis :D
Tässä ois sitä binääriä. En tiedä kauanko se on siellä, mutta onpahan ainakin nyt jonkun aikaa. http://koti.mbnet.fi/verro88/fight.zip
kiitti, ymmärsin qb koodist aika paljon mut ku mul on vaa vb :(
Ihan hieno... Oikeastaan tosi hieno!
Todella vaikuttavaa koodia. Sain vihdoinkin toimimaan sen koneellani.
en kyl ite sais aikaan tollaast:)
Tässä nyt kun on hieman ohjelmointitaidot kehittynyt, niin huomaan että tuossa kannattaisi toi liikkuminen tehdä täysin vektoreilla. Tuolla on tota aste-radiaani-sekoilua sen verran että huhhuijaa!
Aihe on jo aika vanha, joten et voi enää vastata siihen.