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
RETURNAika 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.