Ve druhém článku věnovaném programovacím jazykům a knihovnám, které mohou být vhodné pro výuku programování a taktéž základů počítačové grafiky, si popíšeme další zajímavé projekty. Zatímco minule jsme se zabývali nástroji vhodnými spíše pro mladší děti (první stupeň ZŠ), dnes si popíšeme některé pokročilejší nástroje použitelné i na druhém stupni pro tvorbu komplexnějších projektů, včetně počítačových her.

Obsah

1. Programovací jazyky a knihovny určené pro výuku základů počítačové grafiky (2)

2. Frameworky a knihovny navržené pro snadnou a rychlou tvorbu 2D her

3. LÖVE

4. Pygame

5. Frameworky navržené pro tvorbu 3D her

6. Pyglet

7. Interpretry a překladače BASICu

8. sdlBasic

9. FreeBasic

10. Odkazy na Internetu

1. Programovací jazyky a knihovny určené pro výuku základů počítačové grafiky (2)

V dnešním článku o programovacích jazycích a knihovnách vhodných pro výuku programování s využitím počítačové grafiky navážeme na předchozí článek, v němž jsme si popsali trojici projektů použitelných (a taktéž používaných) pro první seznámení dětí s programováním. Připomeňme si, že se jednalo o projekt Scratch, v němž se programy vytvářejí vzájemným skládáním předpřipravených bloků představujících jednotlivé příkazy i řídicí konstrukce. Díky tomu vlastně ve vytvářených programech nemůže vzniknout syntaktická chyba, takže se studenti mohou soustředit na chyby sémantické a samozřejmě i na vlastní algoritmus, který je nutné implementovat. Dále jsme se zmínili o podobně koncipovaném projektu Snap!, který je založen na webových technologiích (HTML 5 + JavaScript) a navíc přidává i možnost vytvářet vlastní bloky (tj. vlastně pojmenované subrutiny či podprogramy). Třetím minule popsaným projektem byl Basic-256, tj. moderní reinkarnace BASICu podporující plnohodnotné strukturované programování a především pak snadné použití grafiky.

14

Obrázek 1: Vytvoření nového pojmenovaného bloku uživatelem v projektu Snap! popsaného minule.

Dnes se budeme zabývat poněkud vyspělejšími nástroji určenými původně pro tvorbu dvourozměrných i třírozměrných her; tyto nástroje jsou však díky použitým programovacím jazykům vhodné i pro výuku programování. Nejprve si popíšeme známé frameworky navržené pro tvorbu 2D her, které se jmenují LÖVE a Pygame a následně se budeme věnovat projektu Pyglet, v němž je možné díky návaznosti na grafickou knihovnu OpenGL vytvářet i aplikace s trojrozměrnou grafikou. Nezapomeneme ani na dvojici moderních BASICů, zejména na sdlBasic, což je jeden z nejjednodušeji použitelných jazyků využívajících možnosti známé knihovny SDL, a to na vyšším stupni abstrakce, než je tomu u většiny propojení (bindingů) mezi SDL a programovacími jazyky. Na závěr se zmíníme o FreeBasicu, což je poněkud překvapivě překladač a nikoli interpret.

20

Obrázek 2: Lissajousovy obrazce vykreslené v BASICu-256 popsaného minule.

2. Frameworky a knihovny navržené pro snadnou a rychlou tvorbu 2D her

Zdá se, že takřka ideálním tématem projektů, které je možné řešit již na druhém stupni ZŠ, jsou různé typy počítačových her. Ostatně stačí se jen podívat na projekty, které děti vytváří pro Micecraft a je zřejmé, že pro skutečně zajímavý projekt se minimálně část žáků nadchne. Pro tvorbu koncepčně většinou jednodušších 2D her lze použít různé typy skriptovacích vysokoúrovňových jazyků, které se začaly prosazovat již v dobách osmibitových mikropočítačů a své větší využití pak skriptovací jazyky nalezly na mnohem výkonnějších osobních počítačích. Kromě samotného jazyka je však nutné používat i nějakou vhodnou knihovnu pro práci s grafikou, zvukem a obsluhu vstupních zařízení (myš, klávesnice). V některých případech se jedná o jedinou knihovnu, která nabývá komplexnější podoby – frameworku. Pro potřeby výuky je důležité, aby byl takový framework postaven na snadno pochopitelných konceptech, které si lze snadno osvojit a vytvořit si tak mentální model celého frameworku. První dva dnes popisované frameworky – LÖVE a Pygame tento požadavek splňují.

03

Obrázek 3: Hra Gusanos, která využívá programovací jazyk Lua.

Před volbou frameworku použitého při výuce je nutné si zvolit vhodný (v tomto případě zcela jistě vysokoúrovňový) programovací jazyk. Určitý přelom (pravděpodobně není možné to nazvat přímo revolucí) v použití skriptovacích jazyků pro tvorbu her a jiných grafických aplikací nastal v roce 1993, kdy byla vydána první verze programovacího jazyka Lua. Tento programovací jazyk byl již od svých prvních verzí určen pro snadné vkládání (embedding) do jiných aplikací, mj. i her. A právě v oblasti počítačových her se Lua využívala a stále využívá velmi často, což ovšem není překvapivé, protože existuje relativně jednoduchá vazba mezi Luou a céčkem, samotný jazyk je vysokoúrovňový (dovolím si tvrdit, že skoro dosahuje kvalit Pythonu 🙂 a přitom pro spouštění skriptů je zapotřebí jen minimalisticky pojatý virtuální stroj. Tento jazyk byl použit v komerčních hrách, například v titulech Baldur’s Gate, Grim Fandango, adventure hra Escape from Monkey Island či herní série Blitzkrieg, ovšem Lua se často objevuje i v nekomerčních titulech (příkladem open source hry využívající možností skriptovacích jazyků je klon Liera, který nese název Gusanos).

04

Obrázek 4: Další snímek ze hry Gusanos, která využívá programovací jazyk Lua.

3. LÖVE

Systém LÖVE, jehož starší (dopředně nekompatibilní!) varianta byla popsána v rámci seriálu o programovacím jazyku Lua, je určen pro jednoduchou a především rychlou tvorbu her s 2D grafikou, hudbou a zvuky, které jsou naskriptované ve výše zmíněném programovacím jazyku Lua, popř. se v nich využívá pomocných funkcí naprogramovaných v céčku či C++ (je však možné provést vazbu i na další programovací jazyky). Velkou předností systému LÖVE je jeho snadná použitelnost, spočívající zejména v přehledném aplikačním programovém rozhraní (API) jednotlivých knihoven přítomných v tomto systému i jednoduché a snadno použitelné syntaxi jazyka Lua a jeho dynamickém typovém systému. Poněkud problematická je zpětná nekompatibilita se staršími verzemi LÖVE, což může vadit zejména studentům hledajícím inspiraci na Internetu (některé příklady totiž zkrátka nebudou funkční).

05

Obrázek 5: Framework LÖVE ve chvíli, kdy není načtena žádná hra (tento animovaný obrázek se mění v různých verzích knihovny LÖVE).

Samotný systém LÖVE interně využívá (tj. volá funkce) několika céčkových a C++ knihoven, především pak knihovny boost (obecné algoritmy pro aplikace vytvářené v C++), SDL (nastavení grafických režimů, přepnutí do režimu celé obrazovky, čtení stavu klávesnice, myši a joysticku), SDL_mixer (podpora hudby a zvuků), OpenGL (2D grafika, double buffering), DevIL (práce s rastrovými obrázky) a FreeType 2 (vykreslování písma), avšak vývojář, který pomocí LÖVE vytváří hry či jiné interaktivní aplikace s 2D grafikou, hudbou a zvuky, je od těchto knihoven zcela odstíněn aplikačním programovým rozhraním systému LÖVE a přijde tak do styku pouze se skripty napsanými v programovacím jazyku Lua. To je pro zamýšlené účely ideální stav, který však může přinášet problémy u rozsáhlejších her či dalších typů aplikací. Podrobněji se touto velmi zajímavou a populární knihovnou budeme zabývat v navazující části tohoto seriálu, kde si ukážeme několik demonstračních příkladů.

06

Obrázek 6: Ukázka blendingu v systému LÖVE.

4. Pygame

I přesto, že je programovací jazyk Lua při tvorbě počítačových her úspěšně používán přes dvacet let, objevují se i nové knihovny a enginy, které i v této oblasti využívají jiné vyšší (řekněme poněkud nepřesně skriptovací) programovací jazyky. Za zmínku zcela jistě stojí projekt Pygame, což je knihovna určená pro programovací jazyk Python, která interně volá funkce nativní knihovny SDL a několika dalších podpůrných knihoven. Myšlenka, na níž je Pygame postavena, je v mnoha ohledech podobná myšlence výše zmíněného systému LÖVE – implementace nízkoúrovňových operací nechť je vytvořena odborníky v programovacích jazycích C a C++; pokud budou tyto operace implementovány dostatečně rychle, je již možné zbytek hry naprogramovat ve vysokoúrovňovém jazyku Python. A ukazuje se, že je tato myšlenka – a obecně systém rozdělení aplikace mezi dva programovací jazyky (kompilovaný a skriptovací) – poměrně úspěšná, neboť v Pygame již vzniklo mnoho kvalitních her. I touto knihovnou se, podobně jako systémem LÖVE, budeme podrobněji zabývat později, pravděpodobně již ve třetí části tohoto seriálu.

07

Obrázek 7: Logo knihovny Pygame.

5. Frameworky navržené pro tvorbu 3D her

Výše stručně popsaná knihovna Pygame je kvůli své relativně těsné vazbě na nativní knihovnu SDL určena především pro tvorbu 2D her, tj. různých strategií (realtime i tahových), plošinovek, RPG apod. Ve chvíli, kdy je zapotřebí vytvořit plnohodnotnou trojrozměrnou hru, je možné namísto Pygame použít další knihovnu určenou pro programovací jazyk Python. Tato knihovna se jmenuje Pyglet a mezi její základní vlastnosti patří vazba na knihovnu OpenGL a tedy i nepřímo na grafické akcelerátory. Kromě vazby na knihovnu OpenGL však v Pyglet mohou programátoři najít i další zajímavé moduly, například pro práci s hudbou a se zvuky (ALSA, OpenAL, DirectSound), podporu pro různé formáty uložení hudby (zejména OGG/Vorbis), podporu pro načítání a zobrazování animací uložených v DivX, AVI, MPEG, H.263 atd.

08

Obrázek 8: Logo knihovny Pyglet.

6. Pyglet

Uveďme si příklad „aplikace“ vytvořené s využitím knihovny Pyglet. Aplikace po svém spuštění a inicializaci vytvoří okno, inicializuje kontext OpenGL a následně do okna vykreslí bílý trojúhelník:

from pyglet.gl import *
 
window = pyglet.window.Window()
 
@window.event
def on_draw():
    glClear(GL_COLOR_BUFFER_BIT)
    glLoadIdentity()
    glBegin(GL_TRIANGLES)
    glVertex2f(0, 0)
    glVertex2f(window.width, 0)
    glVertex2f(window.width, window.height)
    glEnd()
 
pyglet.app.run()

09

Obrázek 9: Výstup předchozího demonstračního příkladu.

Vzhledem k tomu, že OpenGL je stavový stroj, je možné měnit barvy jednotlivých vrcholů trojúhelníku. V tomto případě grafický akcelerátor trojúhelník vyplní s využitím Gouraudova stínování:

from pyglet.gl import *
 
window = pyglet.window.Window()
 
@window.event
def on_draw():
    glClear(GL_COLOR_BUFFER_BIT)
    glLoadIdentity()
    glBegin(GL_TRIANGLES)
    glColor3f(1, 0, 0)
    glVertex2f(window.width/2, 0)
    glColor3f(0, 1, 0)
    glVertex2f(0, window.height)
    glColor3f(0, 0, 1)
    glVertex2f(window.width, window.height)
    glEnd()
 
pyglet.app.run()

10

Obrázek 10: Výstup dalšího demonstračního příkladu.

Velmi snadno je možné pracovat s textovými objekty, což se ve hrách samozřejmě využije, například pro tvorbu menu, zobrazení skóre apod.:

from pyglet.gl import *
 
window = pyglet.window.Window()
 
title = pyglet.text.Label(text="Game Title", x=window.width/2 - 40, y=window.height/2)
 
@window.event
def on_draw():
    glClear(GL_COLOR_BUFFER_BIT)
    glLoadIdentity()
    glBegin(GL_TRIANGLES)
    glColor3f(1, 0, 0)
    glVertex2f(window.width/2, 0)
    glColor3f(0, 1, 0)
    glVertex2f(0, window.height)
    glColor3f(0, 0, 1)
    glVertex2f(window.width, window.height)
    glEnd()
    glColor3f(1, 1, 1)
    title.draw()
 
pyglet.app.run()

11

Obrázek 11: Výstup další úpravy demonstračního příkladu.

7. Interpretry a překladače BASICu

V následujících dvou kapitolách se (v tomto seriálu již naposledy) vrátíme k interpretrům a překladačům programovacího jazyka BASIC, resp. přesněji řečeno moderních variant tohoto jazyka, které až na některá klíčová slova a koncepty nemají mnoho společného s původními BASICy používanými na osmibitových domácích mikropočítačích i na některých šestnáctibitových osobních mikropočítačích. Předností dále popsaného sdlBasicu je existence snadno použitelného integrovaného vývojového prostředí a taktéž vazba na knihovnu SDL. Naproti tomu FreeBasic je zvláštní snahou o zpětnou kompatibilitu s QBasicem a navíc novými jazykovými konstrukcemi, například i možností práce s ukazateli, dynamickou pamětí apod. Navíc FreeBasic nabízí vazbu na mnoho knihoven, ať již se jedná o SDL, OpenGL či o knihovnu emulující původní grafické režimy video karet pro IBM PC (CGA, EGA atd.).

qbasic_1

Obrázek 12: Minimalisticky pojaté a přitom poměrně dobře použitelné IDE dodávané s QBasicem.

8. sdlBasic

Jedním z poměrně oblíbených moderních interpretrů programovacího jazyka BASIC je kromě minule popsaného projektu BASIC-256 i nástroj pojmenovaný sdlBasic. Jedná se o známý dialekt BASICu založený na projektu wxBasic (interpret BASICu propojený s knihovnou wxWidgets), který je doplněný o minimalisticky pojaté, ovšem pro výuku dostatečně vybavené integrované vývojové prostředí s grafickým uživatelským rozhraním a taktéž o velké množství příkazů a funkcí, pomocí nichž je možné pracovat s knihovnou SDL (Simple DirectMedia Layer). Právě díky dostupnosti knihovny SDL bylo v tomto dialektu BASICu naprogramováno poměrně velké množství různých her, grafických dem, ale i krátkých prográmků, které je v případě potřeby možné použít pro výuku. Stačí pouze navštívit stránku Code examples.

01

Obrázek 13: Integrované vývojové prostředí sdlBasicu.

sdlBasic byl dokonce portován i na Sony Playstation Portable, což mj. znamená, že většinu programů odladěných v tomto jazyku na osobním počítači (PC) je možné přenést na PSP a tam následně spustit (pro vývoj lze použít emulátor PSP). Podle mého názoru představuje velkou nevýhodu sdlBasicu fakt, že pro mnohé distribuce neexistuje jeho oficiální balíček a překlad ze zdrojových kódů je poměrně komplikovaný (možná to souvisí i s tím, že se vývoj pozastavil, protože poslední větší změny v programovém kódu tohoto nástroje proběhly v roce 2012 (http://sourceforge.net/p/sdlbasic/news/). Ze syntaktického hlediska se sdlBasic, podobně jako i další dnes popisovaný dialekt BASICu, přibližuje dalším moderním interpretrům a překladačům BASICu. To znamená, že se jedná o plnohodnotný strukturovaný programovací jazyk s podporou funkcí, subrutin (podprogramů) i strukturovaných programových smyček a nikoli o historický relikt založený na používání čísel řádků a nechvalně známých příkazů GOTO.

02

Obrázek 14: SdlBasic při výskytu syntaktické chyby přeruší běh programu a umožní chybnou část kódu opravit.

Dobrým příkladem toho, jak může vypadat moderně pojatý jazyk BASIC, jsou řídicí příkazy, tj. rozhodovací konstrukce a programové smyčky. sdlBasic podporuje příkazy if-then-else-end if, select case…end select, programové smyčky lze implementovat přes while…wend, do..loop, for…next či dokonce for each…next. Tyto smyčky jsou doplněny o příkazy continue, exit for či exit while (tyto příkazy jsou sice „ukecanější“, ovšem vedou k tvorbě dosti přehledného kódu). Jednou z poněkud netypických vlastností, která by mohla programátory při přechodu na sdlBasic z jiného BASICu překvapit, je to, že u příkazu next se neuvádí jméno řídicí proměnné smyčky (počitadla), tak, jako je tomu u mnoha dalších interpretrů programovacího jazyka BASIC. Dokumentace k samotnému jazyku i ke knihovním funkcím je dostupná online na adrese http://www.sdlbasic.altervista.org/main/guide/. Nebýt zmíněné nedostupnosti balíčků pro mnohé distribuce, byl by sdlBasic asi nejlepším kandidátem z této skupiny programovacích jazyků.

03

Obrázek 15: Informace o autorech sdlBasicu.

Podobně jako u dalších popisovaných nástrojů, i zde si na krátkých programech ukážeme syntaxi sdlBasicu:

setdisplay(256,256,32,1)
paper(0xFFFFFF)
ink(0x000000)
pen(0x000000)
cls
for y=0 to 256
    for x=0 to 256
        ink(x+y*256)
        putpixel(x,y)
    next
next
waitkey

04

Obrázek 16: Program, v němž je nejprve otevřeno okno s grafickou plochou o rozměrech 256×256 pixelů a bitovou hloubkou 32bpp, do něhož je prováděno vykreslování po jednotlivých pixelech, tj. na nejnižší úrovni abstrakce.

setdisplay(320,240,32,1)
paper(8^8-1)
ink(0)
pen(0)
cls
mousehide
 
for a=1 to 15
    b=rnd(10)
    c=rnd(10)
    if not (b>c) then
        prints(str$(b)+","+str$(c)+": b is not greater than c")
    end if
next
 
waitkey

05

Obrázek 17: Ukázka využití operátoru + pro spojování řetězců a taktéž toho, že číselné proměnné není zapotřebí deklarovat.

SetDisplay(320,240,32,1)
 
For i=0 To 120
    ink(rgb(0,i+15,0))
    Line(0,i,640,i)
Next
 
ScreenSwap
 
For y=0 To 120
    For x=0 To 320
        ink(GetPixel(x,y))
        SetPixel(x,240-y)
    Next
Next
 
ScreenSwap
waitkey

06

Obrázek 18: Vytvoření gradientního přechodu operacemi GetPixel a PutPixel.

setdisplay(320,320,32,1)
 
for x=0 to 319
    for y=0 to 320
        c = (x*x + y*y) % 255
        ink(c + c << 8 + c << 16)
        setpixel(x,y)
    next
next
 
waitkey

07

Obrázek 19: Vykreslení vzorku nazvaného „Circles“.

9. FreeBasic

Jedním z nejlépe podporovaných open source dialektů BASICu je s velkou pravděpodobností FreeBASIC. Syntaxe tohoto jazyka byla zvolena s ohledem na to, aby se programátoři znající dnes již muzeální QBasic nebo Quick Basic nemuseli učit nový programovací jazyk a taktéž z toho důvodu, aby bylo možné převádět postarší DOSovské aplikace psané v BASICu na modernější operační systémy. FreeBASIC obsahuje překladač (a jenom překladač!), pomocí něhož lze vytvářet jak spustitelné aplikace pracující s příkazovým řádkem či grafickým uživatelským rozhraním, tak i statické či dynamické knihovny a objektové soubory (.o, .obj), které lze následně slinkovat například s céčkovými programy. Samotný programovací jazyk byl (i přes zachování zpětné kompatibility) rozšířen snad ve všech směrech – do jazyka je například implementován preprocesor, lze používat ukazatele na data i ukazatele na funkce, používat inline assembler, programovat vícevláknové aplikace, používat pole a řetězce s maximálním rozsahem až 2 GB atd.

pc_121_17

Obrázek 20: Screenshot ze hry The Griffon Legend naprogramované ve FreeBASICu.

Přímo v jazyku je zabudována grafická knihovna kompatibilní s QBasicem (právě díky ní byla portována hra Gorilly), ovšem navíc podporující práci se sprity, průhledností atd. S využitím dalších knihoven však lze tvořit aplikace používající knihovny SDL, OpenGL, Allegro apod., viz též následující tabulku:

Název knihovny Stručný popis
Allegro, Allegro 5 a SDL knihovny používané především při vývoji her (grafika, zvuky, hudba, animace)
OpenGL 3D grafika
BIG_INT a GMP práce s čísly s libovolným rozsahem
cgi-util a fastCGI podpora pro psaní CGI skriptů pro prakticky libovolný webový server
DevIL práce s různými grafickými formáty
fmod podpora pro hudební formáty, mezi jinými pro MODy, MP3, OGG vorbis atd.
GD vytváření obrázků, rendering
GLUT OpenGL Utility Toolkit
GTK+ a wx-c podpora pro vytváření GUI
LibXML a Mini-XML zpracování XML
MySQL rozhraní pro známou open source relační databázi
PDFlib vytváření PDF souborů

pc_121_18

Obrázek 21: Další screenshot ze hry The Griffon Legend naprogramované ve FreeBASICu.

Opět se podívejme na několik příkladů:

Práce se soubory:

dim i as long
 
open "test.dat" for random as #1
for i = 1 to 10
        put #1, , i
next
 
seek #1, 2
get #1, , i
 
print "data: "; i; " current record: "; loc(1); " next: "; seek(1)

Ukázka práce s ukazateli:

TYPE Node
    PreviousNode AS Node POINTER
    NextNode     AS Node POINTER
END TYPE
 
DIM CurrentNode AS Node POINTER
CurrentNode->NextNode = NULL
 
DIM A AS SHORT POINTER, B AS SHORT POINTER, C AS SHORT POINTER POINTER
*A = *B \ **C

Použití preprocesoru pro vytvoření maker:

#DEFINE bar(x,y) ((x) * (y))
#DEFINE foo(x,y) bar(x-y,y-x)
a = foo(b, c)

Část programu, v němž je použita knihovna OpenGL a GLUT (povšimněte si podpory ukazatelů na funkce s využitím operátoru @):

sub doReshapeGL CDECL ( byval w as integer, _
                        byval h as integer )
    glViewport 0, 0, w, h
    glMatrixMode GL_PROJECTION
    glLoadIdentity
 
    if ( h = 0 ) then
        gluPerspective  80/2, w, 1.0, 5000.0
    else
        gluPerspective  80/2, w / h, 1.0, 5000.0
    end if
 
    glMatrixMode GL_MODELVIEW
    glLoadIdentity
 
end sub
 
sub initGLUT
    glutInit 1, strptr( " " )
 
    glutInitWindowPosition 0, 0
    glutInitWindowSize 640, 480
    glutInitDisplayMode GLUT_RGBA or GLUT_DOUBLE or GLUT_DEPTH
    glutCreateWindow "FreeBASIC OpenGL example"
 
    doInitGL
 
    glutDisplayFunc  @doRender
    glutIdleFunc     @doRender
    glutReshapeFunc  @doReshapeGL
    glutKeyboardFunc @doInput
                
end sub

pc_121_19

Obrázek 22: Raytracer napsaný ve FreeBASICu.

10. Odkazy na Internetu

  1. Seriál o programovacím jazyku Lua (root.cz):
    http://www.root.cz/serialy/programovaci-jazyk-lua/
  2. Domovská stránka systému LÖVE
    http://love2d.org/
  3. Domovská stránka programovacího jazyka Lua
    http://www.lua.org/
  4. Web o Lieru, Gusanos, GeneRally, Atari atd.
    http://karelik.wz.cz/
  5. Web o Lieru, Gusanos
    http://karelik.wz.cz/gusanos.php
  6. GUSANOS
    http://gusanos.sourceforge.net/
  7. GUSANOS Download
    http://sourceforge.net/projects/gusanos/
  8. Lua
    http://www.linuxexpres.cz/praxe/lua
  9. Lua
    http://cs.wikipedia.org/wiki/Lua
  10. Lua (programming language)
    http://en.wikipedia.org/wiki/Lua_(programming_language)
  11. The Lua Programming Language
    http://www.tiobe.com/index.php/paperinfo/tpci/Lua.html
  12. Lua Programming Gems
    http://www.lua.org/gems/
  13. LuaForge
    http://luaforge.net/
  14. Forge project tree
    http://luaforge.net/softwaremap/trove_list.php
  15. SdlBasic home page
    http://www.sdlbasic.altervista.org/main/
  16. SdlBasic examples
    http://nitrofurano.linuxkafe.com/sdlbasic/
  17. SdlBasic na Wikipedii
    http://en.wikipedia.org/wiki/SdlBasic
  18. Simple DirectMedia Layer
    http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer
  19. SDLBASIC – The high-level interpreter for all?
    http://openbytes.wordpress.com/2008/11/08/sdlbasic-the-high-level-interpreter-for-all/
  20. FreeBasic home page
    http://www.freebasic.net/
  21. FreeBASIC (Wikipedia EN)
    https://en.wikipedia.org/wiki/FreeBASIC
  22. FreeBASIC Wiki
    http://www.freebasic.net/wiki/wikka.php?wakka=FBWiki
  23. FreeBASIC Manual
    http://www.freebasic.net/wiki/wikka.php?wakka=DocToc
  24. FreeBASIC (Wikipedia CZ)
    http://cs.wikipedia.org/wiki/FreeBASIC
  25. The Griffon Legend
    http://syn9.thingie.net/?table=griffonlegend
  26. Seriál Letní škola programovacího jazyka Logo
    http://www.root.cz/serialy/letni-skola-programovaciho-jazyka-logo/
  27. Scratch: oficiální stránka projektu
    http://scratch.mit.edu/
  28. Scratch: galerie projektů vytvořených ve Scratchi
    http://scratch.mit.edu/galleries/browse/newest
  29. Scratch (Wikipedie CZ)
    http://cs.wikipedia.org/wiki/Scratch
  30. Scratch (programming language)
    http://en.wikipedia.org/wiki/Scratch_(programming_language)
  31. Scratch Modification
    http://wiki.scratch.mit.edu/wiki/Scratch_Modification
  32. Scratch Lowers Resistance to Programming
    http://www.wired.com/gadgetlab/2009/03/scratch-lowers/
  33. Snap!
    http://snap.berkeley.edu/
  34. Prostředí Snap!
    http://snap.berkeley.edu/snapsource/snap.html
  35. Alternatives to Scratch
    http://wiki.scratch.mit.edu/wiki/Alternatives_to_Scratch
  36. Basic-256 home page
    http://www.basic256.org/index_en
  37. Basic-256 Language Documentation
    http://doc.basic256.org/doku.php
  38. Basic-256 Art Gallery
    http://www.basic256.org/artgallery
  39. Basic-256 Tutorial
    http://www.basic256.org/tutorials
  40. Why BASIC?
    http://www.basic256.org/whybasic
  41. A book to teach ANYBODY how to program a computer (using BASIC)
    http://www.basicbook.org/
  42. BASIC Computer Games (published 1978) – Hammurabi
    http://atariarchives.org/basicgames/showpage.php?page=78
  43. Hamurabi – zdrojový kód v BASICu
    http://www.dunnington.u-net.com/public/basicgames/HMRABI