Assembly 2009 multiskriin projekti
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Assembly 2009 multiskriin projekti
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:
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:
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
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Re: Assembly 2009 multiskriin projekti
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.
Filosofia on ajattelun taidetta, mutta sen maalari elää juoden apurahojaan masennukseensa.
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: Assembly 2009 multiskriin projekti
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
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: Assembly 2009 multiskriin projekti
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.
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
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Re: Assembly 2009 multiskriin projekti
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.
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..."
Re: Assembly 2009 multiskriin projekti
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.
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.
Filosofia on ajattelun taidetta, mutta sen maalari elää juoden apurahojaan masennukseensa.
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: Assembly 2009 multiskriin projekti
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
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: Assembly 2009 multiskriin projekti
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
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Re: Assembly 2009 multiskriin projekti
Voisin tehdä grafiikoita. Myös jonkinlainen maastogeneraattori löytyy, mutta se on niin kökkö ettei viitsi käyttää.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ää.
Re: Assembly 2009 multiskriin projekti
Voisin näpeltää serverin/clientin netti ominaisuuksia kun näyttivät olevan vielä aika kesken.
-On selkeästi impulsiivinen koodaaja joka...
Re: Assembly 2009 multiskriin projekti
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.
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: Assembly 2009 multiskriin projekti
Onko 800 * 600 sopiva vai liian pieni? Resohan voisi olla vaihdettava mutta tällä aktiivisudella ja ajalla sen varaan ei kannata laskea
CoolBasic henkilökuntaa
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Re: Assembly 2009 multiskriin projekti
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
Re: Assembly 2009 multiskriin projekti
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
Graafikko
Re: Assembly 2009 multiskriin projekti
No ei kyllä tarvitse, ellei väkisin halua asettaa joka konetta eri resoluutiolle.
Re: Assembly 2009 multiskriin projekti
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 Ikkunoitu versiota käytettäisiin kuitenkin vain jos koneen näyttö ei tue kokoruutua.
-On selkeästi impulsiivinen koodaaja joka...
Re: Assembly 2009 multiskriin projekti
Miten olisi 800x600, joko kokoruututilassa tai ikkunoituna?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 Ikkunoitu versiota käytettäisiin kuitenkin vain jos koneen näyttö ei tue kokoruutua.
[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.
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: Assembly 2009 multiskriin projekti
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
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Re: Assembly 2009 multiskriin projekti
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
Graafikko
Re: Assembly 2009 multiskriin projekti
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
Voitot: Viikkokisa XVII