reklama
Vždy jste se chtěli naučit kódovat, ale nevěděli jste, kde začít? Naučte se, jak ovládat Minecraft na Raspberry Pi pomocí Pythonu a nějaké jednoduché elektroniky. Zde je konečný výsledek:
Pro tento projekt budete potřebovat Pi 2 nebo novější a většinu těchto úkolů byste mohli dokončit pomocí příkazového řádku přes Secure Shell (SSH), ale tento tutoriál se zaměří na kódování přímo na Pi.
Jste v Minecraft novým? Nebojte se - tady je náš Průvodce Minecraft pro začátečníky (Začátečník) Průvodce Minecraftem pro začátečníkyPokud ale přijdete pozdě na párty, nebojte se - tento obsáhlý průvodce pro začátečníky vás obsáhl. Přečtěte si více .
Úvod do Minecraft Pi

Minecraft pro Raspberry Pi byl vyvinut pro učení a drotářství (a je zdarma). Je dodáván s aplikačním programovacím rozhraním (API), které poskytuje způsob, jak kód snadno komunikovat s Minecraft. Je to skvělé, když se naučíte, jak v Pythonu kódovat Začínáme s elektronikou Elektronika pro začátečníky: 10 dovedností, které potřebujete vědět Mnozí z nás se nikdy nedotkli páječky - ale výroba věcí může být neuvěřitelně prospěšná. Zde je deset nejzákladnějších DIY elektroniky, které vám pomohou začít. Přečtěte si více .
Co je Python?
Krajta je programovací jazyk. to je interpretováno, což znamená, že při spuštění souboru nebo programu Python musí počítač nejprve do souboru udělat malou práci. Nevýhody jsou, že to může být považováno za pomalé ve srovnání s kompilované jazyky.
Výhodou tlumočených jazyků je rychlost kódování a jejich přívětivost. Nemusíte říkat počítači co data, která chcete uložit, jen to, že chcete něco uložit a počítač zjistí, co dělat. Existují samozřejmě výjimky, a to je poněkud zjednodušený pohled, programování by však mělo být zábavné! Pokud začnete kopat do složitých technických detailů, může to být trochu pracné.
Python rozlišuje velká a malá písmena. To je důležité vědět, protože Python nerozpozná objekty i když jsou napsány správně pokud je případ nesprávný. „Dosomething ()“ nebude fungovat, pokud se metoda skutečně nazývá „DoSomething ()“. Python také používá odsazení. Ostatní programovací jazyky se nemusí zajímat, kolik má odrážka váš kód, zatímco Python ano péče. Odsazení se používají k tomu, aby Pythonu řekli, kam kód patří. Jiné jazyky mohou použít skupinu „Curly Braces“ ({}) - Python je nepoužívá. Python používá hash (#) pro komentáře a komentáře se používají k tomu, aby ostatním vývojářům nebo lidem, kteří sledují kód, řekli, co konkrétní část dělá, nebo proč je to nutné. Python nic ignoruje po hašování.
Nakonec existují dvě hlavní verze Pythonu - Python 2.7.xa Python 3.x. Mezi nimi jsou některé rozdíly (jaké jsou rozdíly?). Tento tutoriál použije Python 3.
Počáteční nastavení
Poskytnutí vašeho Pi je již nastavení a spuštění Raspbian Jak nainstalovat operační systém na Raspberry PiZde je návod, jak nainstalovat operační systém na Raspberry Pi a jak klonovat vaše perfektní nastavení pro rychlé zotavení po havárii. Přečtěte si více , není potřeba počáteční nastavení.
Otevřít terminál (Menu> Příslušenství> Terminál) a spusťte tento příkaz. Je vždy dobrým zvykem udržovat seznam repozitářů aktuální, a tím se stáhne nejnovější seznam programů (nebude stahovat programy samotné, to pomůže Pi vědět, jaké programy se nazývají a kde hledat) jim).
aktualizace sudo apt-get.
Nyní aktualizujte Pi (může to chvíli trvat):
sudo apt-get upgrade.
Python a Minecraft Pi jsou již nainstalovány, ale pokud není Minecraft Pi z nějakého důvodu nainstalován, instalace je jednoduchá 5 způsobů, jak nainstalovat software na Raspberry PiChcete-li s Raspberry Pi dělat cokoli, musíte vědět, jak nainstalovat operační systém a software, který na něm běží. Pokud jste v systému Linux nováčkem, může to být skličující. Přečtěte si více :
sudo apt-get install minecraft-pi
Přejděte na dokumenty a vytvořte novou složku s názvem „Minecraft“:
cd Dokumenty / mkdir Minecraft
Můžete zobrazit obsah této nové složky:
ls
Tady je tip - pokud začnete psát a stisknete klávesu TAB, příkazový řádek se pokusí příkaz doplnit automaticky.
Cestu k aktuálnímu adresáři můžete prozkoumat pomocí pwd, což znamená Print Working Directory:
pwd
Začněte Minecraft tím, že půjdete Menu> Hry> Minecraft Pi. Tento chod budete potřebovat, ale později se k němu vrátíte.
Otevřete Python 3 z Menu> Programování> Python 3 (IDLE). Tento program poskytuje způsob, jak spouštět příkazy Python a psát programy.
Nyní můžete napsat své příkazy Pythonu, ale to není příliš praktické. Jít do Soubor> Nový soubor a pak Soubor> Uložit a uložte to do složky, kterou jste vytvořili dříve. (Dokumenty> Minecraf). Říkejme tomu „hello_world.py“. Nemusíte používat příponu .py, bude to přidáno automaticky, ale je to dobrý postup.
Pokud přepnete zpět na terminál a přejdete do složky Minecraft, měli byste vidět právě vytvořený soubor:
cd Minecraft / ls
Tento soubor můžete spustit takto:
python hello_world
Všimněte si, jak je „python“ malými písmeny. Toto musí být před názvem souboru, protože řekne Pi, že následující soubor je Python, takže by měl být spuštěn jako takový.
Přepněte zpět do editoru Python a napište:
tisk "Ahoj, svět!"
Uložte tento soubor a spusťte jej znovu - nyní byste měli vidět „Ahoj, svět!“ objeví se na příkazovém řádku - čistý! Příkaz print jednoduše řekne Pythonu, aby následující text vydal ve dvojitých uvozovkách. To je dobré, ale pro Minecraft to není moc užitečné, pojďme to propojit:
z mcpi.minecraft import Minecraft mc = Minecraft.create () mc.postToChat ("Ahoj, svět!")
Pokud nyní tento soubor uložíte a spustíte, mělo by se zobrazit „Ahoj, svět!“ objeví se ve hře Minecraft. Rozdělme si kód:
z mcpi.minecraft import Minecraft
Tento řádek říká Pythonu, že chcete použít kód z jiného souboru. Tento soubor mcpi.minecraft byl vyvinut, aby umožnil snadné ovládání Minecraft.
mc = Minecraft.create ()
Tento řádek vytvoří objekt s názvem „mc“ (Minecraft). Musíte to vytvořit, abyste umožnili komunikaci s hrou Minecraft - nestačí pouze zahrnout soubor.
mc.postToChat („Ahoj, svět!“)
Nakonec tento řádek říká Minecraftovi, aby do chatu napsal nějaký text. Zkuste změnit „Ahoj, svět!“ k něčemu jinému a uvidíte, co se stane, ale nezapomeňte uvést obě uvozovky. Pokud máte problémy se softwarem, jedná se o některé běžné chyby Python a Minecraft Pi:
- AttributeError - jedná se o překlep, například pint nebo prnt místo tisku
- NameError: jméno 'Minecraft' není definováno - nezapomeňte importovat potřebné moduly
- NameError: jméno „true“ není definováno - Python rozlišuje velká a malá písmena, změňte na „True“
- socket.error: [Errno 111] Připojení odmítnuto - Ujistěte se, že Minecraft běží
Projekty
Nyní, když znáte základy Pythonu a Minecraft, udělejme pár skvělých projektů. Všechny kódy lze stáhnout z Github.
Automatizovaný stavitel mostů

Tento program účinně postaví most přes vodu. Když se hráč přiblíží k vodní hladině, program převede několik bloků na kámen. Protože Minecraft používá souřadnicový systém, je velmi snadné zjistit polohu hráče spolu s typem bloků kolem hráče. Minecraft Pi je mírně omezený, takže není možné hromadně aktualizovat několik různých bloků. Toto chování však můžete snadno kódovat sami.
Vytvořit nový soubor (Soubor> Nový soubor) a uložte jej jako „bridge_builder.py“.
z mcpi.minecraft import Minecraft. mc = Minecraft.create () # vytvoří Minecraft Object, zatímco True: x, y, z = mc.player.getPos () # store player position # uloží okolní bloky a = mc.getBlock (x, y - 1, z + 1) b = mc.getBlock (x, y - 1, z - 1) c = mc.getBlock (x - 1, y - 1, z) d = mc.getBlock (x + 1, y - 1, z), pokud a == 8 nebo a == 9 nebo b == 8 nebo b == 9 nebo c == 8 nebo c == 9 nebo d == 8 nebo d == 9: # 8 nebo 9 je voda. Nastavte okolní bloky na podlaze na pevný (kámen), pokud je nalezena voda mc.setBlocks (x, y - 1, z, x + 1, y - 1, z + 1, 1) mc.setBlocks (x, y - 1, z, x - 1, y - 1, z - 1, 1) mc.setBlocks (x, y - 1, z, x - 1, y - 1, z + 1, 1) mc .setBlocks (x, y - 1, z, x + 1, y - 1, z - 1, 1)
Všimněte si, jak se hodnota y skutečně dívá na y - 1. Toto je úroveň podlahy. Pokud by byla použita hodnota y, skript by hledal bloky na úrovni kolen - nefungovalo by to velmi dobře! Mc.getBlock () vrátí ID bloku pro dané souřadnice. Protože x, y a z jsou souřadnice hráče, můžete je od nich přidat nebo odečíst, abyste získali pozice kolem hráče. Nemusíte používat hodnoty x, y a z, můžete použít libovolné číslo, ale možná nevíte, jak se daný blok týká hráče - je lepší použít hodnoty relativně vůči hráči. Spusťte tento soubor z příkazového řádku a podívejte se, co se stane.
Měli byste vidět, že malá část země se změní na kámen, jakmile hráč dosáhne vodní hladiny. Není to skvělé - jste schopni chodit dostatečně rychle, abyste způsobili problém. To byste mohli vyřešit převedením většího množství vody na pevninu. Poslední část metody mc.setBlocks () je id bloku. Jedním z nich je blok id pro kámen. Dalo by se to změnit na dřevo, trávu nebo cokoli. Pokud byste chtěli, můžete to docela snadno převést na složitý design - možná visutý most!
Tlačítko Super Mining

V tomto příkladu bude krátká práce s těžbou. Skládá se z fyzického tlačítka, které po stisknutí vytěží 10 krychlových bloků. Začněme s tlačítkem. Podobně jako u tlačítek na Arduinu budete potřebovat malé množství elektroniky, z nichž všechny najdete v a základní startovací sada Co je ve vaší Arduino Starter Kit? [Arduino začátečníci]Tváří v tvář s krabicí plnou elektronických součástek je snadné přemoci. Zde je průvodce přesně tím, co najdete v sadě. Přečtěte si více :
- 1 x prkénko
- 1 x krátkodobý spínač
- 1 x 220 ohmový rezistor
- Ženské> mužské kabely pro skok
- Zástrčka> Zástrčné kabely
Zde je okruh:

Tento rezistor se nazývá „pull down“ rezistor. Pomáhá zajistit, že to, co si Pi myslí, je, že je stisknuto tlačítko, skutečně je to stisknuté tlačítko. Nemusíte to používat, ale doporučuje se, protože bez něj můžete najít spoustu šumu a chybných údajů.
Tlačítko je připojeno ke kolíku 14 pro vstupní účel GPIO. Můžete použít libovolný pin GPIO, podívejte se však na pinout za prvé, protože nejsou všechny ovládatelné z Pi a mezi modely se mírně liší.
Nyní, když je tlačítko připojeno, je čas to vyzkoušet. Vytvořte nový soubor a uložte jej jako „button_test.py“. Přidejte tento kód, uložte jej a poté spusťte v Terminálu.
import RPi. GPIO jako GPIO. doba importu GPIO.setmode (GPIO.BCM) # sdělte Pi, jaké záhlaví použít. GPIO.setup (14, GPIO.IN) # řekněte Pi, že tento pin je vstup, zatímco True: pokud GPIO.input (14) == True: # hledejte tlačítko stiskněte tisk "BUTTON WORKS!" # log result time.sleep (0.5) # počkejte 0,5 sekundy.
lis Control + C zastavit skript. Pokud vše funguje správně, měli byste vidět „BUTTON WORKS!“ v terminálu. Všimněte si, jak tento modul, stejně jako modul Minecraft, používá RPi. GPIO a časové moduly. Umožňují Pi přístup k hardwarovým pinům a poskytují užitečné časovací funkce.
Nyní můžete dokončit zbytek kódu. Vytvořit nový filecalled “super_mine.py“. Zde je kód:
import RPi. GPIO jako GPIO. importovat čas. from mcpi.minecraft import Minecraft mc = Minecraft.create () # create Minecraft Object GPIO.setmode (GPIO.BCM) # řekněte Pi, jaké záhlaví použít. GPIO.setup (14, GPIO.IN) # řekněte Pi, že tento pin je vstup, zatímco True: pokud GPIO.input (14) == True: # hledejte stisknutí tlačítka x, y, z = mc.player.getPos ( ) # přečtěte si přehrávač pozice mc.setBlocks (x, y, z, x + 10, y + 10, z + 10, 0) # min 10 bloků mc.setBlocks (x, y, z, x - 10, y + 10, z - 10, 0) # důl 10 bloků time.sleep (0,5) # wait 0.5 sekundy.
mc.player.getPos () vrací hráčům aktuální souřadnice, které jsou pak uloženy v x, y a z. setBlocks () metoda říká Minecraft, aby vyplnil všechny bloky mezi začátkem a koncem následujícím blokem. Nula je blok-id pro vzduch. Dalo by se to změnit na jiné ID bloku, abyste vyplnili oblast. Můžete také změnit souřadnice na +100 nebo dokonce +1000 bloků, ale Pi se může začít potýkat, pokud budete příliš blázni. Všimněte si, jak y + 10 je stejné pro oba řádky. Můžete to změnit na y - 10, pokud chcete odstranit bloky v podzemí.
Teleporting

Dalším jednoduchým použitím tohoto tlačítka může být teleport. Minecraft Pi Api poskytuje způsob, jak nastavit pozici hráče. Následující kód „teleportuje“ hráče do přednastaveného umístění:
mc.player.setPos (0, 0, 0)
Všimněte si, že jeho metoda přijímá tři parametry; x, y a z - abyste je mohli nastavit na cokoli, abyste mohli okamžitě teleportovat hráče na toto místo.
Vytvořte kopii souboru super_mine (Soubor> Uložit kopii jako) a upravte jej nahrazením if, pokud:
pokud GPIO.input (14) == True: # hledejte tlačítko stiskněte mc.player.setPos (0, 0, 0) # teleport player time.sleep (0.5) # počkejte 0,5 sekundy.
Tento soubor by nyní měl vypadat takto:
import RPi. GPIO jako GPIO. z mcpi.minecraft import Minecraft. doba importu mc = Minecraft.create () # create Minecraft Object GPIO.setmode (GPIO.BCM) # sdělte Pi, jaké záhlaví použít. GPIO.setup (14, GPIO.IN) # řekněte Pi, že tento pin je vstup, zatímco True: pokud GPIO.input (14) == True: # hledejte stisknutí tlačítka mc.player.setPos (0, 0, 0) # teleport player time.sleep (0.5) # wait 0.5 sekundy.
Uložit jako „teleport.py“A běžet.
Možná zjistíte, že se hráč při použití uvízl uvnitř některých bloků. V takovém případě musíte upravte souřadnice podle známého otevřeného prostoru (v levém horním rohu obrazovky se zobrazuje váš aktuální) umístění).
Postavit dům

Posledním úkolem tohoto tlačítka je postavit dům. Stejně jako výše uvedený příklad rychlého dobývání, toto jednoduše nahradí bloky obklopující hráče a vytvoří dům. Pro různé materiály (okna, stěny atd.) Budou použity různé identifikátory bloků. Aby se věci snadněji kódovaly, vytvoří se pevný blok a poté se odstraní vnitřek (nastaví blok na vzduch) a vytvoří se dutá skořepina. Můžete přidat doplňky jako postel nebo dveře, nicméně projekt Minecraft Pi je trochu neúplný a zatímco tyto objekty fungují, když jsou umístěny hráčem, nejsou brilantní, když používají Python.
z mcpi.minecraft import Minecraft. import RPi. GPIO jako GPIO. doba importu mc = Minecraft.create () # create Minecraft Object GPIO.setmode (GPIO.BCM) # sdělte Pi, jaké záhlaví použít. GPIO.setup (14, GPIO.IN) # řekněte Pi, že tento pin je vstup, zatímco True: pokud GPIO.input (14) == True: x, y, z = mc.player.getPos () mc.setBlocks ( x + 2, y - 1, z + 2, x + 7, y + 3, z + 8, 5) # vytvořit shell mc.setBlocks (x + 3, y, z + 3, x + 6, y + 2, z + 7, 0) # odstranit uvnitř mc.setBlocks (x + 2, y, z + 5, x + 2, y + 1, z + 5, 0) # vytvořte vstupní bránu mc.setBlocks (x + 4, y + 1, z + 8, x + 5, y + 1, z + 8, 102) # vytvořte okno 1 mc.setBlocks (x + 4, y + 1, z + 2, x + 5, y + 1, z + 2, 102) # vytvořte okno 2 mc.setBlocks (x + 7, y + 1, z + 4, x + 7, y + 1, z + 6, 102) # vytvořte okno 3.
Uložit jako „house.py“A běžet. Když je vše v pořádku, měli byste vidět malý dům, který se objeví (možná budete muset otočit, abyste to našli). Je to velmi jednoduché, otevření a některá okna. Teoreticky neexistuje omezení, jak velká nebo složitá budova byste mohli postavit.
Udělejte si mini hru

Dále udělejme mini-hru! To bude docela jednoduché, když hráč vstoupí na blok písku, promění se v lávu po náhodném množství času. Je to dobrá hra, kterou byste si mohli udělat, protože byste mohli navrhnout své vlastní úrovně nebo je upravit tak, aby věci byly těžší. Tlačítko v tomto příkladu nebudete potřebovat.
Vytvořte nový soubor a uložte jej jako „mini_game.py“. Zde je kód:
z mcpi.minecraft import Minecraft. importovat náhodně. doba importu mc = Minecraft.create () # vytvořit objekt Minecraft, zatímco True: x, y, z = mc.player.getPos () block_under_player = mc.getBlock (x, y - 1, z), pokud block_under_player == 12: # hráč stojící na písku, spusťte časovač random_time = random.uniform (0,1, 2,5) # vygenerujte náhodné číslo time.sleep (random_time); # wait mc.setBlock (x, y - 1, z, 11) # přeměňte na lávu.
Tento kód je dobrým startérem na internetu náhodný() funkce: random.uniform (0,1, 2,5) vygeneruje náhodné číslo od 0,1 (1/10 sekundy) do 2,5 (2 1/2 sekundy). Zvýšení těchto čísel usnadní hru.
Vyzkoušet to! Postavte se na blok písku a brzy se změní na lávu. To by mohlo být základem složitější hry.
Udělejte další mini hru

Předpoklad pro tuto hru je jednoduchý - nestojte na dřevěné podlaze, když vyprší čas. Hráč se teleportuje do „arény“. Jsou nuceni stát až do začátku hry. Po spuštění se podlaha změní na vodu, jakmile časovač vyprší. Hráč musí stát v bezpečné zóně (diamantové bloky), aby přežil. Každá úroveň snižuje časovač o jednu sekundu. Po každé úspěšné úrovni se bezpečná oblast zvětšuje. Podívejte se na níže uvedený kód:
importovat čas. importovat náhodně. z mcpi.minecraft import Minecraft mc = Minecraft.create () # create Minecraft Object # clear area. mc.setBlocks (-10, 1, -10, 25, 5, 25, 0) # vytvoří prostředí arény. mc.setBlocks (0, 0, 0, 25, 10, 25, 17) # vyhloubila arénu. mc.setBlocks (1, 1, 1, 24, 10, 24, 0) # přesuňte hráče do arény. mc.player.setPos (14, 25, 20) # teleportní hráč # přiměje je, aby zůstali na místě. # hráč teleportu, aby startoval pozici každou 1/10 sekundu. # udělejte to po dobu 5 sekund a poté zahajte hru. time.sleep (2) total_wait = 0. mc.postToChat („Čekání na spuštění“) zatímco total_wait <5: mc.player.setPos (14, 1, 20) # teleport player time.sleep (0,1) total_wait + = 0,1 mc.postToChat ("BEGIN!") # 10 úrovní. pro úroveň v rozsahu (10): x, y, z = mc.player.getPos () level_time = 10 - level # zkrátí čas o 1 sekundu pro každou úroveň mc.postToChat ("Level -" + str (level + 1) + "start") # build floor mc.setBlocks (0, 0, 0, 25, 0, 25, 17) # make safe area safe_area_start = random.uniform (0, 22) safe_area_end = random.uniform (0, 22) mc.setBlocks (safe_area_start, 0, safe_area_end, safe_area_start + level, 0, safe_area_end + level, 57) elapsed_time = 0 while elapsed_time <10: x, y, z = mc.player.getPos () time.sleep (0.25) elapsed_time + = 0.25 # check player je stále na podlaze, pokud y <0,75: mc.postToChat ("Game Over ") break; jinde: # odstranit podlahu mc.setBlocks (-10, 0, -10, 25, 0, 25, 8) # dát bezpečnou oblast zpět mc.setBlocks (safe_area_start, 0, safe_area_end, safe_area_start + level, 0, safe_area_end + level, 57) time.sleep (2.5) pokračovat v přestávce.
Uložit jako „mini_game_2.py“A zkuste to.
Pi 2 má při běhu Minecraft nějaké problémy s výkonem. Graf využití centrální procesorové jednotky (CPU) (pravý horní roh) nikdy neukazuje žádné velké zatížení, takže se musí jednat o špatnou konstrukci a optimalizaci vývojářů. Tyto problémy nesouvisejí s běžícím kódem (protože pokračují, když Python neběží), ale tato mini hra je umocňuje. Pokud váš Pi opravdu bojuje, možná budete chtít zmenšit velikost arény nebo přetaktujte svůj Pi Není dost šťávy? Squeeze Your Raspberry Pi přetaktovánímPokud v roce 2012 vyšel nějaký hardware, do kterého se budete pravděpodobně zamilovat, je to maličký Raspberry Pi, mini počítač navržený a postavený ve Velké Británii, který byl dodán do celého ... Přečtěte si více .
Diamantový detektor

Udělejme další okruh. Tím se rozsvítí dioda LED (Light Emitting Diode), která se rozsvítí, pokud jsou pod ní diamanty (do 15 bloků). Co potřebujete:
- 1 x prkénko
- 1 x LED
- 1 x 220 ohmový rezistor
- Ženské> mužské kabely pro skok
- Zástrčka> Zástrčné kabely
Zde je okruh:

Připojte anodu (dlouhá noha) k GPIO Pin 14. Tento pin funguje jako + 5V. Připojte katodu (krátkou nohu) k zemi.
Použil jsem levnou rudnou hračku a upravil ji odstraněním zadního krytu a elektroniky, poté jsem pod ni umístil LED. Dalo by se to snadno udělat trvalým lepidlem nebo něčím podobným.

Uložte tento kód jako „diamonds.py“:
import RPi. GPIO jako GPIO. importovat čas. from mcpi.minecraft import Minecraft mc = Minecraft.create () # create Minecraft Object led_pin = 14 # uložte číslo PIN GPIO GPIO.setmode (GPIO.BCM) # řekněte Pi, jaké záhlaví použít. GPIO.setup (14, GPIO.OUT) # řekněte Pi, že tento pin je výstup, zatímco True: # opakujte neurčitě x, y, z = mc.player.getPos () pro i v rozsahu (15): # podívejte se na každý blokovat do blok 15, pokud mc.getBlock (x, y - i, z) == 56: GPIO.output (led_pin, True) # turn LED on time.sleep (0.25) # wait GPIO.output (led_pin, False) # turn LED čas vypnutí (0,25) # Počkejte.
Pokud je pod přehrávačem blok diamantové rudy (do 15 bloků), bude světlo blikat.
Udělali jste něco v pohodě s Minecraft Pi? Dejte mi vědět v komentářích, co jste dosáhli nebo jak daleko jste dosáhli ve hrách.
Joe je absolventem informatiky na University of Lincoln ve Velké Británii. Je to profesionální softwarový vývojář, a když nelétá dronů nebo píše hudbu, často ho najde, když fotografuje nebo produkuje videa.