QB64 referenční
příručka
Moderní kompilátor jazyka BASIC s duší QuickBASICu 4.5 — zpětně kompatibilní s QBasic/QB, rozšířený o grafiku, zvuk, 64bitová čísla a knihovny. Vše česky, s příklady ke spuštění.
1Úvod & instalace
QB64 je open-source kompilátor jazyka BASIC. Kód píšeš ve stylu QuickBASICu 4.5, ale QB64 ho přeloží přes C++ do nativního spustitelného souboru pro Windows, Linux i macOS. Dnes se vyvíjí jako QB64 Phoenix Edition (QB64PE).
Instalace
- Windows — stáhni ZIP z qb64phoenix.com, rozbal a spusť
qb64pe.exe. Nic se neinstaluje do systému. - Linux — rozbal archiv a spusť
./setup_lnx.sh; potřebuješ balíčky pro překlad (gcc, make, X11 dev knihovny). - macOS — rozbal a spusť
./setup_osx.command.
Jak to funguje
Zdrojový soubor má příponu .bas. V IDE stiskneš F5 (přelož a spusť) nebo F11 (jen přelož). QB64 vygeneruje z tvého BASICu céčkový kód a zavolá překladač — výsledkem je samostatný .exe, který běží i bez QB64.
_RGB32, _NEWIMAGE…), aby nekolidovaly se starým kódem.2První program
Klasické „Ahoj světe". PRINT vypíše text na obrazovku, END ukončí program. Apostrof ' uvozuje komentář (starší tvar je REM).
PRINT spojuje středník ; hodnoty těsně za sebou, čárka , je odsadí do sloupců (tabulátory).3Proměnné a datové typy
Typ proměnné určíš buď příponou (sufixem) za názvem, nebo deklarací přes DIM … AS. Řetězcové proměnné končí vždy na $.
| Typ | Sufix | Rozsah / popis |
|---|---|---|
_BYTE | %% | −128 … 127 (8 bitů) |
INTEGER | % | −32 768 … 32 767 (16 bitů) |
LONG | & | ±2,1 miliardy (32 bitů) |
_INTEGER64 | && | 64bitové celé číslo |
SINGLE | ! | desetinné číslo, jednoduchá přesnost |
DOUBLE | # | desetinné číslo, dvojitá přesnost |
_FLOAT | ## | 80bitové desetinné číslo |
STRING | $ | řetězec znaků |
SINGLE. Doporučuje se dát na začátek OPTION _EXPLICIT — pak QB64 vynutí deklaraci každé proměnné a odhalí překlepy v názvech.4Konstanty
Konstanta je pojmenovaná neměnná hodnota. Definuje se přes CONST a nesmí se za běhu změnit.
_PI, volitelně násobenou: _PI(2) vrátí 2π. Podobně existují další užitečné konstanty a funkce s podtržítkem.5Operátory
Aritmetika, porovnávání a logika. Umocňování se píše stříškou ^, celočíselné dělení lomítkem \, zbytek po dělení přes MOD.
| Skupina | Operátory |
|---|---|
| Aritmetické | + - * / \ (celočíselné) MOD ^ |
| Porovnání | = <> < > <= >= |
| Logické | AND OR NOT XOR EQV IMP |
| Řetězce | + (spojení) |
6Vstup a výstup
Na obrazovku píše PRINT, od uživatele čte INPUT (po slovech) nebo LINE INPUT (celý řádek včetně mezer). Formátovaný výstup umí PRINT USING.
| Znak v USING | Význam |
|---|---|
# | pozice číslice |
. | desetinná tečka |
, | oddělovač tisíců |
& | řetězec v plné délce |
! | jen první znak řetězce |
+ / - | znaménko čísla |
7Podmínky
Větvení řídí IF … THEN … ELSE. Pro mnoho variant jedné hodnoty je přehlednější SELECT CASE.
CASE IS > 100, pro rozsah CASE 1 TO 10, pro výčet CASE 2, 4, 6.8Cykly
Počítaný cyklus je FOR … NEXT. Podmíněný cyklus je DO … LOOP (podmínka na začátku i na konci) nebo starší WHILE … WEND.
_CONTINUE přeskočí zbytek těla cyklu a pokračuje další iterací — v původním QBasicu chybělo.9Pole
Pole je číslovaná sada hodnot stejného typu. Deklaruje se přes DIM, velikost lze měnit přes REDIM. Indexy začínají od 0 (nebo dle OPTION BASE).
REDIM, pole je dynamické — velikost lze měnit, s _PRESERVE i bez ztráty dat. UBOUND(pole) a LBOUND(pole) vrátí největší a nejmenší index.10Řetězce
Funkce pro práci s textem. Funkce končící na $ vracejí řetězec.
| Funkce | Význam |
|---|---|
LEN(s$) | délka řetězce |
LEFT$(s$,n) / RIGHT$(s$,n) | n znaků zleva / zprava |
MID$(s$,i,n) | n znaků od pozice i |
INSTR(s$,co$) | pozice podřetězce (0 = nenalezeno) |
UCASE$ / LCASE$ | velká / malá písmena |
LTRIM$ / RTRIM$ / _TRIM$ | ořez mezer |
STR$(n) / VAL(s$) | číslo→řetězec / řetězec→číslo |
CHR$(n) / ASC(s$) | kód→znak / znak→kód |
STRING$(n,z$) / SPACE$(n) | n opakování znaku / n mezer |
11Matematické funkce
Standardní matematika. Úhly goniometrických funkcí jsou v radiánech.
| Funkce | Význam |
|---|---|
ABS(x) / SGN(x) | absolutní hodnota / znaménko |
INT(x) / FIX(x) / _ROUND(x) | dolní celá / oříznutí / zaokrouhlení |
SQR(x) | druhá odmocnina |
SIN COS TAN ATN | goniometrie (radiány) |
EXP(x) / LOG(x) | e^x / přirozený logaritmus |
RND / RANDOMIZE | náhodné číslo 0–1 / inicializace |
RANDOMIZE vrací RND při každém spuštění stejnou sekvenci. RANDOMIZE TIMER ji rozhodí podle času.12Uživatelské typy (TYPE)
Vlastní složený typ sdruží víc hodnot pod jeden název — obdoba struktury. Vytvoří se blokem TYPE … END TYPE, k položkám se přistupuje tečkou.
TYPE musí mít pevnou délku (STRING * n), aby měl záznam stálou velikost — to je klíčové pro ukládání do souborů s náhodným přístupem (sekce 14).13SUB a FUNCTION
Kód rozdělíš do podprogramů. SUB něco vykoná, FUNCTION navíc vrací hodnotu. Parametry se předávají odkazem (změna se propíše zpět), pokud neuvedeš BYVAL.
| Klíčové slovo | Význam |
|---|---|
BYVAL | předání hodnotou (kopie, změna se nepropíše ven) |
SHARED | zpřístupní globální proměnnou uvnitř SUB/FUNCTION |
STATIC | lokální proměnná si drží hodnotu mezi voláními |
EXIT SUB / EXIT FUNCTION | předčasný návrat |
SUB voláš buď jménem s parametry bez závorek (Pozdrav "Pavel"), nebo s CALL Pozdrav("Pavel"). FUNCTION se volá jako výraz uvnitř přiřazení či PRINT.14Práce se soubory
Soubor se otevře přes OPEN s režimem a číslem kanálu (#1), pracuje se s ním přes to číslo a nakonec se zavře přes CLOSE.
Textový soubor (sekvenčně)
Soubor s náhodným přístupem (záznamy)
| Režim OPEN | Použití |
|---|---|
FOR INPUT | čtení textu (sekvenčně) |
FOR OUTPUT | zápis textu (přepíše obsah) |
FOR APPEND | zápis na konec existujícího souboru |
FOR RANDOM | záznamy pevné délky, náhodný přístup |
FOR BINARY | bajt po bajtu, plná kontrola |
EOF(n) = konec souboru, LOF(n) = velikost v bajtech, LOC(n) = aktuální pozice, SEEK #n, poz = přesun. Existenci souboru ověříš přes _FILEEXISTS("data.txt").15Grafika
Grafický režim zapneš přes SCREEN nebo moderní _NEWIMAGE. Pak kreslíš body, čáry, obdélníky, kruhy a výplně.
| Příkaz | Kreslí |
|---|---|
PSET (x,y), barva | jeden bod |
LINE (x1,y1)-(x2,y2), barva | čáru |
LINE …, barva, B / BF | obdélník / vyplněný obdélník |
CIRCLE (x,y), r, barva | kružnici (i výseč) |
PAINT (x,y), barva | vyplní ohraničenou oblast |
POINT(x,y) | vrátí barvu bodu |
_WIDTH a _HEIGHT vrátí rozměry aktuální plochy.16Barvy a text v grafice
Ve 32bitovém režimu skládáš barvu z RGB složek (0–255). COLOR popredi, pozadi nastaví barvu textu, _PRINTSTRING vypíše text na přesnou pozici.
_LOADFONT("arial.ttf", 24) načteš TrueType font, _FONT handle ho aktivuje. To původní QBasic neuměl — je to čistě QB64.17Klávesnice a myš
Nejjednodušší čtení kláves je INKEY$ (vrátí stisknutou klávesu nebo prázdný řetězec). Pro hry se hodí _KEYDOWN, které zjistí, zda je klávesa právě držená.
INKEY$ dva bajty — CHR$(0)+CHR$(kód). Proto je pro plynulé ovládání ve hrách lepší _KEYHIT / _KEYDOWN.18Herní smyčka a časování
Plynulá animace stojí na smyčce, která omezuje snímkovou frekvenci přes _LIMIT a překresluje bez blikání přes _DISPLAY (s vypnutou automatikou _AUTODISPLAY).
| Příkaz | Funkce |
|---|---|
_LIMIT fps | uspí smyčku tak, aby běžela max. fps krát za sekundu |
_DISPLAY | ručně vykreslí připravený snímek (bez blikání) |
_AUTODISPLAY | vrátí automatické překreslování |
TIMER | počet sekund od půlnoci (měření času) |
_DELAY s / SLEEP n | pauza na s sekund / n sekund (0 = do klávesy) |
19Zvuk
Jednoduché pípnutí umí BEEP a SOUND, melodie PLAY. Skutečné zvukové soubory (WAV, OGG, MP3) přehraješ přes _SNDOPEN a _SNDPLAY.
_SNDCLOSE zvuk&, až ho nepotřebuješ. Pro krátké efekty ve hře můžeš stejný handle přehrávat opakovaně přes _SNDPLAYCOPY.20Obrázky (sprity)
Obrázek načteš do paměti přes _LOADIMAGE, vykreslíš přes _PUTIMAGE a uvolníš přes _FREEIMAGE. Každý obrázek (i obrazovka) je jen handle — číslo.
_NEWIMAGE můžeš použít i k vytvoření skryté plochy. Přes _DEST handle na ni kreslíš a přes _SOURCE z ní čteš — hodí se pro skládání scén a dvojité bufferování.21Chyby a ladění
Běhové chyby (chybějící soubor, dělení nulou) zachytíš přes ON ERROR. Číslo a řádek chyby dají ERR a ERL. QB64 má i vestavěný debugger $DEBUG.
| Nástroj | Použití |
|---|---|
ON ERROR GOTO návěští | zapne odchyt chyb a skočí na obslužný kód |
RESUME / RESUME NEXT | opakuj chybný příkaz / pokračuj následujícím |
ERR / ERL | číslo chyby / číslo řádku (nutná číslovaná návěští) |
$DEBUG | metapříkaz — zapne krokovací debugger v IDE |
_ASSERT(podm) | zastaví běh v debuggeru, když podmínka neplatí |
22Rozšíření QB64
QB64 přidává k jazyku spoustu vlastních příkazů (většinou s podtržítkem) a metapříkazů (začínají $), které řídí překlad.
| Metapříkaz | Význam |
|---|---|
OPTION _EXPLICIT | povinná deklarace proměnných |
$NOPREFIX | lze vynechat podtržítko u QB64 příkazů |
$RESIZE:SMOOTH | okno lze plynule zvětšovat |
$CONSOLE | otevře textovou konzoli vedle grafiky |
$INCLUDE:'soubor.bi' | vloží externí zdrojový soubor |
DECLARE LIBRARY | volání funkcí z C knihoven / OS |
23Kompletní příklad — chytej padající bloky
Malá hra, která spojuje grafiku, herní smyčku, klávesnici, náhodu a skóre. Ovládání šipkami vlevo/vpravo, konec klávesou Esc. Vlož do .bas a spusť přes F5.
TYPE), zrychlování bloků podle skóre, více bloků najednou nebo zvuk z _SNDOPEN místo BEEP. Máš na to vše z předchozích sekcí.24Odkazy & další čtení
Nejlepší nápověda je přímo v IDE: najeď na klíčové slovo a stiskni F1. Online žije komunita kolem Phoenix Edition.
| Zdroj | Co obsahuje |
|---|---|
| QB64PE Wiki | referenční popis každého příkazu a funkce, s příklady |
| Nápověda F1 v IDE | offline verze wiki napojená na kurzor |
| Fórum a Discord | aktivní česká i světová komunita, ukázky a knihovny |
| Historické: QBasic 4.5 manuál | základ jazyka je s QB64 kompatibilní |