CoolBasicin aloitus

CoolBasiciin yleisesti liittyvä keskustelu.
Post Reply
User avatar
eNerGi
Member
Posts: 61
Joined: Wed Aug 05, 2009 10:48 am
Location: Lahti

CoolBasicin aloitus

Post by eNerGi »

Terve! Ajattelin yrittää opetella CoolBasicin käyttöä, mutta en tiedä mistä aloittaa.

Josko joku voisi kertoa yksinkertaisia koodinpätkiä, joita voisi sitten soveltaa ja tehdä jotain pientä. Tekstinpiirto on ainoa, jonka osaan tehdä...
Väsymys on harhaa, vain Coca Cola totta.
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: CoolBasicin aloitus

Post by MrMonday »

No Terveppä terve, ja tervetuloa foorumeille ja coolbaisicin käyttäjäksi :)

Ensimmäisenä suosittelisin tutustumaan coolbasicin oppitunteihin, jotka löytyvät suoraan editorista.
Toisena kannattaa selailla manuaalia, se on yllättävän pätevä, kun törmää ongelmiin, ja muutoinkin hyödyllinen koodaillessa ;)

Ja myös täältä foorumeilta löytyy myös paljon kaikkea hyödyllistä aloittelijoille, käytä hakua..
User avatar
eNerGi
Member
Posts: 61
Joined: Wed Aug 05, 2009 10:48 am
Location: Lahti

Re: CoolBasicin aloitus

Post by eNerGi »

Selvä. Rupean selailemaan vähän oppaita. Onnistun piirtämään tekstejä eri paikkoihin, mutta nyt pyrin saamaan tehtyä taustavärin vaihdon :D
Väsymys on harhaa, vain Coca Cola totta.
User avatar
KillBurn
Advanced Member
Posts: 339
Joined: Wed Aug 29, 2007 5:02 pm

Re: CoolBasicin aloitus

Post by KillBurn »

Tuossa joskus tekemäni räiskintäpelin pohja. Ehkä siitä on apua muutaman ongelman kanssa, esim. vihollisten ja panosten luonti\tyypit, energiat+muutamia perusteita.
viewtopic.php?f=12&t=1050
Sumu Games: Sam, Ur eye!
User avatar
eNerGi
Member
Posts: 61
Joined: Wed Aug 05, 2009 10:48 am
Location: Lahti

Re: CoolBasicin aloitus

Post by eNerGi »

^ Kiitos, mutta ensin ehkä aloitan vähän helpommasta =D
Väsymys on harhaa, vain Coca Cola totta.
<MrMonday>

Re: CoolBasicin aloitus

Post by <MrMonday> »

Niin ja komento-oppaassa löytyy (lähes) jokaisen komennon kohdalta esimerkkit,
joita kannattaa myös kokeilla, niin oppii eri komentojen käyttötarkoitukset..
11v
Member
Posts: 73
Joined: Wed Jun 10, 2009 10:13 pm

Re: CoolBasicin aloitus

Post by 11v »

No, jos haluat tehdä heti jonkun pelin, niin tee ne objecteilla. Suosittelen katsomaan esimerkkiä :lol:
Esim. (Huom. Tämä on hyvin yksinkertainen vihollisen väistely peli)

Code: Select all


' 'by' 11v Tämä on helpompaa kuin luulisi =)

' 'Lue kaikki ohjetekstit tästä!'

' Eli tämä on yksinkertainen peli, et saa osua viholliseen
' joka seuraa sinua


' Ensin ladataan 'objectit'
' Sen jälkeen aloitetaan silmukka
' Heti silmukassa ensimmäisenä on 'gosub'
' Se hyppää kohtaan 'Liikkuminen'
' Siellä on liikumiskomennot
' Sieltä palataan takaisin silmukkaan 'return' käskyllä
' Sen jälkeen tuu komentoja jotka tekee viholliselle
' perjaatteelisen älyn
' sen jälkeen katsotaan osuuko se sinuun
' jos osuu luodaan raportti joka, kertoo pelaajalle että
' 'hävisit'



'Scan =  Näppäinkoodit


ukko = LoadObject("Media\guy.bmp",72)
'Tehtiin 'ukko' niminen 'objecti'. Jolla on (72 'kääntyvyyssuuntaa')


vihu = LoadObject("Media\ukkeli2.bmp",72)
'Tehtiin 'vihu' niminen 'objecti'. Jolla on (72 'kääntyvyyssuuntaa')
PositionObject vihu, 100, 100
'Siirtää 'vihun' viistostiylöspäin
'' (Huom. objecteilla on erillainen kordinaatisto)




Repeat
' Aloitetaan pääsilmukka, (Repeat silmukoita voi olla monia)

Gosub Liikkuminen 
' Hyppää ohjelman kohtaan : 'Liikkuminen:'
' voisit laittaa liikkumis komennot tähänkin






PointObject vihu, ukko
' Kääntää 'vihun' 'ukko' kohden
' Löydät tämän komennon 'ohjekirjasta / '
' 'komennot / objectit'

MoveObject vihu, 1




If ObjectsOverlap(vihu, ukko)
' Jos 'vihu ' ja ' ukko' on päälekkäin
' Löydät tämänkin komenon 'ohjekirjasta / '
' 'komennot / objectit'

MakeError "Hävisit"
' Luo keinotekoisen 'errorin' Jossa lukee 'hävisit'
' ('HUOM. Ohjelma sulkeutuu heti sen jälkeen)

EndIf
' Lopetttaa 'if' lauseen




DrawScreen
' 'Tärkein komento ilman sitä kuvaa ei olisi'
' Kokeile 'poistaa' se. 'Sen jälkeen' kokoile laittaa sen perään 'off'


Forever
' lopetetaan pääsilmukka






Liikkuminen:
' Tämä on se 'gosub'
' 'gosub' hyppää johonkin ohjelman kohtaan ja palaa takaisin
' 'return' kohdassa



If KeyDown(200)
'Jos 'up' painike ('scan 200') = pohjassa
MoveObject ukko, 5
'Liikutaa 'ukko' eteenpäinpäin (')
EndIf
'Lopettaa 'if' lauseen


If KeyDown(208)
'Jos 'down' painike ('scan 208') = pohjassa
MoveObject ukko, -5
'Liikutaa 'ukkoa' taaksepäinpäin
EndIf
'Lopettaa 'if' lauseen


If KeyDown(205)
'Jos 'right' painike ('Scan 205') = pohjassa
TurnObject ukko, -5 
'Kääntää 'ukkoa' oikeallepäin
EndIf
'Lopettaa 'if' lauseen


If KeyDown(203)
'Jos 'left' painike ('Scan 203') = pohjassa
TurnObject ukko, 5
'Kääntää 'ukkoa' vasemallepäin
EndIf
'Lopettaa 'if' lauseen


Return
' Palaa takaisin 'pääsilmukkaan 
EDIT:

Peli näyttää pitkältä, koska siinä on sinulle tarkoitettuja ohjeita noin 60%-80% :o

Black city peleistä parhain
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: CoolBasicin aloitus

Post by axu »

11v wrote:No, jos haluat tehdä heti jonkun pelin, niin tee ne objecteilla. Suosittelen katsomaan esimerkkiä :lol:
Esim. (Huom. Tämä on hyvin yksinkertainen vihollisen väistely peli)

Code: Select all


' 'by' 11v Tämä on helpompaa kuin luulisi =)

' 'Lue kaikki ohjetekstit tästä!'

' Eli tämä on yksinkertainen peli, et saa osua viholliseen
' joka seuraa sinua


' Ensin ladataan 'objectit'
' Sen jälkeen aloitetaan silmukka
' Heti silmukassa ensimmäisenä on 'gosub'
' Se hyppää kohtaan 'Liikkuminen'
' Siellä on liikumiskomennot
' Sieltä palataan takaisin silmukkaan 'return' käskyllä
' Sen jälkeen tuu komentoja jotka tekee viholliselle
' perjaatteelisen älyn
' sen jälkeen katsotaan osuuko se sinuun
' jos osuu luodaan raportti joka, kertoo pelaajalle että
' 'hävisit'



'Scan =  Näppäinkoodit


ukko = LoadObject("Media\guy.bmp",72)
'Tehtiin 'ukko' niminen 'objecti'. Jolla on (72 'kääntyvyyssuuntaa')


vihu = LoadObject("Media\ukkeli2.bmp",72)
'Tehtiin 'vihu' niminen 'objecti'. Jolla on (72 'kääntyvyyssuuntaa')
PositionObject vihu, 100, 100
'Siirtää 'vihun' viistostiylöspäin
'' (Huom. objecteilla on erillainen kordinaatisto)




Repeat
' Aloitetaan pääsilmukka, (Repeat silmukoita voi olla monia)

Gosub Liikkuminen 
' Hyppää ohjelman kohtaan : 'Liikkuminen:'
' voisit laittaa liikkumis komennot tähänkin






PointObject vihu, ukko
' Kääntää 'vihun' 'ukko' kohden
' Löydät tämän komennon 'ohjekirjasta / '
' 'komennot / objectit'

MoveObject vihu, 1




If ObjectsOverlap(vihu, ukko)
' Jos 'vihu ' ja ' ukko' on päälekkäin
' Löydät tämänkin komenon 'ohjekirjasta / '
' 'komennot / objectit'

MakeError "Hävisit"
' Luo keinotekoisen 'errorin' Jossa lukee 'hävisit'
' ('HUOM. Ohjelma sulkeutuu heti sen jälkeen)

EndIf
' Lopetttaa 'if' lauseen




DrawScreen
' 'Tärkein komento ilman sitä kuvaa ei olisi'
' Kokeile 'poistaa' se. 'Sen jälkeen' kokoile laittaa sen perään 'off'


Forever
' lopetetaan pääsilmukka






Liikkuminen:
' Tämä on se 'gosub'
' 'gosub' hyppää johonkin ohjelman kohtaan ja palaa takaisin
' 'return' kohdassa



If KeyDown(200)
'Jos 'up' painike ('scan 200') = pohjassa
MoveObject ukko, 5
'Liikutaa 'ukko' eteenpäinpäin (')
EndIf
'Lopettaa 'if' lauseen


If KeyDown(208)
'Jos 'down' painike ('scan 208') = pohjassa
MoveObject ukko, -5
'Liikutaa 'ukkoa' taaksepäinpäin
EndIf
'Lopettaa 'if' lauseen


If KeyDown(205)
'Jos 'right' painike ('Scan 205') = pohjassa
TurnObject ukko, -5 
'Kääntää 'ukkoa' oikeallepäin
EndIf
'Lopettaa 'if' lauseen


If KeyDown(203)
'Jos 'left' painike ('Scan 203') = pohjassa
TurnObject ukko, 5
'Kääntää 'ukkoa' vasemallepäin
EndIf
'Lopettaa 'if' lauseen


Return
' Palaa takaisin 'pääsilmukkaan 
EDIT:

Peli näyttää pitkältä, koska siinä on sinulle tarkoitettuja ohjeita noin 60%-80% :o

Aijaij aika huonon näköinen esimerkki, Goto/Gosub ja MakeError loppu, huonoimpia tapoja :o
Sitten vielä päänsärkyä aiheutti 'objectit' ja kaikki muut heittomerkit!

Kannattee sitten selata manuaalista muitakin kuin niitä tummennettuja kohtia, jotka on kuitenkin tärkeimmästä päästä ;)
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: CoolBasicin aloitus

Post by valscion »

axu wrote:Aijaij aika huonon näköinen esimerkki, Goto/Gosub ja MakeError loppu, huonoimpia tapoja :o
Sitten vielä päänsärkyä aiheutti 'objectit' ja kaikki muut heittomerkit!

Kannattee sitten selata manuaalista muitakin kuin niitä tummennettuja kohtia, jotka on kuitenkin tärkeimmästä päästä ;)
No minun mielestäni tuo oli oikeastaan aika hyväkin esimerkki. Mitä nyt, siitä puuttui sisennykset ja puhuttiin juuri objecteista vaikka ne on objekteja, ei se silti laatua paljoa vähennä. Gosubit on nopeampia kuin funktiot, ja koska Gosub ei sekavoita koodia läheskään yhtä paljon kuin Goto (koska Gosubista palataan aina Return-käskyllä) ei sen käyttökään ole huonoa harjoitusta.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: CoolBasicin aloitus

Post by axu »

VesQ wrote:
axu wrote:Aijaij aika huonon näköinen esimerkki, Goto/Gosub ja MakeError loppu, huonoimpia tapoja :o
Sitten vielä päänsärkyä aiheutti 'objectit' ja kaikki muut heittomerkit!

Kannattee sitten selata manuaalista muitakin kuin niitä tummennettuja kohtia, jotka on kuitenkin tärkeimmästä päästä ;)
No minun mielestäni tuo oli oikeastaan aika hyväkin esimerkki. Mitä nyt, siitä puuttui sisennykset ja puhuttiin juuri objecteista vaikka ne on objekteja, ei se silti laatua paljoa vähennä. Gosubit on nopeampia kuin funktiot, ja koska Gosub ei sekavoita koodia läheskään yhtä paljon kuin Goto (koska Gosubista palataan aina Return-käskyllä) ei sen käyttökään ole huonoa harjoitusta.
En tiennytkään, että funktiot ovat hitaampia kuin gosubit, eli onko goto kaikkein nopein tapa hypätä koodissa(jos luuppeja ja ehtolauseita ei lasketa)?
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
User avatar
kaneli2000
Guru
Posts: 1059
Joined: Mon Mar 17, 2008 2:40 pm
Location: Lempäälä

Re: CoolBasicin aloitus

Post by kaneli2000 »

No, aloittelijana kävisin ensimmäiseksi kaikki tutoriaalit huolella ja ajatuksella läpi, ja sitten alkaisin vain koodaamaan. CoolBasicissa parasta palaa eli manuaalia hyödynnetään vähän eri tavalla kuin ihan vaan lukemalla, eli aina kun tulee joku bugi vastaan, luet manuaalista mitä tehdä.

Jos manuaalia vain lukee ja lukee ja lukee, ei opi mitään: parhaiten opit kantapään kautta.

Niin ja myös täällä foorumilla kannattaa katsella esimerkkiosiota.
I see the rainbow rising
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: CoolBasicin aloitus

Post by phons »

Tämmöinen perussetti, jolla voi lähteä liikkeelle:

1. Lue tutoriaalit, F8, ja käy niitä läpi huolellisesti, kokeile muokata niitä ja sen sellaista.
2. Sitten koodaamaan, ensin lähtdetään helpoista ja sitten siirrytään vaikeisiin:
- Jonkin näköinen tekstipeli on aina hyvä ensimäiseksi, näin tutustut parhaiten erilaisiin lausekkeisiin.
- Ruvetaan menemään haastavampaan, tee peliisi alkuvalikko, eli tee siihen nappulat, tällä harjoitetaan, joko kuvia tai piirtokomenotja.
- Sitten kunnon peleihin, esim. Pong-klooni(vai mikä se ny oli) on loppujen lopuksi aika helppo. Tosin Cos ja Sin tekevät tästä vähän haastavamman, aloitelijalle
- Nyt voitkin siirtyä niihin tehtäviin, noiden jälkeen pitäisi koko B-lohko jo mennä. Ehkä...
- Sitten voitkin tutkia vähän enemmän manuaalia, kokeile kaikkea mitä löydät, älä ujostele järjestelmän, muistin, ja partikkeleiden kanssa vaikka ne eivät kyllä olekkaan kovin helppoja aloitelijoille.(DLL on minullekkin vielä vähän uutta XD)
- Sitten voitkin siirtyä meikäläisten arkeen, ekana perus putkiräiskintä, sitten vaikka joku cool ninja tasohyppely jne. sitten jotain puzzlea, joutuu koodailessakin joskus miettimään. Ja viimeisenä tulee kysymys, se vaikein: "Rakas, koodataanko yhdessä MMORPG" :lol: :lol:
- No joo, tämän jälkeen voit koodailla kaikennäköistä mitä huvittaa, tosin tämän voisi sanoa jokaisen kohdan jälkeen.
3. Tiedän, kun olet puolitoistavuotta koodaillut ja kaikki ideat mennyt, niin menee sinne Efektit-topikkiin ja pistää sinne jotain tylsiä tekeleitään...
Image
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: CoolBasicin aloitus

Post by MaGetzUb »

Äläkä ikinä luovuta jos ei joku aluksi onnistu. :) "luovuttaminen on nynnyille." :D
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: CoolBasicin aloitus

Post by Jare »

axu wrote: En tiennytkään, että funktiot ovat hitaampia kuin gosubit, eli onko goto kaikkein nopein tapa hypätä koodissa(jos luuppeja ja ehtolauseita ei lasketa)?
Jos lenkit ja ehdot rajataan pois, niin jäljelle taitavat jäädä vain funktiot, gotot ja gosubit. Includella tietysti voi ainakin "hypätä" koodista pois ja tulla sitten takaisin. Sääli vain, ettei CB anna käyttää Includea useaan kertaan samalle tiedostolle.

Btw, tuli jokin aika sitten kirjoitettua testi eri lenkkien nopeudesta. Sisäänrakennettujen lenkkien lisäksi tein myös lenkit Gotolla ja funktiolla. Mielenkiintoisimpia seikkoja ovat mielestäni se, että For ja While ovat yhtä nopeita, mutta Repeat on näitä noin 1/3 nopeampi. Gotolla toteutettu lenkki taas suorituu suunnilleen samassa ajassa Whilen ja Forin kanssa, mikä ei ole ollenkaan huono suoritus. Funktiolla toteutettu lenkki (eli oikeastaan rekursio) puolestaan osoittaa vääjäämättä funktiokutsujen hitauden. Testikoodi:

Code: Select all


Const CYCLES = 1000000

tfor = Timer()
For i = 1 To CYCLES
Next i
time_for = Timer()-tfor

trepeat = Timer()
i=0
Repeat
	i+1
Until i = CYCLES
time_repeat = Timer()-trepeat

twhile = Timer()
i=0
While (i<CYCLES)
	i+1
Wend
time_while = Timer()-twhile

tgoto = Timer()
i = 0
GotoLoop:
i+1
If i < CYCLES Then Goto GotoLoop
time_goto = Timer()-tgoto

tfunction = Timer()
func(CYCLES)
time_function = Timer()-tfunction

Function func(i)
	If i > 0 Then func(i-1)
EndFunction

MakeError "For: "+time_for+Chr(13)+"Repeat: "+time_repeat+Chr(13)+"While: "+time_while+Chr(13)+"Goto: "+time_goto+Chr(13)+"Function: "+time_function
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: CoolBasicin aloitus

Post by JATothrim »

Rekursio ei oikeastaan ole mitään sukua loopeille. funktio kutsuu itseään jolloin sen muuttujat tallennetaan pinoon joka "kierroksella" Tein kokeeksi Jaren rekursio funktiota vastaavan gosub aliohjelman:

Code: Select all

Const CYCLES = 100000

tfunction = Timer()
func(CYCLES)
tfunction = Timer()-tfunction

tgosub = Timer()
param_i = CYCLES
Gosub SUB_func
tgosub = Timer()-tgosub

MakeError "Recursion:"+Chr(13)+"Function: "+tfunction+Chr(13)+"GoSub: "+tgosub
End

Function func(i)
   If i > 0 Then func(i-1)
EndFunction


SUB_func:
	i = param_i
	If i > 0
		param_i = i - 1
		Gosub SUB_func
	EndIf
Return
EDIT:

Ja, koska muuttujien tallettaminen pinoon pitäisi tehdä kokoelmilla, taukoilla tai muistipaloilla jätin sen tästä pois..

-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'.
Post Reply