PRVNÍCH PĚT MINUT
Rychlý start
QB64 je moderní překladač jazyka BASIC, který zachovává srozumitelnou syntaxi QuickBASICu a přidává grafiku, zvuk, síťové a systémové funkce. Zdrojové soubory ukládejte s příponou .bas.
Vytvořte soubor
Otevřete IDE, vložte kód a uložte jej jako ahoj.bas.
Spusťte program
V IDE použijte F5. QB64 kód přeloží a rovnou spustí.
Sestavte aplikaci
Výsledkem může být samostatný spustitelný program pro vaši platformu.
Příkazy začínající podtržítkem, například _DISPLAY, jsou moderní rozšíření QB64. Klasický kód QuickBASICu jej obvykle nepoužíval.
STAVEBNÍ KAMENY
Základy jazyka
Proměnné a přiřazení
DIM pocet AS INTEGER
DIM cena AS DOUBLE
DIM jmeno AS STRING
pocet = 3
cena = 149.90
jmeno = "Ada"Komentáře a více příkazů
' komentář začíná apostrofem
x = 10: y = 20 ' dva příkazy
REM Toto je také komentářOperátory
| Skupina | Operátory | Příklad |
|---|---|---|
| Aritmetické | + - * / \ MOD ^ | zbytek = 17 MOD 5 |
| Porovnání | = <> < > <= >= | IF x >= 10 THEN |
| Logické | NOT AND OR XOR | IF aktivni AND NOT chyba THEN |
| Řetězce | + | cele$ = jmeno$ + "!" |
DATA POD KONTROLOU
Datové typy
_BYTE8 bitůMalá celá čísla
INTEGER16 bitůKlasické celé číslo
LONG32 bitůVětší celá čísla
_INTEGER6464 bitůVelmi velká celá čísla
SINGLE32 bitůDesetinná čísla
DOUBLE64 bitůPřesnější desetinná čísla
STRINGtextProměnná délka řetězce
_UNSIGNEDmodifikátorJen nezáporné hodnoty
Tradiční přípony: $ STRING, % INTEGER, & LONG, ! SINGLE, # DOUBLE, ~ _UNSIGNED. Pro čitelný nový kód dávejte přednost AS typ.
RYCHLÉ HLEDÁNÍ
Příkazy a funkce
40 položek
PRINTVypíše text nebo hodnotu do konzole. Středník potlačí odřádkování, čárka přejde do další tiskové zóny.Vstup a výstup
PRINTVypíše text nebo hodnotu do konzole. Středník potlačí odřádkování, čárka přejde do další tiskové zóny.SYNTAXE
PRINT [výraz[, výraz...]]PŘÍKLAD
PRINT "Skóre:"; scoreINPUTNačte hodnotu z klávesnice a uloží ji do proměnné.Vstup a výstup
INPUTNačte hodnotu z klávesnice a uloží ji do proměnné.SYNTAXE
INPUT ["výzva";] proměnnáPŘÍKLAD
INPUT "Jak se jmenuješ"; jmeno$LINE INPUTNačte celý řádek včetně mezer.Vstup a výstup
LINE INPUTNačte celý řádek včetně mezer.SYNTAXE
LINE INPUT ["výzva";] text$PŘÍKLAD
LINE INPUT "Zadej větu: "; veta$CLSVymaže obrazovku nebo zvolenou stránku obrazovky.Vstup a výstup
CLSVymaže obrazovku nebo zvolenou stránku obrazovky.SYNTAXE
CLS [metoda]PŘÍKLAD
CLSLOCATENastaví pozici textového kurzoru.Vstup a výstup
LOCATENastaví pozici textového kurzoru.SYNTAXE
LOCATE řádek, sloupecPŘÍKLAD
LOCATE 10, 20: PRINT "Střed"IF…THEN…ELSEProvede jednu z větví podle výsledku podmínky.Řízení programu
IF…THEN…ELSEProvede jednu z větví podle výsledku podmínky.SYNTAXE
IF podmínka THEN ... [ELSE ...] END IFPŘÍKLAD
IF vek >= 18 THEN
PRINT "Dospělý"
ELSE
PRINT "Nezletilý"
END IFSELECT CASEPřehledné větvení pro více možných hodnot nebo rozsahů.Řízení programu
SELECT CASEPřehledné větvení pro více možných hodnot nebo rozsahů.SYNTAXE
SELECT CASE výraz ... END SELECTPŘÍKLAD
SELECT CASE znamka
CASE 1: PRINT "Výborně"
CASE 2 TO 3: PRINT "Dobře"
CASE ELSE: PRINT "Zabrat"
END SELECTFOR…NEXTOpakuje blok se známým počtem průchodů.Smyčky
FOR…NEXTOpakuje blok se známým počtem průchodů.SYNTAXE
FOR i = začátek TO konec [STEP krok] ... NEXTPŘÍKLAD
FOR i = 10 TO 0 STEP -1
PRINT i
NEXT iDO…LOOPOpakuje blok, dokud platí nebo dokud nenastane podmínka.Smyčky
DO…LOOPOpakuje blok, dokud platí nebo dokud nenastane podmínka.SYNTAXE
DO [WHILE|UNTIL podmínka] ... LOOP [WHILE|UNTIL podmínka]PŘÍKLAD
DO
x = x + 1
LOOP UNTIL x = 10WHILE…WENDStarší forma cyklu s podmínkou na začátku.Smyčky
WHILE…WENDStarší forma cyklu s podmínkou na začátku.SYNTAXE
WHILE podmínka ... WENDPŘÍKLAD
WHILE x < 5
x = x + 1
WENDSUBDefinuje proceduru, která nevrací hodnotu.Procedury
SUBDefinuje proceduru, která nevrací hodnotu.SYNTAXE
SUB název (parametry) ... END SUBPŘÍKLAD
SUB Pozdrav (jmeno$)
PRINT "Ahoj, "; jmeno$
END SUBFUNCTIONDefinuje funkci. Výsledek se přiřadí proměnné se jménem funkce.Procedury
FUNCTIONDefinuje funkci. Výsledek se přiřadí proměnné se jménem funkce.SYNTAXE
FUNCTION název (parametry) ... END FUNCTIONPŘÍKLAD
FUNCTION Ctverec# (x#)
Ctverec# = x# * x#
END FUNCTIONDIMDeklaruje proměnnou nebo pole. OPTION _EXPLICIT pomůže zachytit překlepy.Proměnné a pole
DIMDeklaruje proměnnou nebo pole. OPTION _EXPLICIT pomůže zachytit překlepy.SYNTAXE
DIM [SHARED] proměnná AS typPŘÍKLAD
DIM body(1 TO 10) AS INTEGERREDIMZmění velikost dynamického pole. _PRESERVE zachová existující data.Proměnné a pole
REDIMZmění velikost dynamického pole. _PRESERVE zachová existující data.SYNTAXE
REDIM [_PRESERVE] pole(rozměry) AS typPŘÍKLAD
REDIM _PRESERVE jmena$(1 TO pocet)TYPEVytvoří vlastní strukturovaný datový typ.Proměnné a pole
TYPEVytvoří vlastní strukturovaný datový typ.SYNTAXE
TYPE název ... END TYPEPŘÍKLAD
TYPE Hrac
jmeno AS STRING * 24
skore AS LONG
END TYPEOPENOtevře soubor. Režimy zahrnují INPUT, OUTPUT, APPEND, BINARY a RANDOM.Soubory
OPENOtevře soubor. Režimy zahrnují INPUT, OUTPUT, APPEND, BINARY a RANDOM.SYNTAXE
OPEN cesta$ FOR režim AS #čísloPŘÍKLAD
OPEN "data.txt" FOR INPUT AS #1CLOSEUzavře jeden nebo všechny otevřené soubory.Soubory
CLOSEUzavře jeden nebo všechny otevřené soubory.SYNTAXE
CLOSE [#číslo]PŘÍKLAD
CLOSE #1PRINT #Zapíše textová data do otevřeného souboru.Soubory
PRINT #Zapíše textová data do otevřeného souboru.SYNTAXE
PRINT #číslo, dataPŘÍKLAD
PRINT #1, jmeno$; ","; skoreLINE INPUT #Načte ze souboru celý řádek.Soubory
LINE INPUT #Načte ze souboru celý řádek.SYNTAXE
LINE INPUT #číslo, text$PŘÍKLAD
LINE INPUT #1, radek$_FILEEXISTSVrátí pravdu, pokud soubor existuje.Soubory
_FILEEXISTSVrátí pravdu, pokud soubor existuje.SYNTAXE
_FILEEXISTS(cesta$)PŘÍKLAD
IF _FILEEXISTS("config.ini") THEN PRINT "Nalezen"_NEWIMAGEVytvoří obrazovou plochu; režim 32 znamená 32bitovou barvu.Grafika
_NEWIMAGEVytvoří obrazovou plochu; režim 32 znamená 32bitovou barvu.SYNTAXE
_NEWIMAGE(šířka, výška, režim)PŘÍKLAD
scr& = _NEWIMAGE(960, 540, 32)
SCREEN scr&_DISPLAYZobrazí připravený snímek při ručním vykreslování.Grafika
_DISPLAYZobrazí připravený snímek při ručním vykreslování.SYNTAXE
_DISPLAYPŘÍKLAD
_AUTODISPLAY OFF
DO
CLS
' kreslení
_DISPLAY
LOOPLINENakreslí čáru, obdélník nebo vyplněný obdélník.Grafika
LINENakreslí čáru, obdélník nebo vyplněný obdélník.SYNTAXE
LINE (x1,y1)-(x2,y2), barva[, B|BF]PŘÍKLAD
LINE (20,20)-(220,120), _RGB32(40,180,255), BFCIRCLENakreslí kružnici, oblouk nebo elipsu.Grafika
CIRCLENakreslí kružnici, oblouk nebo elipsu.SYNTAXE
CIRCLE (x,y), poloměr, barvaPŘÍKLAD
CIRCLE (320, 240), 80, _RGB32(255, 200, 0)_RGB32Sestaví 32bitovou barvu ze složek 0–255.Grafika
_RGB32Sestaví 32bitovou barvu ze složek 0–255.SYNTAXE
_RGB32(červená, zelená, modrá[, alfa])PŘÍKLAD
modra~& = _RGB32(30, 120, 255)_LOADIMAGENačte obrázek a vrátí jeho handle. Po použití jej uvolněte pomocí _FREEIMAGE.Grafika
_LOADIMAGENačte obrázek a vrátí jeho handle. Po použití jej uvolněte pomocí _FREEIMAGE.SYNTAXE
_LOADIMAGE(cesta$[, režim])PŘÍKLAD
img& = _LOADIMAGE("sprite.png", 32)_PUTIMAGEVykreslí celý obrázek nebo jeho část, případně jej škáluje.Grafika
_PUTIMAGEVykreslí celý obrázek nebo jeho část, případně jej škáluje.SYNTAXE
_PUTIMAGE [(cíl)], zdroj&[, cíl&]PŘÍKLAD
_PUTIMAGE (100, 80), img&_KEYHITVrátí kód poslední klávesové události; záporná hodnota značí uvolnění klávesy.Klávesnice a myš
_KEYHITVrátí kód poslední klávesové události; záporná hodnota značí uvolnění klávesy.SYNTAXE
_KEYHITPŘÍKLAD
k& = _KEYHIT
IF k& = 27 THEN END_KEYDOWNZjistí, zda je klávesa právě držena.Klávesnice a myš
_KEYDOWNZjistí, zda je klávesa právě držena.SYNTAXE
_KEYDOWN(kód)PŘÍKLAD
IF _KEYDOWN(19200) THEN x = x - 4_MOUSEINPUTNačte další událost myši do interní fronty.Klávesnice a myš
_MOUSEINPUTNačte další událost myši do interní fronty.SYNTAXE
_MOUSEINPUTPŘÍKLAD
DO WHILE _MOUSEINPUT
mx = _MOUSEX
my = _MOUSEY
LOOP_SNDOPENNačte zvuk a vrátí handle. Po použití zavřete pomocí _SNDCLOSE.Zvuk
_SNDOPENNačte zvuk a vrátí handle. Po použití zavřete pomocí _SNDCLOSE.SYNTAXE
_SNDOPEN(cesta$)PŘÍKLAD
snd& = _SNDOPEN("klik.ogg")_SNDPLAYPřehraje načtený zvuk od začátku.Zvuk
_SNDPLAYPřehraje načtený zvuk od začátku.SYNTAXE
_SNDPLAY handle&PŘÍKLAD
_SNDPLAY snd&_LIMITOmezí rychlost hlavní smyčky a šetří procesor.Časování
_LIMITOmezí rychlost hlavní smyčky a šetří procesor.SYNTAXE
_LIMIT fpsPŘÍKLAD
DO
_LIMIT 60
' aktualizace
LOOPTIMERVrátí počet sekund od půlnoci; vhodné pro krátká měření.Časování
TIMERVrátí počet sekund od půlnoci; vhodné pro krátká měření.SYNTAXE
TIMER[(přesnost)]PŘÍKLAD
start! = TIMER
' práce
PRINT TIMER - start!RNDVrátí pseudonáhodné číslo od 0 včetně do 1 bez jedničky.Matematika
RNDVrátí pseudonáhodné číslo od 0 včetně do 1 bez jedničky.SYNTAXE
RND[(n)]Na začátku programu obvykle použijte RANDOMIZE TIMER.
PŘÍKLAD
kostka = INT(RND * 6) + 1LENVrátí délku řetězce.Řetězce
LENVrátí délku řetězce.SYNTAXE
LEN(text$)PŘÍKLAD
PRINT LEN("QB64") ' 4MID$Vrátí část řetězce; pozice se počítají od 1.Řetězce
MID$Vrátí část řetězce; pozice se počítají od 1.SYNTAXE
MID$(text$, začátek[, délka])PŘÍKLAD
PRINT MID$("QB64 Phoenix", 6, 7)INSTRNajde pozici podřetězce, nebo vrátí 0.Řetězce
INSTRNajde pozici podřetězce, nebo vrátí 0.SYNTAXE
INSTR([od,] text$, hledaný$)PŘÍKLAD
pozice = INSTR("abc@domena.cz", "@")_CLIPBOARD$Čte nebo nastavuje text systémové schránky.Systém
_CLIPBOARD$Čte nebo nastavuje text systémové schránky.SYNTAXE
_CLIPBOARD$PŘÍKLAD
_CLIPBOARD$ = "Zkopírováno z QB64"_DISPLAYWIDTHVrátí šířku pracovní plochy v pixelech.Systém
_DISPLAYWIDTHVrátí šířku pracovní plochy v pixelech.SYNTAXE
_DISPLAYWIDTHPŘÍKLAD
PRINT _DISPLAYWIDTH; " × "; _DISPLAYHEIGHTKÓD, KTERÝ SE HODÍ
Praktické recepty
TEXTOVÝ SOUBOR
Načtení souboru po řádcích
Kontrolujte existenci souboru a vždy jej zavřete.
IF _FILEEXISTS("data.txt") THEN
OPEN "data.txt" FOR INPUT AS #1
DO UNTIL EOF(1)
LINE INPUT #1, radek$
PRINT radek$
LOOP
CLOSE #1
END IFHERNÍ SMYČKA
Plynulá animace v 60 FPS
Ruční zobrazení brání blikání a _LIMIT drží rozumnou zátěž.
obraz& = _NEWIMAGE(800, 450, 32)
SCREEN obraz&
_AUTODISPLAY OFF
DO
_LIMIT 60
CLS
CIRCLE (x, 225), 24, _RGB32(0, 220, 180)
x = (x + 3) MOD 800
_DISPLAY
LOOP UNTIL _KEYHIT = 27MÉNĚ CHYB, LEPŠÍ KÓD
Ladění a dobré návyky
Zapněte OPTION _EXPLICIT. QB64 pak vyžaduje deklarace a odhalí překlepy v názvech proměnných.
Dělte program do SUB a FUNCTION. Krátké, pojmenované bloky se snáz testují a znovu používají.
Uvolňujte zdroje. Obrázky, zvuky a soubory zavírejte pomocí _FREEIMAGE, _SNDCLOSE a CLOSE.
Kontrolujte mezní hodnoty. U polí použijte LBOUND a UBOUND, ne čísla napsaná natvrdo.
Vypisujte mezivýsledky. Jednoduché PRINT často rychle ukáže, kde se stav programu odchýlil.