Haulla löytyi: viewtopic.php?f=12&t=574hienohemmo wrote:Haluasin kysyä miten voin tarkistaa osuuko piirtokomennoilla tehty ympyrä harmaaseen boxin reunaan ja antaa esimerkiksi errorin??
Tyhmät kysymykset (I/2012)
Re: Tyhmät kysymykset (I/2011)
Re: Tyhmät kysymykset (I/2011)
Tuo ei kuitenkaan välttämättä ole kaikista tehokkain tarkistustapa enkä ole varma siitä, miten se toimii viivojen kanssa jotka ovat x- tai y-akselin suuntaisia. Minun linkittämäni stackoverflow-vastaus sopii paremmin tuohon tilanteeseen ja se on myös tehokkaampi. Neljän tarkistuksen sijasta riittää yksi.Sly_Jack0 wrote:Haulla löytyi: viewtopic.php?f=12&t=574hienohemmo wrote:Haluasin kysyä miten voin tarkistaa osuuko piirtokomennoilla tehty ympyrä harmaaseen boxin reunaan ja antaa esimerkiksi errorin??
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
-
- Newcomer
- Posts: 2
- Joined: Sun May 06, 2012 4:24 pm
Re: Tyhmät kysymykset (I/2011)
Re: Tyhmät kysymykset (I/2011)
Kpelit.net on sivusto, jota suosittelen pelin nettiin lataamista varten. Jos julkaiset pelin foorumilla ja sen tiedostokoko ei ole mahdottoman suuri, voit myös viestiä lähettäessäsi tuolta alhaalta laittaa zip-kansion viestin liitteeksi.kiinalainen wrote:Mikäs mahtaa olla helpoin tapa pistää peli .zip muotoon ja ladata jollekkin lataussivustolle (ja mikä sivusto mahtaa olla helpoin)?
Helpoin tapa pakata tiedostoja on valita kaikki tiedostot ja kansiot, jotka haluat pakata, klikata jotain niistä hiiren oikealla, valita sieltä "Lähetä kohteeseen" tms. ja sieltä pakattu kansio.
- anti-koodari
- Newcomer
- Posts: 13
- Joined: Fri Dec 30, 2011 9:40 am
Re: Tyhmät kysymykset (I/2011)
-
- Advanced Member
- Posts: 364
- Joined: Wed Dec 03, 2008 3:48 pm
- Location: Turku
Re: Tyhmät kysymykset (I/2011)
Ihan vaan coolbasicin omaa dokumentaatiota lukemaan, tässä on linkki nettiversioon, ole hyväanti-koodari wrote:Olisiko jossain opas funktioista , kun en itse osaa.
I know not what I know, but I do know that it's not beautiful.
- anti-koodari
- Newcomer
- Posts: 13
- Joined: Fri Dec 30, 2011 9:40 am
Re: Tyhmät kysymykset (I/2011)
-
- Advanced Member
- Posts: 364
- Joined: Wed Dec 03, 2008 3:48 pm
- Location: Turku
Re: Tyhmät kysymykset (I/2011)
Miten nyt tuota yksinkertaisemmin voi asian sanoa, yritetään kuitenkinanti-koodari wrote:Tarkoitan aivan yksinkertaisen selityksen kanssa.
I know not what I know, but I do know that it's not beautiful.
Re: Tyhmät kysymykset (I/2011)
- anti-koodari
- Newcomer
- Posts: 13
- Joined: Fri Dec 30, 2011 9:40 am
Re: Tyhmät kysymykset (I/2011)
Re: Tyhmät kysymykset (I/2011)
Koodi jossa kirjoitetaan hei:
Code: Select all
Repeat
Text 20, 20, "Hei!"
DrawScreen
Forever
Code: Select all
Repeat
KirjoitaHei() //Funktiokutsu
DrawScreen
Forever
//Itse funktio
Function KirjoitaHei()
Text 20, 20, "Hei!"
EndFunction
Code: Select all
Repeat
KirjoitaJotain("Tämä teksti annetaan parametrina!")
DrawScreen
Forever
Function KirjoitaJotain(parametri$)
//Tässä funktiossa muuttuja "parametri" pitää sisällään annetun tekstinpätkän
Text 20, 20, parametri
EndFunction
Code: Select all
Repeat
//Jos funktio palauttaa arvo, voi sitä käyttää myös muiden komentojen kanssa
Text 20, 20, KirjoitaHei2()
DrawScreen
Forever
//Tämä funktio ei yksinään kirjoita sanaa "Hei2", vaan vain palauttaa merkkijonon "Hei2"
Function KirjoitaHei2()
//Return-käsky tekee kaksi asiaa: 1. Funktiosta poistutaan välittömästi. 2. Palautetaan jokin arvo
//Tässä palautetaan arvo "Hei2"
Return "Hei2"
a = 4 //tätä ei ikinä tapahdu, koska funktiosta poistutaan returnin kohdalla
EndFunction
Code: Select all
Repeat
luku1 = 5
luku2 = 10
Text 20, 20, "Paljonko on " + luku1 + " + " + luku2 + "?"
Text 20, 40, "Vastaus: " + Summa(luku1, luku2)
DrawScreen
Forever
//Funktio jolle annetaan kaksi parametria
Function Summa(l1, l2)
Return l1 + l2 //Lasketaan luvut yhteen ja palautetaan funktiosta
EndFunction
Re: Tyhmät kysymykset (I/2011)
- Funktion sisällä on oma nimiavaruus. Eli kaikki muuttujat, joita käytät funktion sisällä "pysyy" sen sisällä eikä niitä voida käyttää sen ulkopuolella. Vastaavasti muun ohjelman käyttämät muuttujat ovat näkymättömiä funktiolle (eli voit käyttää samannimisiä muuttujia, mutta ne ovat silti eri muuttujia). Poikkeuksena taulukot, globaalit muuttujat sekä tyyppikokoelmat.
- Funktiolle voi antaa muuttujia parametreinä. Koska muuttuja ei pysty suoraan lukemaan pääohjelman käyttämiä muuttujia, sille voidaan ilmoittaa haluttuja tietoja parametreinä (sulkujen sisällä olevat arvot/muuttujat).
- Funktio palauttaa arvon. Funktiota voi ajatella muuttujana, joka saa arvon vasta silloin, kun sitä pyydetään. Usein tämä arvo riippuu funktiolle välitetyistä parametreistä.
Tärkeä kysymys on myös, milloin kannattaa kirjoittaa koodia funktion sisään? Käytännössä aina, kun sinulla on usein koodissa toistuva pätkä, joka laskee jonkin muuttujan arvon tai suorittaa tietyn tehtävän. Aliohjelmaa kannattaa käyttää mieluummin, jos tämä pätkä on todella riippuvainen muista muuttujista, joita ei ole järkeä antaa parametreinä. Poikkeuksia voi tietty tehdä optimointimielessä, mutta siitä ei kannata välittää ennen kuin hallitsee hyvin kielen käytön.
-
- Advanced Member
- Posts: 364
- Joined: Wed Dec 03, 2008 3:48 pm
- Location: Turku
Re: Tyhmät kysymykset (I/2011)
On totta, että funktioilla on oma nimiavaruus, mutta tämän voi kiertää muistipaloilla, jotka tässä tapauksessa toimivat kuin C/C++-kielien osoittimina, muistipaloihin ei kannata sekaantua, ellet ole aivan varma, että osaat käyttää niitä, ja tiedät niiden vaarat, ta käytätä jotain DLL-kirjastoo etc. Ite olen koodaillut aikast kauan CoolBasicilla( kauan ja kauan, aloitin vuonna 2007) enkä silti osaa käyttää kunnolla muistipaloja(tosin en ymmärrä edes trigonometriaa, mikä vähän nolottaa )axu wrote:Tekstiä funktioista ja aliohjelmista
Ok, tässä kuitenkin mun kysymykset:
- 1) Mä kysyin IRC:issä vähän siitä, että miten taulukoita voi laittaa typen kenttiin, ei siitä sen enempää, siis kysymys on, että miten voi korostaa tilen esim. laatikolla, mä olen kato tekemässä pientä strategiapelin tynkää.
2)Äsköseen liittyen, tukeeko CBAstar-kirjasto reittiä, joka menee:- a)tilejen kautta
b)jossa mennään tilejen kulmien yli, eli 45 asteen kulmissa
- a)tilejen kautta
I know not what I know, but I do know that it's not beautiful.
Re: Tyhmät kysymykset (I/2011)
Fiksasinpa listasi ainakin kuntoon. Vastaukseni alla:skorpioni-cb wrote:
- miten voi korostaa tilen esim. laatikolla, mä olen kato tekemässä pientä strategiapelin tynkää.
- Äsköseen liittyen, tukeeko CBAstar-kirjasto reittiä, joka menee:
- tilejen kautta
- jossa mennään tilejen kulmien yli, eli 45 asteen kulmissa
- Kun tekee typen instanssin, jossa siellä olevan objekti-muuttujan tekee poimitavaksi, miten saa tietää, mikä typen instanssi on poimittu(objekti), jotta voidaan antaa esim joukolle käskyn
- Etsit tilen maailmankoordinaatit vaikkapa näillä funktioilla (kts. kommentit) ja sitten piirrät laatikon suoraan maailmankoordinaatteihin (DrawToWorld ON) seuraavanlaisesti (maailmaX ja maailmaY ovat edellisten funktioiden palautusarvoja ja tileLeveys ja tileKorkeus ovat yksittäisen tilen leveys tai korkeus pikseleissä):
Code: Select all
Box maailmaX, maailmaY, tileLeveys, tileKorkeus, OFF
- Molempia tuetaan. Katso cbAStar mukana tullut "Tilemap Example.cb" tiedosto.
- Tuota tarkoitusta varten suosittelisin käyttämään ObjectInteger-funktiota ja tallentamaan ConvertToInteger()-funktion arvon objektin yhteyteen. Sitten kun objekti on poimittu niin lukisit ObjectIntegerillä tyypin osoittimen kokonaisluvun ja käyttäisit ConvertToType() funktiota tyypin instanssin selville saamiseksi. Tämän tyylistä koodia siis:
Code: Select all
instanssi.TYYPPIKOKOELMA = New(TYYPPIKOKOELMA) instanssi\objekti = CloneObject(masterObjekti) ObjectInteger instanssi\objekti, ConvertToInteger(instanssi) ' Sitten kun tarvitset sen instanssin: poimittu = PickedObject() If poimittu Then instanssi.TYYPPIKOKOELMA = ConvertToType(ObjectInteger(poimittu)) ' Käytä instanssia vapaasti nyt. EndIf
Oikestaan cbAStarin esimerkkiohjelman mukana näyttäisi tulevan tuon ykköskohdan vaatimat funktiot. Ne kulkevat siellä nimellä NodeXtoWorldX ja NodeYtoWorldY.
Korjasin boksin piirron oikeaksi, ei siinä tarvinnutkaan lisäillä tai miinustella mitään erikoista.
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
-
- Advanced Member
- Posts: 364
- Joined: Wed Dec 03, 2008 3:48 pm
- Location: Turku
Re: Tyhmät kysymykset (I/2011)
VesQ wrote:Fiksasinpa listasi ainakin kuntoon. Vastaukseni alla:skorpioni-cb wrote:
- miten voi korostaa tilen esim. laatikolla, mä olen kato tekemässä pientä strategiapelin tynkää.
- Äsköseen liittyen, tukeeko CBAstar-kirjasto reittiä, joka menee:
- tilejen kautta
- jossa mennään tilejen kulmien yli, eli 45 asteen kulmissa
- Kun tekee typen instanssin, jossa siellä olevan objekti-muuttujan tekee poimitavaksi, miten saa tietää, mikä typen instanssi on poimittu(objekti), jotta voidaan antaa esim joukolle käskyn
- Etsit tilen maailmankoordinaatit vaikkapa näillä funktioilla (kts. kommentit) ja sitten piirrät laatikon suoraan maailmankoordinaatteihin (DrawToWorld ON) seuraavanlaisesti (maailmaX ja maailmaY ovat edellisten funktioiden palautusarvoja ja tileLeveys ja tileKorkeus ovat yksittäisen tilen leveys tai korkeus pikseleissä):
Code: Select all
Box maailmaX + 1, maailmaY + 1, tileLeveys - 2, tileKorkeus - 2, OFF
- Molempia tuetaan. Katso cbAStar mukana tullut "Tilemap Example.cb" tiedosto.
- Tuota tarkoitusta varten suosittelisin käyttämään ObjectInteger-funktiota ja tallentamaan ConvertToInteger()-funktion arvon objektin yhteyteen. Sitten kun objekti on poimittu niin lukisit ObjectIntegerillä tyypin osoittimen kokonaisluvun ja käyttäisit ConvertToType() funktiota tyypin instanssin selville saamiseksi. Tämän tyylistä koodia siis:
Code: Select all
instanssi.TYYPPIKOKOELMA = New(TYYPPIKOKOELMA) instanssi\objekti = CloneObject(masterObjekti) ObjectInteger instanssi\objekti, ConvertToInteger(instanssi) ' Sitten kun tarvitset sen instanssin: poimittu = PickedObject() If poimittu Then instanssi.TYYPPIKOKOELMA = ConvertToType(ObjectInteger(poimittu)) ' Käytä instanssia vapaasti nyt. EndIf
Olen onnistunut ratkomaan seuranta-ongelman CBAStarin FollowPath-funktiolla, eikä kulma-vakioita edes tarvita
I know not what I know, but I do know that it's not beautiful.
Re: Tyhmät kysymykset (I/2011)
Hieno homma! Huomaathan, että muokkasin laatikon piirtoa varten tarvittavaa koodia viestissäni. Edellinen koodi oli hieman virheellistä.skorpioni-cb wrote:EDIT:Olen onnistunut ratkomaan seuranta-ongelman CBAStarin FollowPath-funktiolla, eikä kulma-vakioita edes tarvita
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: Tyhmät kysymykset (I/2011)
Code: Select all
For i=1 To 16
For x=1 To MapWidth()
For y=1 To MapHeight()
If GetMap2(3,x,y)=10 Then
If VIHUTELOSSA(i)=0 Then
VIHUTx(i)=(x * 32 -ObjectSizeX(kartta) / 2)
VIHUTy(i)=-(y * 32 - ObjectSizeY(kartta) / 2)
VIHUT(i)=CloneObject (v)
PositionObject VIHUT(i),VIHUTx(i),VIHUTy(i)
VIHUTELOSSA(i)=1
EndIf
EndIf
Next y
Next x
Next i
Re: Tyhmät kysymykset (I/2011)
Kyllä tuo koodinpätkä näyttäisi olevan ihan toimiva. Oletko tarkistanut että pääset varmasti tuonne sisimpään for-looppiin asti etteivät nuo If-ehtolauseet estä sinne pääsyä?beginner wrote:Mikähän on vikana, kun yritän sijoittaa vihuja tilekartan data-kerroksen avulla, mutta kaikki vihut sijoittuvat samoihin koordinaatteihin?Data-kerroksessa on siis määritelty vihuille 16 eri paikkaa, mutta tuolla koodilla kaikki sijoittuvat ensimmäiseen määriteltyyn paikkaan. Vika on varmaan useissa sisäkkäisissä for-rakenteissa, mutta en nyt äkkiseltään keksi kuinka ne tulisi tehdä jotta koodi toimisi.Code: Select all
--nips--
Huomasin myös että käyt vähän hitaalla tavalla silmukoita läpi, kun tarkistat jokaisen vihollisen kohdalla aina uudelleen kartan kaikki tilet. Optimoidumpi versio olisi siirtää se ensimmäinen "For i=1 To 16" silmukka sisimmäiseksi, kas näin:
Code: Select all
For x=1 To MapWidth()
For y=1 To MapHeight()
If GetMap2(3,x,y)=10 Then
For i=1 To 16
If VIHUTELOSSA(i)=0 Then
VIHUTx(i)=(x * 32 -ObjectSizeX(kartta) / 2)
VIHUTy(i)=-(y * 32 - ObjectSizeY(kartta) / 2)
VIHUT(i)=CloneObject (v)
PositionObject VIHUT(i),VIHUTx(i),VIHUTy(i)
VIHUTELOSSA(i)=1
EndIf
Next i
EndIf
Next y
Next x
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: Tyhmät kysymykset (I/2011)
Re: Tyhmät kysymykset (I/2011)
Code: Select all
For a=1 To 16
MoveObject VIHUT(a),Rand(1,2)
Next a