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
5. Frameworky navržené pro tvorbu 3D her
7. Interpretry a překladače BASICu
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.
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.
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í.
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).
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í).
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ů.
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.
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.
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()
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()
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()
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.).
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.
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.
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ů.
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
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
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
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
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.
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ů |
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
Obrázek 22: Raytracer napsaný ve FreeBASICu.
10. Odkazy na Internetu
- Seriál o programovacím jazyku Lua (root.cz):
http://www.root.cz/serialy/programovaci-jazyk-lua/ - Domovská stránka systému LÖVE
http://love2d.org/ - Domovská stránka programovacího jazyka Lua
http://www.lua.org/ - Web o Lieru, Gusanos, GeneRally, Atari atd.
http://karelik.wz.cz/ - Web o Lieru, Gusanos
http://karelik.wz.cz/gusanos.php - GUSANOS
http://gusanos.sourceforge.net/ - GUSANOS Download
http://sourceforge.net/projects/gusanos/ - Lua
http://www.linuxexpres.cz/praxe/lua - Lua
http://cs.wikipedia.org/wiki/Lua - Lua (programming language)
http://en.wikipedia.org/wiki/Lua_(programming_language) - The Lua Programming Language
http://www.tiobe.com/index.php/paperinfo/tpci/Lua.html - Lua Programming Gems
http://www.lua.org/gems/ - LuaForge
http://luaforge.net/ - Forge project tree
http://luaforge.net/softwaremap/trove_list.php - SdlBasic home page
http://www.sdlbasic.altervista.org/main/ - SdlBasic examples
http://nitrofurano.linuxkafe.com/sdlbasic/ - SdlBasic na Wikipedii
http://en.wikipedia.org/wiki/SdlBasic - Simple DirectMedia Layer
http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer - SDLBASIC – The high-level interpreter for all?
http://openbytes.wordpress.com/2008/11/08/sdlbasic-the-high-level-interpreter-for-all/ - FreeBasic home page
http://www.freebasic.net/ - FreeBASIC (Wikipedia EN)
https://en.wikipedia.org/wiki/FreeBASIC - FreeBASIC Wiki
http://www.freebasic.net/wiki/wikka.php?wakka=FBWiki - FreeBASIC Manual
http://www.freebasic.net/wiki/wikka.php?wakka=DocToc - FreeBASIC (Wikipedia CZ)
http://cs.wikipedia.org/wiki/FreeBASIC - The Griffon Legend
http://syn9.thingie.net/?table=griffonlegend - Seriál Letní škola programovacího jazyka Logo
http://www.root.cz/serialy/letni-skola-programovaciho-jazyka-logo/ - Scratch: oficiální stránka projektu
http://scratch.mit.edu/ - Scratch: galerie projektů vytvořených ve Scratchi
http://scratch.mit.edu/galleries/browse/newest - Scratch (Wikipedie CZ)
http://cs.wikipedia.org/wiki/Scratch - Scratch (programming language)
http://en.wikipedia.org/wiki/Scratch_(programming_language) - Scratch Modification
http://wiki.scratch.mit.edu/wiki/Scratch_Modification - Scratch Lowers Resistance to Programming
http://www.wired.com/gadgetlab/2009/03/scratch-lowers/ - Snap!
http://snap.berkeley.edu/ - Prostředí Snap!
http://snap.berkeley.edu/snapsource/snap.html - Alternatives to Scratch
http://wiki.scratch.mit.edu/wiki/Alternatives_to_Scratch - Basic-256 home page
http://www.basic256.org/index_en - Basic-256 Language Documentation
http://doc.basic256.org/doku.php - Basic-256 Art Gallery
http://www.basic256.org/artgallery - Basic-256 Tutorial
http://www.basic256.org/tutorials - Why BASIC?
http://www.basic256.org/whybasic - A book to teach ANYBODY how to program a computer (using BASIC)
http://www.basicbook.org/ - BASIC Computer Games (published 1978) - Hammurabi
http://atariarchives.org/basicgames/showpage.php?page=78 - Hamurabi - zdrojový kód v BASICu
http://www.dunnington.u-net.com/public/basicgames/HMRABI