**CoolBasic** on Jukka Lavosen kehittämä ohjelmointikieli. Kieli on tarkoitettu lähinnä peliohjelmointiin ja siitä on pyritty tekemään aloittelijaystävällinen. CoolBasicin syntaksi on osittain lainattu BlitzBasic-ohjelmointikielestä. CoolBasicin viimeinen versio julkaistiin vuonna 2005. Ohjelmointikieltä ei enää kehitetä.

CoolBasicin mukana tulevaan ohjelmointiympäristöön sisältyy upotettu käyttöohje, joka sisältää luettelon ohjelmointikielen eri ominaisuuksista. Käyttöohje on saatavilla vain suomeksi. Osia käyttöohjeesta ja esimerkkikoodeista käännettiin CoolBasic-yhteisön voimin englannin kielelle, mutta nämä käännökset eivät ole virallisesti jaossa. CoolBasic ei ole saavuttanut suurta suosiota, mutta on silti kohtuullisen tunnettu ohjelmoijien piirissä. CoolBasicin sivuston keskustelupalstalla oli vuonna 2021 yli 1 700 rekisteröitynyttä käyttäjää.

Tekniikasta
-----------

CoolBasiciin on sisäänrakennettu peliohjelmointia helpottavia ominaisuuksia, kuten objektisysteemi ja automaattinen törmäyksentunnistus. CoolBasicissa objektit eroavat normaaleista sprite-grafiikoista ominaisuuksiltaan ja sisäänrakennetuilta toiminnoiltaan. Objektien liikuttaminen, törmäyksien käsittely ja objektien väliset sijainnit on pyritty tekemään ohjelmoinnin kannalta yksinkertaisiksi.

CoolBasic käyttää äänien ja musiikin toistamiseen kaupallista FMOD-äänikirjastoa. FMOD-lisenssin mukaisesti kaupallisille sovelluksille tulee hankkia oma, maksullinen lisenssi. Ilmaiseksi jaettavat ohjelmat eivät tarvitse lisenssiä. CoolBasicistä pystyy kutsumaan myös DLL-kirjastoissa olevia funktioita, joten FMOD:ia ei ole pakko käyttää.

CoolBasic sisältää myös sisäänrakennetun tilekarttamoottorin, joka helpottaa paljon peliohjelmoijan työtä tehdä peliinsä kartat.

### Näppäimistökoodit

CoolBasic käyttää näppäimistön lukemiseen Scan-koodeja, sillä ASCII-merkistö ei sisällä vastineita kaikille näppäimille. Jokaiselle näppäimistön näppäimelle on annettu numero, jota kutsutaan scan-koodiksi.

Karttaformaatit
---------------

Työympäristön mukana tulee myös Tilester-ohjelma pelikenttien luomista varten. Tilester käyttää omaa karttaformaattiaan pelikenttien tallennuksessa. CoolBasicista löytyy suora tuki tälle tiedostomuodolle.

Vaihtoehtoisia Tilesterin karttaformaatteja tukevia ohjelmia ovat Jukka Mähösen CoolBasic-ohjelmointikielellä itsellään kehittämä A Stigmator ja Marko Hiltusen kehittämä TileGen.

CoolBasic V3
------------

CoolBasicin viimeinen versio julkaistiin vuonna 2005, mutta ohjelmointikieltä yritettiin kehittää vielä pitkään tämän jälkeenkin.

Vuosina 2008–13 CoolBasicista kehitettiin kokonaan uutta kehittyneempää erillisversiota, josta käytettiin nimeä "CoolBasic V3". Samalla aiemmin julkaistua CoolBasicia alettiin kutsua nimellä "CoolBasic Classic". Uudesta CoolBasic V3 -versiosta huolimatta myös CoolBasic Classicin kehitystyötä oli tarkoitus jatkaa. Kummastakaan projektista ei kuitenkaan ikinä julkaistu yhtäkään versiota ja kehitystyö hiipui ajan myötä.

Esimerkkiohjelmia
-----------------

### Esimerkkiohjelma

Seuraava esimerkkikoodi luo 400 pikseliä korkean ja 300 pikseliä leveän ohjelmaikkunan (oletus), johon tulostuu teksti *Hello world!*, ja joka sulkeutuu mitä tahansa näppäintä painamalla.

```
**Print** "Hello world!"  *'Tulostaa näytölle tekstiä*
**WaitKey**  *'Odottaa näppäimenpainallusta*
```

### Esimerkkiohjelma 2

Tämä koodi luo ohjelman jossa kysytään käyttäjän nimeä. Tämän jälkeen näytölle tulostuu teksti *Moi "sinun nimesi"!*.

```
**SCREEN** 320,240,0,0  *'Asettaa ikkunan leveyden, korkeuden, värisyvyyden, ja näyttötilan*
**Repeat**  *'Aloitetaan silmukka*
    nimi$=**Input**("Nimesi: ")  *'Kysyy käyttäjän nimeä*
    **DrawScreen**  *'Päivittää näytön*
**Until KeyHit**(cbkeyReturn)  *'Silmukka loppuu painamalla Enteriä*
**CloseInput**

**Cls**  *'Tyhjennetään ruutu*
**AddText** "Moi "+nimi$+"!"  *'Tulostaa nimen näytölle*
**DrawScreen**

**WaitKey**  *'Odottaa näppäimenpainallusta*
**End**  *'Lopettaa ohjelman*
```

### Esimerkkiohjelma 3

Tämä ohjelma lataa kuvan luoden siitä objektin ja sitten pyörittää sitä. Ohjelmassa hyödynnetään CoolBasicin mukana tulevaa kuvaa. Ohjelmakoodi voidaan ajaa suoraan koodieditorissa ilman tallennusta, jolloin kuvatiedosto latautuu oikeasta hakemistosta.

```
**SCREEN** 640,480,0,0  *'Asettaa ikkunan leveyden, korkeuden, värisyvyyden, ja näyttötilan*
sotilas=**LoadObject**("media\soldier.bmp", 72)  *'Lataa sotilaan grafiikan levyltä, ja asettaa sotilaan pyöritysarvon*
**Repeat**  *'Aloittaa silmukan*
    **TurnObject** sotilas, 5  *'Kääntää sotilasta 5 astetta*
    **DrawScreen**  *'Päivittää näytön*
**Until KeyHit**(cbkeyreturn)  *'Silmukka painamalla enteriä*
```

Kaikki esimerkit toimivat CoolBasicin Beta 10.x versioissa.

### Esimerkkiohjelma 4

Tässä esimerkissä esitellään teksti-komentoja.

```
Locate ScreenWidth ()-TextWidth ("Tämä teksti katoaa ENTERistä"),screenheight ()-textheight ("E") 'Asettaa sijainniksi näytön alareunan
AddText "Tämä teksti katoaa ENTERistä" 'Tulostaa näytölle tekstiä

xadd = 1 

Repeat

    If KeyHit(cbkeyreturn) Then 'cb=CoolBasic key=näppäin return=Enter
        ClearText 'Pyyhkii tulostetun tekstin
    EndIf

    Color 0,255,0 'Määrittää värin
    Text x,100,"LIIKKUU" 'Asettaa näytölle tekstiä määriteltyyn sijaintiin

    Color 255,0,0
    Text 0,0,"Punaista tekstiä"

    x = x + xadd 'Lisää muuttujaan x muuttujan xadd
    If x<0 Or x>ScreenWidth ()-TextWidth ("LIIKKUU") Then xadd= -xadd 
		'Jos x on pienempi kuin nolla tai x on suurempi kuin näytön leveys pikseleinä, muuta xadd:in arvo käänteiseksi, jolloin tekstin liikkuma suunta muuttuu

	DrawScreen
Forever

```

Lähteet
-------

* Foorumiaihe koskien Coolbasic Classic - muutoksia
* Coolbasicin kehittäjän artikkeli Classic - versiosta
* CoolBasicin kotisivut

### Viitteet

1. 1 2 3  CoolBasic *coolbasic.com*. Viitattu 17.1.2024. (englanniksi)

Aiheesta muualla
----------------

* CoolBasic wiki
* CoolBasicin kotisivu
* CoolBasicin kehittäjän blogi (Arkistoitu – Internet Archive)
* CoolBasicin keskustelualue
* Suomenkielinen manuaali
* Kuva näppäimistöstä johon on merkitty CoolBasicin scan-koodit