Assembly 2009 multiskriin projekti

Jaa meneillään olevat projektisi tai valmiit pelit muun yhteisön kanssa täällä.
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Assembly 2009 multiskriin projekti

Post by KilledWhale »

Assembly 2009 CoolBasic multiscreen projektin aiheeksi on äänestetty katapulttipeli joten toteutusta voisi pikkuhiljaa aloitella. Peli tulisi siis olemaan katapulttipeli, missä pelialue jaettaisiin usealle näytölle kameran liikuttelun sijaan. Kontrollit jaettaisiin myös usealle näytölle. Olisiko näyttöjen määrä rajaton, jolloin pelikentän pituus kasvaisi niin että väliin tulisi ns. katselunäyttöjä vai olisiko määrä rajallinen? Yhteisvaraukseen osallistuu kuitenkin yli 20 ihmistä joista vierekkäin on ainakin 10 ja kymmenelläkin näytöllä peli voisi olla aika hulppean näköinen.

Olisivatko server ja client kaksi erillistä ohjelmaa vai ängettynä samaan kuten netmatchissa? Serveri voisi tietenkin toimia yhtenä ikkunoista mutta cbn tehot huomioonottaen sen varaan ei kannata laskea. Koska nettiliikennetä tulee olemaan jonkin verran pakettien lukemisessa olisi ehkä parempi käyttää cbn muistipalakomentoja kuin marcoderin netGetByte -kikkareita, jotka vievät huomattavasti kauemmin. Tietenkin taivalla leijailevat pilvet ja muut härpäkkeet synkronoidaan jo alussa jolloin vältytään ylimääräiseltä verkkoliikenteeltä mutta valtavien armeijoiden liikutus saattaa vaatia cbltä liikaa.

Koska projektilla tulee olemaan usempi koodaaja ja graafikko jonkinlaista versionhallintaa on pakko käyttää. Käyttöön valittiin nyt SVN, jossa jokaisella on lukuoikeudet ja kirjoitusoikeuksia voi kysellä minulta tai VesQ:lta. Mukana on myös Trac, josta jokainen voi selata projektin etenimistä lataamatta koko pakettia koneelle. Jos joku haluaa vain koodailla eikä välitä svn oikeuksista muokatun version voi välittää .patch muodossa jollekkin SVN-oikeudet omaavalle.

Ideointia voisi jatkaa ideointitopikissa tai vaihtoehtoisesti irkissä. Jos nyt ircnetissä #katapulttipeli Kanavalle voi tulla kuka tahansa idlailemaan ja antamaan mielipiteensä.

Tällä hetkellä projektissa ovat:

Koodailemassa:
-KilledWhale
-VesQ
-Henkru
-Esa94
Taiteilemassa:
-
Musisoimassa:
-

Tällä hetkellä työn alla:
Nettipalikat (VesQ)
Katapulttien lentorata (Ozcar)

SVN: http://my-svn.assembla.com/svn/ASM09
Trac: http://my-trac.assembla.com/ASM09

SVN Pikaopas

Lataus:
1. Lataa ja asenna TortoiseSVN osoitteesta http://downloads.sourceforge.net/tortoi ... i?download.
2. Luo jonnekkin kansio ja nimeä se joksikin, esim "Katapulttipeli".
3. Klikkaa kansiota hiiren kakkosnapilla ja valitse "SVN Checkout".
4. Kirjoita URL-kohtaan http://my-svn.assembla.com/svn/ASM09 ja paina 'OK'.
5. Nyt sinulla tulisi olla projektin lähdekoodi luomassasi kansiossa.

Päivitys:
Klikkaa lähdekoodin kansiota hiiren kakkosnapilla ja valitse "SVN Update".
Tämän jälkeen ohjema päivittää kansion sisällön ja homma on valmis.

Muokkaus jos sinulla on SVN-oikeudet:
Kun olet muokannut koodia tarkista että sinulla on uusin julki oleva versio koodista käytössä. Tämän jälkeen klikkaa lähdekoodin kansiota hiiren kakkosnapilla ja valitse SVN commit. Kirjoita lyhyt kuvaus päivityksestä ja valitse tiedostot mihin päivitys kohdistuu. Yleisesti ottaen päivitys on liian suuri jos sitä ei voi kuvata yhdellä lauseella, mutta alussa se ei ole niin tarkkaa.

Muokkaus jos sinulla ei ole SVN-oikeuksia:
Kun olet muokannut koodia tarkista että sinulla on uusin julki oleva versio koodista käytössä. Tämän jälkeen klikkaa lähdekoodin kansiota hiiren kakkosnapilla ja valitse "TortoiseSVN->Create Patch". Valitse päivitykseen kuuluvat tiedostot ja paina ok. Tallenna tulos .patch tiedostoksi ja välitä se jollekkin, jolla on SVN-oikeudet.

Tässä pari kuvaa selventämään ideaa:
Image
Image
Image
Last edited by KilledWhale on Tue Jun 02, 2009 9:59 pm, edited 8 times in total.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
Ozcar
Advanced Member
Posts: 439
Joined: Mon Aug 27, 2007 8:43 pm
Location: Helsinki

Re: Assembly 2009 multiskriin projekti

Post by Ozcar »

Lukuoikeudet toki kaikille, mitäpä salailtavaa meillä olisi?
Ratkaisit juuri universaaliongelman! Hienoa, ota keksi.

Filosofia on ajattelun taidetta, mutta sen maalari elää juoden apurahojaan masennukseensa.
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Assembly 2009 multiskriin projekti

Post by KilledWhale »

SVN ja Trac ovat nyt pystyssä. Lukuoikeudet on kaikilla ja kirjoitusoikeuksia haluavat voivat pyytää niitä minulta tai VesQ:lta. Kirjoittelen lyhyen svn oppaan kunhan ehdin.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Assembly 2009 multiskriin projekti

Post by KilledWhale »

Halukkaat graafikot voisivat ilmoittautua täällä tai irkissä ja sopia alustavasti mitä kukakin alkaa tekemään. Jotain musiikkia tarvitaan myös taustalle soimaan. Myös halukkaat koodaajat voivat sanella täällä mitä ovat tekemässä, jotta ei tulisi päälekkäisyyksiä.

Halukkaat saavat svn oikeudet rekisteröitymällä http://assembla.com ja ilmoittamalla nimimerkkinsä minulle.
Last edited by KilledWhale on Mon Jun 01, 2009 3:21 pm, edited 1 time in total.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
Wee
Member
Posts: 57
Joined: Wed Dec 17, 2008 8:46 pm
Location: Mavihelvetti

Re: Assembly 2009 multiskriin projekti

Post by Wee »

Minä voisin ehkä yrittää jotain grafiikkaa... Jotain pientä, en tee mitään taustakuvia, tms. mutta ukkeleita, aseita, seiniä, objeckteja yleensä voin tehdä, jos ei muita ole. Saatte minut parhaiten kiinni foorumin kautta. (ikävä kyllä)

Edit: Eli pyytäkää, jos tarvitsette minulta jotain grafiikkaa.
Last edited by Wee on Mon Jun 01, 2009 5:35 pm, edited 1 time in total.
"This city looks so pretty, do you wanna burn here with me..."
Ozcar
Advanced Member
Posts: 439
Joined: Mon Aug 27, 2007 8:43 pm
Location: Helsinki

Re: Assembly 2009 multiskriin projekti

Post by Ozcar »

Ajattelin omalta osaltani koodata vaikkapa näin alkuun katapulttien ammuntasysteemin sekä todella simppelit fysiikat lentäville kuulille (osumat jäävätköön tulevaisuuden ongelmaksi). Jos pääsen hyvään vauhtiin voin myös pohtia miten joukkojen spawnaus toimii. Tämä toivottavasti onnistuu vloppuun mennessä, seuraavat muutaman päivää kun vietän ruotsissa.

Haluaisin pienen yhteisen asian sovittavaksi. Mielestäni kaikkien toimintojen pitäisi onnistua ruudun alalaidassa olevasta paneelista käsin (ammunta - suuntaus ja vastapaino, spawnaus - joukot ja määrä), jonka takia aloinkin miettiä ruudun mittasuhteita. Skaalattava ruutu taitaa olla käyttäjäystävällisin, mutta otetaanko yhteiseksi sopimukseksi että alareunan paneeli täyttää alimmat 20% ruudusta? Tämä pieni asia vain auttaisi siinä että loisin todennäköisesti katapultin sekä spawnin yhteyteen sen alalaidan paneelin, ja sen kohdistaminen oikein on vattumainen homma jos se koko tulee muuttumaan koodausprojektin edetessä.

Katapultista vielä, mielestäni osittainen "sokea-ammunta" voisi olla hauskakin tapa lähettää kiviä matkaan. Miltä kuulostaisi esimerkiksi systeemi, joka katapulttaajalle näyttäisi alapaneelissa miniatyyrikuvan kartasta (toteutustapa pohdittaisiin kunhan karttasysteemi on luotu) ja sieltä esittäisi parilla erivärisellä pisteellä parin viimeisen kiven osumakohdat, muttei lentoratoja, kuolonuhreja tai vastaavaa lukua? Näin tähtäys onnistuisi mutta katapulteista ei kuitenkaan tulisi kaikkivoipaisia keskiaikasnipuja jotka tiputtelevat vihollisia aallon toisensa perään.


Jonkun täytyisi alkaa luomaan kartan generointisysteemiä, sillä kartan on muututtava pelien yhteydessä katapulttaajien mielenkiinnon säilyttämiseksi. Valtavia korkeuseroja ei tarvita, eikä maaston tarvitse olla tuhoutuvaa, mutta lievästi kumpuileva maisema eri lailla sijoittuvine puineen tms. olisi hauska. Tässä pitäisi myös samalla pohtia pikkukuvan luomista pulttaajille, mutta sen ei pitäisi olla suuri ongelma jos koodissa yhtään otetaan moinen vaade huomioon.
Ratkaisit juuri universaaliongelman! Hienoa, ota keksi.

Filosofia on ajattelun taidetta, mutta sen maalari elää juoden apurahojaan masennukseensa.
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Assembly 2009 multiskriin projekti

Post by KilledWhale »

Projektin docs-kansiossa on pientä ohjeistusta koodin tyylistä, jotta se pysyisi suunnilleen samana kirjoittajasta huolimatta, joten jokainen koodaaja lukekoon sen.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Assembly 2009 multiskriin projekti

Post by KilledWhale »

Nostelen nyt vähän aihetta että ihmeiset huomaavat, eli kaikki joilla on pienintäkään ideaa, halua koodata tai halua taiteilla tulkaas nyt irkkiin #katapulttipeli niin jaellaan tehtäviä ja koitetaan saada projektiin vähän elämää.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
Taatero:

Re: Assembly 2009 multiskriin projekti

Post by Taatero: »

KilledWhale wrote:Nostelen nyt vähän aihetta että ihmeiset huomaavat, eli kaikki joilla on pienintäkään ideaa, halua koodata tai halua taiteilla tulkaas nyt irkkiin #katapulttipeli niin jaellaan tehtäviä ja koitetaan saada projektiin vähän elämää.
Voisin tehdä grafiikoita. Myös jonkinlainen maastogeneraattori löytyy, mutta se on niin kökkö ettei viitsi käyttää.
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Assembly 2009 multiskriin projekti

Post by JATothrim »

Voisin näpeltää serverin/clientin netti ominaisuuksia kun näyttivät olevan vielä aika kesken. ;)
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
Taatero
Advanced Member
Posts: 384
Joined: Tue May 27, 2008 6:06 pm

Re: Assembly 2009 multiskriin projekti

Post by Taatero »

Onko resosta ollut mitään puhetta. Olisi kiva tietää, jos vaikka alkaisin noita grafiikoita tehdä.
[color=#40BF00][u]koodaaja[/u][/color] wrote:Täyden turvan takaamiseksi avain olisi myös kuljetettava offlinenä suoraan tulevien viestien lähettäjältä niiden vastaanottajalle laitakaupungin hämärissä yöneljältä ja varmistettava, ettei kumpaakaan osapuolta seurata. Popliinitakkia suositellaan.
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Assembly 2009 multiskriin projekti

Post by KilledWhale »

Onko 800 * 600 sopiva vai liian pieni? Resohan voisi olla vaihdettava mutta tällä aktiivisudella ja ajalla sen varaan ei kannata laskea :D
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Assembly 2009 multiskriin projekti

Post by Ruuttu »

Suosittelisin kyllä vähintään 1024x768. Eihän muutettava resoluutio olen kovin vaikea toteuttaa, muuttujat SCRW ja SCRW ja käytetään "suhteellisia" koordinaatteja, esim. DrawImage Pilvi, SCRW*0.4,SCRH*0.2
Pate5
Artist
Artist
Posts: 551
Joined: Tue Aug 28, 2007 4:53 pm
Location: Vantaa

Re: Assembly 2009 multiskriin projekti

Post by Pate5 »

Ei toimi, ellei tee kokonaan piirtokomennoilla. Kuvat pitäisi skaalata jokaiseen resoluutioon sopivaksi.
EDIT:

Ja tietysti fullscreen, koska muuten koko multiscreen-idea kärsii.

CoolBasic henkilökuntaa
Graafikko
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Assembly 2009 multiskriin projekti

Post by Ruuttu »

No ei kyllä tarvitse, ellei väkisin halua asettaa joka konetta eri resoluutiolle.
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Assembly 2009 multiskriin projekti

Post by JATothrim »

Tai jospa vaan pidetään tuo 800x600 ja peli olisi ikkunoitu? Fps laskee aika kököksi isoilla tarkuuksilla. Vistasta on jokun verran hyötyä.. koska tällä kannettavalla toimii 640x480 kokoruudulla, vaikka paneelin reso on 1280x768 :D Ikkunoitu versiota käytettäisiin kuitenkin vain jos koneen näyttö ei tue kokoruutua.
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
Taatero
Advanced Member
Posts: 384
Joined: Tue May 27, 2008 6:06 pm

Re: Assembly 2009 multiskriin projekti

Post by Taatero »

JATothrim wrote:Tai jospa vaan pidetään tuo 800x600 ja peli olisi ikkunoitu? Fps laskee aika kököksi isoilla tarkuuksilla. Vistasta on jokun verran hyötyä.. koska tällä kannettavalla toimii 640x480 kokoruudulla, vaikka paneelin reso on 1280x768 :D Ikkunoitu versiota käytettäisiin kuitenkin vain jos koneen näyttö ei tue kokoruutua.
Miten olisi 800x600, joko kokoruututilassa tai ikkunoituna?
[color=#40BF00][u]koodaaja[/u][/color] wrote:Täyden turvan takaamiseksi avain olisi myös kuljetettava offlinenä suoraan tulevien viestien lähettäjältä niiden vastaanottajalle laitakaupungin hämärissä yöneljältä ja varmistettava, ettei kumpaakaan osapuolta seurata. Popliinitakkia suositellaan.
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Assembly 2009 multiskriin projekti

Post by KilledWhale »

Eli sovitaan nyt ruudun kooksi 800x600x32 ja kokoruudulla. Jos näyttö ei tue kokoruuduntilaa annetaan mahdollisuudeksi ikkuna.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
Pate5
Artist
Artist
Posts: 551
Joined: Tue Aug 28, 2007 4:53 pm
Location: Vantaa

Re: Assembly 2009 multiskriin projekti

Post by Pate5 »

Tässä m1c:n cb:lle kääntämä DiamondSquare -funktio ottox80:n esimerkillä. Funktiolla voi luoda sopivaa maastoa.

Code: Select all

SCREEN 800,600

Color 0,120,0
maa=MakeGroundImage(800,300,100,4,0.3)

Repeat

    DrawImage maa,0,ScreenHeight()-ImageHeight(maa)
   
    DrawScreen
   
    If KeyDown(cbkeyspace) Then DeleteImage maa : maa=MakeGroundImage(800,300,100,4,0.3)

Forever

Function MakeGroundImage(_size,height#,roughness#,blocks=8,multiplier#=0.5) //älä laita blocks arvoksi suurempaa kuin 16

    If blocks>16 Then blocks=16
    If blocks>8 Then
        For i=8 To 16
            If 2^i=>_size Then blocka=i : Exit
        Next i
    EndIf
   

    _mem=DiamondSquare2D(height#, height#,2^blocks, roughness#, multiplier#)

    img=MakeImage(_size,Int(height#+roughness#))

    DrawToImage img
   
        width = MEMBlockSize(_mem) / 4 - 1 //1 float = 4 tavua, arvoja siten (palan koko tavuina) / 4
       
        ratio#= Float(_size)/Float(width)
       
        For i = 1 To width
       
            an=i
            bn=i-1

            b#=PeekFloat(_mem, bn * 4)
           
            a#=PeekFloat(_mem, an * 4)
           
            If b#<=a# Then
                temp#=a#
                a#=b#
                b#=temp#
                tempn=an
                an=bn
                bn=tempn
               
               
            EndIf
           
            tri(an*ratio#,a#,bn*ratio#,b#,an*ratio#,b#)
           
            Box (i-1)*ratio#,b#,ratio#+1,b#+height#*2,1
           
           
           
           
           
        Next i

    DrawToScreen
   
    DeleteMEMBlock _mem
   
    Return img
   
End Function

Function tri(x1,y1,x2,y2,x3,y3) 'kolmion kärkipisteet p1, p2, p3
   'järjestetään pisteet y koordinaatin perusteella
   If y2<y1 Then 'jos p2 on ylempänä kuin p1 vaihdetaan niiden paikkaa
       tmp=y1
       y1=y2
       y2=tmp
       
       tmp=x1
       x1=x2
       x2=tmp
   EndIf
   
   If y3<y1 Then 'jos p3 on ylempänä kuin p1 vaihdetaan niiden paikkaa
       tmp=y1
       y1=y3
       y3=tmp
       
       tmp=x1
       x1=x3
       x3=tmp
   EndIf
   
   If y3<y2 Then 'jos p3 on lempänä kuin p2 vaihdetaan niiden paikkaa
       tmp=y2
       y2=y3
       y3=tmp
       
       tmp=x2
       x2=x3
       x3=tmp
   EndIf
   
   'pisteet ovat nyt järjestyksessä
   'ylhäältä alas p1(x1,y1), p2(x2,y2), p3(x3,y3)
   
   dy1=y2-y1'pystysuora matka p1:sta p2:seen
   dx1=x2-x1'vaakasuora matka p1:sta p2:seen
   
   dy2=y3-y1'pystysuora matka p1:sta p3:meen
   dx2=x3-x1'vaakasuora matka p1:sta p3:meen
   
   If dy1 Then 'jos kolmion yläosa on pidempi kuin 0
       'käydään läpi kaikki vaakaviivat kolmion yläosassa(p1-p2)
       For i = y1 To y2
           'lasketaan seuraava x-koordinaatti p1:stä p2:seen
           ax=x1+((i-y1)*dx1)/dy1
           'lasketaan seuraava x-koordinaatti p1:stä p3:meen
           bx=x1+((i-y1)*dx2)/dy2
           
           Line ax,i,bx,i 'piirretään viiva kolmion reunojen välille
       Next i
   EndIf
   
   dy1=y3-y2'pystysuora matka p2:sta p3:meen
   dx1=x3-x2'vaakasuora matka p2:sta p3:meen
   
   If dy1 Then 'jos kolmion alaosa on pidempi kuin 0
       'käydään läpi kaikki vaakaviivat kolmion alaosassa(p2-p3)
       For i = y2 To y3
           'lasketaan seuraava x-koordinaatti p2:stä p3:meen
           ax=x2+((i-y2)*dx1)/dy1
           'lasketaan seuraava x-koordinaatti p1:stä p3:meen
           bx=x1+((i-y1)*dx2)/dy2
           
           Line ax,i,bx,i 'piirretään viiva kolmion reunojen välille
       Next i
   EndIf
End Function

Function DiamondSquare2D(seed1#, seed2#, _width, roughness#, multiplier#, unset# = -12345)
    width = _width
    result = MakeMEMBlock(width * 4 + 4)
    For i = 1 To width - 1
        PokeFloat result, i * 4, unset#
    Next i
    PokeFloat result, 0, seed1#
    PokeFloat result, width * 4, seed2#
    stp = width / 2
    While stp => 1
        b = stp
        While b < width
            If PeekFloat(result, b * 4) = unset# Then
                PokeFloat result, b * 4, (PeekFloat(result, (b - stp) * 4) + PeekFloat(result, (b + stp) * 4)) / 2 + Rnd(-roughness#, roughness#)
            EndIf
            b = b + stp
        Wend
        stp = stp / 2
        roughness# = roughness# * multiplier#
    Wend
    Return result
End Function
CoolBasic henkilökuntaa
Graafikko
E.T.
Newcomer
Posts: 42
Joined: Thu Jul 03, 2008 9:33 am

Re: Assembly 2009 multiskriin projekti

Post by E.T. »

Tässä olisi projektia varten tekemäni karttageneraattori, joka luo satunnaisen kartan pelaajien määrän ja ruudun koon perusteella. Funktiolle annetaan parametriksi siemenluku, jonka avulla kaikkien pitäisi saada samanlainen kartta.

Code: Select all

Global g_screens
g_screens=9

SCREEN 800,600,32

Dim map
Dim playerscreen
Dim x

map=randommap()
Color cbwhite
aika=Timer()+1000
Repeat
    If KeyHit(cbkeyspace) Then
        DeleteImage map
        map=randommap()
    EndIf
    Color cbwhite
    If KeyHit(cbkeyright) Then
        If playerscreen+1<g_screens Then
            For x=1 To screenwidth() Step 5
                DrawImage map,-x-screenwidth()*playerscreen,2*screenheight()/3
                Line ScreenWidth()-x,0,screenwidth()-x,screenheight()
                DrawScreen
            Next x
        EndIf
        playerscreen=(playerscreen+1) Mod g_screens
    EndIf
    If KeyHit(cbkeyleft) Then
        If playerscreen>0 Then
            For x=ScreenWidth() To 0 Step -5
                DrawImage map,-x-ScreenWidth()*(playerscreen-1),2*screenheight()/3
                Line ScreenWidth()-x,0,ScreenWidth()-x,ScreenHeight()
                DrawScreen
            Next x
        EndIf
        playerscreen=playerscreen-1
        If playerscreen=-1 Then playerscreen=g_screens-1
    EndIf
    DrawImage map,-ScreenWidth()*playerscreen,2*ScreenHeight()/3
    Text 5,5,"Vasemmalla ja oikealla nuolella vaihtaa ruutua"
    Text 5,20,"Välilyönnillä luo uuden kartan"
    Text 5,35,"ruutu "+(playerscreen+1)
    DrawScreen
Forever
WaitKey







Function RandomMap(seed=0)
If seed<>0 Then Randomize seed

Dim i
Dim x,y,x1,y1,x2,y2,yy

i=MakeImage(g_screens*ScreenWidth(),screenheight()/3)
y1=ScreenHeight()/4
y2=ScreenHeight()/4
DrawToImage i
While x1<g_screens*ScreenWidth()
    If y2<>ScreenHeight()/6 Then yy=20*(ScreenHeight()/6-y2)/Abs(ScreenHeight()/6-y2)
    y2=y2+Rand(-40,40)+yy
    x2=x2+screenwidth()/5
    x2=Min(x2,screenwidth()*g_screens)
    y2=Max(0,Min(screenheight()/3-20,y2))
    For x=x1 To x2
        y=(y2-y1)*Sin(180*(x-x1)/(x2-x1)-90)/2+(y2-y1)/2
        Color cbblackskin
        Line x,y+y1,x,ScreenHeight()/3
        Color cbgreen
        Line x,y+y1,x,Min(y+y1+15,screenheight()/3)
    Next x
    x1=x2+1
    y1=y2
Wend
DrawToScreen
Return i
EndFunction
Quidquid latine dictum sit, altum videtur.
Voitot: Viikkokisa XVII
Post Reply