ČESKÁ REFERENČNÍ PŘÍRUČKA

QB64 Basic
bez zbytečných oklik.

Praktický průvodce moderním BASICem — od první proměnné po grafiku, zvuk a práci se soubory.

' první program
SCREEN _NEWIMAGE(800, 450, 32)
COLOR _RGB32(100, 220, 255)

PRINT "Ahoj z QB64!"

DO
    _LIMIT 60
LOOP UNTIL _KEYHIT = 27
01

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.

1

Vytvořte soubor

Otevřete IDE, vložte kód a uložte jej jako ahoj.bas.

2

Spusťte program

V IDE použijte F5. QB64 kód přeloží a rovnou spustí.

3

Sestavte aplikaci

Výsledkem může být samostatný spustitelný program pro vaši platformu.

Dobré vědět

Příkazy začínající podtržítkem, například _DISPLAY, jsou moderní rozšíření QB64. Klasický kód QuickBASICu jej obvykle nepoužíval.

02

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

SkupinaOperátoryPříklad
Aritmetické+ - * / \ MOD ^zbytek = 17 MOD 5
Porovnání= <> < > <= >=IF x >= 10 THEN
LogickéNOT AND OR XORIF aktivni AND NOT chyba THEN
Řetězce+cele$ = jmeno$ + "!"
03

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

STRINGtext

Proměnná délka řetězce

_UNSIGNEDmodifikátor

Jen nezáporné hodnoty

Tradiční přípony: $ STRING, % INTEGER, & LONG, ! SINGLE, # DOUBLE, ~ _UNSIGNED. Pro čitelný nový kód dávejte přednost AS typ.

04

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

SYNTAXE

PRINT [výraz[, výraz...]]

PŘÍKLAD

PRINT "Skóre:"; score
INPUTNačte hodnotu z klávesnice a uloží ji do proměnné.
Vstup a výstup

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

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

SYNTAXE

CLS [metoda]

PŘÍKLAD

CLS
LOCATENastaví pozici textového kurzoru.
Vstup a výstup

SYNTAXE

LOCATE řádek, sloupec

PŘÍKLAD

LOCATE 10, 20: PRINT "Střed"
IF…THEN…ELSEProvede jednu z větví podle výsledku podmínky.
Řízení programu

SYNTAXE

IF podmínka THEN ... [ELSE ...] END IF

PŘÍKLAD

IF vek >= 18 THEN
    PRINT "Dospělý"
ELSE
    PRINT "Nezletilý"
END IF
SELECT CASEPřehledné větvení pro více možných hodnot nebo rozsahů.
Řízení programu

SYNTAXE

SELECT CASE výraz ... END SELECT

PŘÍKLAD

SELECT CASE znamka
    CASE 1: PRINT "Výborně"
    CASE 2 TO 3: PRINT "Dobře"
    CASE ELSE: PRINT "Zabrat"
END SELECT
FOR…NEXTOpakuje blok se známým počtem průchodů.
Smyčky

SYNTAXE

FOR i = začátek TO konec [STEP krok] ... NEXT

PŘÍKLAD

FOR i = 10 TO 0 STEP -1
    PRINT i
NEXT i
DO…LOOPOpakuje blok, dokud platí nebo dokud nenastane podmínka.
Smyčky

SYNTAXE

DO [WHILE|UNTIL podmínka] ... LOOP [WHILE|UNTIL podmínka]

PŘÍKLAD

DO
    x = x + 1
LOOP UNTIL x = 10
WHILE…WENDStarší forma cyklu s podmínkou na začátku.
Smyčky

SYNTAXE

WHILE podmínka ... WEND

PŘÍKLAD

WHILE x < 5
    x = x + 1
WEND
SUBDefinuje proceduru, která nevrací hodnotu.
Procedury

SYNTAXE

SUB název (parametry) ... END SUB

PŘÍKLAD

SUB Pozdrav (jmeno$)
    PRINT "Ahoj, "; jmeno$
END SUB
FUNCTIONDefinuje funkci. Výsledek se přiřadí proměnné se jménem funkce.
Procedury

SYNTAXE

FUNCTION název (parametry) ... END FUNCTION

PŘÍKLAD

FUNCTION Ctverec# (x#)
    Ctverec# = x# * x#
END FUNCTION
DIMDeklaruje proměnnou nebo pole. OPTION _EXPLICIT pomůže zachytit překlepy.
Proměnné a pole

SYNTAXE

DIM [SHARED] proměnná AS typ

PŘÍKLAD

DIM body(1 TO 10) AS INTEGER
REDIMZmění velikost dynamického pole. _PRESERVE zachová existující data.
Proměnné a pole

SYNTAXE

REDIM [_PRESERVE] pole(rozměry) AS typ

PŘÍKLAD

REDIM _PRESERVE jmena$(1 TO pocet)
TYPEVytvoří vlastní strukturovaný datový typ.
Proměnné a pole

SYNTAXE

TYPE název ... END TYPE

PŘÍKLAD

TYPE Hrac
    jmeno AS STRING * 24
    skore AS LONG
END TYPE
OPENOtevře soubor. Režimy zahrnují INPUT, OUTPUT, APPEND, BINARY a RANDOM.
Soubory

SYNTAXE

OPEN cesta$ FOR režim AS #číslo

PŘÍKLAD

OPEN "data.txt" FOR INPUT AS #1
CLOSEUzavře jeden nebo všechny otevřené soubory.
Soubory

SYNTAXE

CLOSE [#číslo]

PŘÍKLAD

CLOSE #1
PRINT #Zapíše textová data do otevřeného souboru.
Soubory

SYNTAXE

PRINT #číslo, data

PŘÍKLAD

PRINT #1, jmeno$; ","; skore
LINE INPUT #Načte ze souboru celý řádek.
Soubory

SYNTAXE

LINE INPUT #číslo, text$

PŘÍKLAD

LINE INPUT #1, radek$
_FILEEXISTSVrátí pravdu, pokud soubor existuje.
Soubory

SYNTAXE

_FILEEXISTS(cesta$)

PŘÍKLAD

IF _FILEEXISTS("config.ini") THEN PRINT "Nalezen"
_NEWIMAGEVytvoří obrazovou plochu; režim 32 znamená 32bitovou barvu.
Grafika

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

SYNTAXE

_DISPLAY

PŘÍKLAD

_AUTODISPLAY OFF
DO
    CLS
    ' kreslení
    _DISPLAY
LOOP
LINENakreslí čáru, obdélník nebo vyplněný obdélník.
Grafika

SYNTAXE

LINE (x1,y1)-(x2,y2), barva[, B|BF]

PŘÍKLAD

LINE (20,20)-(220,120), _RGB32(40,180,255), BF
CIRCLENakreslí kružnici, oblouk nebo elipsu.
Grafika

SYNTAXE

CIRCLE (x,y), poloměr, barva

PŘÍKLAD

CIRCLE (320, 240), 80, _RGB32(255, 200, 0)
_RGB32Sestaví 32bitovou barvu ze složek 0–255.
Grafika

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

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

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š

SYNTAXE

_KEYHIT

PŘÍKLAD

k& = _KEYHIT
IF k& = 27 THEN END
_KEYDOWNZjistí, zda je klávesa právě držena.
Klávesnice a myš

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š

SYNTAXE

_MOUSEINPUT

PŘÍKLAD

DO WHILE _MOUSEINPUT
    mx = _MOUSEX
    my = _MOUSEY
LOOP
_SNDOPENNačte zvuk a vrátí handle. Po použití zavřete pomocí _SNDCLOSE.
Zvuk

SYNTAXE

_SNDOPEN(cesta$)

PŘÍKLAD

snd& = _SNDOPEN("klik.ogg")
_SNDPLAYPřehraje načtený zvuk od začátku.
Zvuk

SYNTAXE

_SNDPLAY handle&

PŘÍKLAD

_SNDPLAY snd&
_LIMITOmezí rychlost hlavní smyčky a šetří procesor.
Časování

SYNTAXE

_LIMIT fps

PŘÍKLAD

DO
    _LIMIT 60
    ' aktualizace
LOOP
TIMERVrátí počet sekund od půlnoci; vhodné pro krátká měření.
Časování

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

SYNTAXE

RND[(n)]

Na začátku programu obvykle použijte RANDOMIZE TIMER.

PŘÍKLAD

kostka = INT(RND * 6) + 1
LENVrátí délku řetězce.
Řetězce

SYNTAXE

LEN(text$)

PŘÍKLAD

PRINT LEN("QB64")  ' 4
MID$Vrátí část řetězce; pozice se počítají od 1.
Řetězce

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

SYNTAXE

INSTR([od,] text$, hledaný$)

PŘÍKLAD

pozice = INSTR("abc@domena.cz", "@")
_CLIPBOARD$Čte nebo nastavuje text systémové schránky.
Systém

SYNTAXE

_CLIPBOARD$

PŘÍKLAD

_CLIPBOARD$ = "Zkopírováno z QB64"
_DISPLAYWIDTHVrátí šířku pracovní plochy v pixelech.
Systém

SYNTAXE

_DISPLAYWIDTH

PŘÍKLAD

PRINT _DISPLAYWIDTH; " × "; _DISPLAYHEIGHT
05

KÓ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 IF

HERNÍ 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 = 27
06

MÉNĚ CHYB, LEPŠÍ KÓD

Ladění a dobré návyky

01

Zapněte OPTION _EXPLICIT. QB64 pak vyžaduje deklarace a odhalí překlepy v názvech proměnných.

02

Dělte program do SUB a FUNCTION. Krátké, pojmenované bloky se snáz testují a znovu používají.

03

Uvolňujte zdroje. Obrázky, zvuky a soubory zavírejte pomocí _FREEIMAGE, _SNDCLOSE a CLOSE.

04

Kontrolujte mezní hodnoty. U polí použijte LBOUND a UBOUND, ne čísla napsaná natvrdo.

05

Vypisujte mezivýsledky. Jednoduché PRINT často rychle ukáže, kde se stav programu odchýlil.