BASIC · QB64 Phoenix Edition

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.

KompatibilitaVětšina starých programů pro QBasic/QuickBASIC 4.5 se v QB64 přeloží beze změny. Novinky QB64 jsou pojmenované s podtržítkem (_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).

Středník vs. čárkaV 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 $.

TypSufixRozsah / 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ů
DEFxxx a implicitní typBez deklarace i sufixu je proměnná typu 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.

_PIQB64 zná vestavěnou funkci _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.

SkupinaOperá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 USINGVý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 ISPro porovnání použij 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.

_CONTINUERozšíření QB64 _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).

Statické vs. dynamickéPole s konstantní velikostí je statické. Pokud potřebuješ 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.

FunkceVý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.

FunkceVý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 ATNgoniometrie (radiány)
EXP(x) / LOG(x)e^x / přirozený logaritmus
RND / RANDOMIZEnáhodné číslo 0–1 / inicializace
NáhodaBez 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.

Pevná délka v typechŘetězce uvnitř 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é slovoVýznam
BYVALpředání hodnotou (kopie, změna se nepropíše ven)
SHAREDzpřístupní globální proměnnou uvnitř SUB/FUNCTION
STATIClokální proměnná si drží hodnotu mezi voláními
EXIT SUB / EXIT FUNCTIONpředčasný návrat
Volání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 OPENPoužití
FOR INPUTčtení textu (sekvenčně)
FOR OUTPUTzápis textu (přepíše obsah)
FOR APPENDzápis na konec existujícího souboru
FOR RANDOMzáznamy pevné délky, náhodný přístup
FOR BINARYbajt po bajtu, plná kontrola
Užitečné funkceEOF(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říkazKreslí
PSET (x,y), barvajeden bod
LINE (x1,y1)-(x2,y2), barvačáru
LINE …, barva, B / BFobdélník / vyplněný obdélník
CIRCLE (x,y), r, barvakružnici (i výseč)
PAINT (x,y), barvavyplní ohraničenou oblast
POINT(x,y)vrátí barvu bodu
SouřadnicePočátek [0,0] je vlevo nahoře, osa Y roste dolů. _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.

Vlastní fontPřes _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á.

Speciální klávesyŠipky a funkční klávesy vracejí přes 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říkazFunkce
_LIMIT fpsuspí smyčku tak, aby běžela max. fps krát za sekundu
_DISPLAYručně vykreslí připravený snímek (bez blikání)
_AUTODISPLAYvrátí automatické překreslování
TIMERpočet sekund od půlnoci (měření času)
_DELAY s / SLEEP npauza 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.

ÚklidNačtený zvuk uvolni přes _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.

Kreslení mimo obrazovku_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ástrojPoužití
ON ERROR GOTO návěštízapne odchyt chyb a skočí na obslužný kód
RESUME / RESUME NEXTopakuj chybný příkaz / pokračuj následujícím
ERR / ERLčíslo chyby / číslo řádku (nutná číslovaná návěští)
$DEBUGmetapří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říkazVýznam
OPTION _EXPLICITpovinná deklarace proměnných
$NOPREFIXlze vynechat podtržítko u QB64 příkazů
$RESIZE:SMOOTHokno lze plynule zvětšovat
$CONSOLEotevře textovou konzoli vedle grafiky
$INCLUDE:'soubor.bi'vloží externí zdrojový soubor
DECLARE LIBRARYvolání funkcí z C knihoven / OS
Kde hledatÚplný seznam příkazů s podtržítkem je ve wiki QB64PE. V IDE stačí najet kurzorem na klíčové slovo a stisknout F1 — otevře se přesně jeho stránka nápovědy.

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.

Rozšiř si toZkus přidat životy (pole nebo 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.

ZdrojCo obsahuje
QB64PE Wikireferenční popis každého příkazu a funkce, s příklady
Nápověda F1 v IDEoffline verze wiki napojená na kurzor
Fórum a Discordaktivní česká i světová komunita, ukázky a knihovny
Historické: QBasic 4.5 manuálzáklad jazyka je s QB64 kompatibilní
Poznámka k verzímPůvodní projekt QB64 se dále vyvíjí jako QB64 Phoenix Edition (QB64PE) — to je verze, kterou dnes používej. Starší balíčky pod názvem „QB64" už nejsou udržované.