Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Massa mättö 1

Sivun loppuun

verho88 [30.12.2005 01:04:51]

#

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

Kipperi [05.01.2006 20:07:31]

#

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

verho88 [06.01.2006 12:59:58]

#

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

moptim [04.07.2006 19:14:03]

#

binäärinä pliis :D

verho88 [10.07.2006 09:05:45]

#

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

moptim [20.07.2006 08:15:49]

#

kiitti, ymmärsin qb koodist aika paljon mut ku mul on vaa vb :(

Juhko [28.10.2006 17:58:32]

#

Ihan hieno... Oikeastaan tosi hieno!

Codeprofile [11.11.2006 20:22:25]

#

Todella vaikuttavaa koodia. Sain vihdoinkin toimimaan sen koneellani.

qwerty [11.02.2008 08:14:45]

#

en kyl ite sais aikaan tollaast:)

verho88 [15.02.2008 22:53:54]

#

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!


Sivun alkuun

Vastaus

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

Tietoa sivustosta