Navigátorposledních 10 z diskuze |
Basic Text Game Engine v2.0 - Kompletní Návod + code manuál
Basic Text Game Engine v2.0 je prostředí vytvořené v jazyce Basic v2.0 pro tvorbu a hraní textových her. Program jsem napsal při psaní kurzů programování v Basicu na počítač Commodore 64 jako odpověď na časté výtky jedinců, kteří poukazovali na omezení zvoleného typu Basicu na tomto počítači. Pravda.
Basic v2.0 nemůže být brán jako vrcholné dílo společnosti Microsoft, protože podmínky vzniku, historie obchodních vztahů mezi společnostmi Commodore Business Machines a Microsoft
byly v dřevních dobách asi hodně zajímavé. Zvláště, když pan Tramiel, vlastník společnosti Commodore koupil jednorázová práva na použití tohoto basicu do C64.
Program pro editaci basicu
Pro tvorbu jsem použil program CBM Studio, které obsahuje kromě editoru assembleru, spritů či znaků velmi slušný editor Basicu s barevným zvýrazněním, možností komprese basicu (odstranění nepotřebných znaků), ale hlavně s možností editovat řádky delší než 80 znaků! 1. Engine v kostce
I přes drakonické omezení basicu a minimálního množství použitelných příkazů jsem se rozhodl vytvořit program pro tvorbu co nejkomplexnejší prostředí za pomocí co nejjednoduššího zadávání (čti. editace) textu bez nutnosti programovat jediný řádek! A na co se můžeme připravit ?
2. Nastavení základních vlastností hry
Proměnná DL (2840) určuje počet existujících předmětů ve hře. DL je nunté pro nadefinování polí, ve kterých se drží nejen jména předmětů, ale i jejich vlastnosti. Proměnnou MX nastavujeme maximální počet nesených předmětů. Vezmeme-li předmětů více, hra nabídne položení předmětů do mísnosti. 3. Nastavení obsahu batohu
Základním prvkem textových her či adventur je batoh plný věcí potřebných k plnění úkolů. I my máme možnost mít batoh. Počet možných věcí v batohu se nastavuje proměnnou DL (2840).
Počtu možných prvků batohu musí odpovídat počet znaků v proměnné BD$ (2880) a v definicích jednotlivých místností při testování, proměnná T$ (3530) či přidávání a ubírání předmětů, proměnná BX$ (3480). Příklad.
Počet položek v inventáři je nastaven na 10 zápisem DL=10 Znaky v zápisu batohu :
Příklad použití při pěti položkách, které může batoh obsahovat: BD$ = "++..." : Nastavení batohu, v kterém je po startu první a druhý předmět. BX$(10) = "...+-" : V místnosti 10 obdržíte předposlední předmět a o poslední přijdete. T$(5) = "+..+." : V páté místnosti se testuje zdali máte první a předposlední předmět. 4. Vytváření místnostíVytváření místností a logiky celé hry je zcela jednoduché. Každá místnost je definována pár řádky, které obsahují povinné a volitelné proměnné. Všechny proměnné patřící jedné místnosti musí mít v indexu stejné číslo místnosti. V případě delších textů definované proměnnou P$ se jedná o vícerozměrné pole definované číslem místnosti a indexem od 0 do 5. 5. Přehled proměnných pro vytváření místností
A to je vlastně vše, co je potřebné k vytvoření kompletní a komplexní hry reagující nejen na náhodu, ale i na schopnosti řešit hádanky a správně se rozhodovat. 6. Vytváříme a hrajeme hru
Projdeme si postupně celý příběh textové minihry s rozborem použitých vlastností. Při editaci místností lze oslovení použít i v textu jednotlivých místnosti zápisem: P$(10,0) = "Ahoj "+JM$+", jak se mas ?" Respektive jakoukoliv proměnnou, která je použita ve hře lze použít i v textech nebo nadpisech místností. Logo Unreal je vytvořeno příkazem PRINT, který dovoluje za uvozovky zapsat kódy nejen funkčních kláves ale i barev. Díky tomu můžete kreslit a pohybovat se do všech stran, stejně jako by jste hýbali kurzorovými klávesami a mačkali znaky. S trochou práce lze vytvořit nejen logo, ale například i lehký demoefekt :)
Těchto pár řádků se postará o vykreslení celého loga Unreal včetně barev. Na začátku každého řádku je nastavení pozice na X a Y řádek. Začátek hry, místnost č.0
Zde již začíná příběh, který jsme nadefinovali pomoci proměnných.
Nadpis je jasně definovaný v proměnné N$ (3450) a text místnosti v polích P$(0,0).
Automaticky jsme při vstupu obdrželi energii a obranu z proměnné : zápis BB$(0) = "+010/+002/+000"
Protože jsme nastavili proměnnou XT=0 (2840) tak, aby neukazovala předměty po navštívení místnosti,
předměty jsou v proměnné místnosti BX$(0) = "++.+...+...." sice nastaveny, ale čekají na objevení stiskem klávesy "1".
Po stisku klávesy "A" jsme předměty sebrali, ale jelikož máme v batohu více předmětů než nám dovoluje proměnná MX=3 (2840), hra nám okamžitě nabídne obrazovku, kde nás nutí upustit nějaký ze sebraných předmětů. Každému předmětu v batohu odpovídá písmeno, kde stiskem odpovídajícího písmene položíme položku zpět do místnosti.
Engine si pamatuje, kde byly položky ponechány a v příštím průchodu můžete sirky opět nalézt.
Místnost jsme znova prohledali stiskem klávesy "1", ale předmět již nezvedli. 3500 K$(0)="k/p001" 1. místnost - test na předmětyPři vstupu do místnosti č.1 se testuje zápisem... 3530 T$(1) = "++.........."... zda-li máme pořebné předměty, které nám umožní vstup do místnosti. Proměnná se testuje s obsahem batohu BD$ a pokud předměty nemáme, zobrazí se seznam chybějících předmětů. V případě, že předměty nemáme, příběh pokračuje tam, kam ukazuje proměnná T 3540 T(1)=0V našem případě nás proměnná T posílá opět na začátek, kde sebereme sirky a upustíme například tužku. A jelikož jsme to provedli, při opětovném stisku klávesy "P" v první místnosti nás hra pustí dále.
Boj s nepřítelem
Nastavení následující místnosti má za následek okamžitý boj s nepřítelem definovaným na řádku 3590. Proměnná FL (3590) znamená, že je živý, jmenuje se Kraken a má sílu 17, obranu 4 a kouzlo 0. 3590 FL(2)=1:FJ$(2)="Kraken":FX(2,0)=17:FX(2,1)=4:FX(2,2)=0: FP(2)=1 Začátek boje je průběhem matematických operací, který má pravidla do kterých zasahuje náhoda. Celková síla hráče a nepřítele se počítá z následujících výpočtů : 1240 s1=pw+(dw*2)+(kw*4) 1250 s2=FX(z,0)+(FX(z,1)*2)+(FX(z,2)*4)Z ukázky lze vidět, že energie hráče (PW) i nepřátelova energie FX(z,0) se sčítá s obranou, která se násobí dvěma a kouzlem, které se násobí čtyřma. Tím vzniká počáteční celková síla obou hráčů.
Celý proces souboje je jednoduchý a vychází z generování náhodných hodnot v určitém rozssahu, kdy se hodnota náhody přičítá k energii jak hráče, tak nepřítele. 1260 na=int(rnd(1)*10): nb=int(rnd(1)*10):PR=PR-1 1270 s1=s1+na: s2=s2+nb Tento jednoduchý matematický výpočet se provádí v určitém počtu opakování, které se generuje opět náhodně. A protože generování náhody na Commodore 64 není zase tak náhodné, jak by se mohlo zdát, musíme náhodě pomoci generátorem času, který má Basic v2.0 schovaný v proměnné TI$ nebo T. Nastavení počtu průběhů souboje se děje na řádcích 1230 pr = val(mid$(ti$,5,2)) 1231 if pr<30 then pr=pr+60
Basic v2.0 má totiž v proměnné TI$ právě běžící čas od posledního restartu ve formátu hodin "HHMMSS". My na řádku 1230 bereme počet aktuálně probíhajících sekund a pokud je toto číslo nižší než 30 (řádek 1231), přičteme k počtu průběhů hodnotu 60.
V případě, že se souboj vyvíjí lépe pro hráče, je rám obrazovky černý. V případě nadvlády nepřítele je rám obrazovky červený.
Pokud hráč prohrál, zobrazí se informace a příbeh se odehrává tam, kam ukazuje proměnná T. Po opětovném pokusu o boj s Krakenem přeci jen hráč vyhrál. Při výhře se zobrazí text místnosti ...
... a prohledáme-li tuto místnost, najdeme zde i mrtvého Krakena. Hážeme kostkou a recyklujeme
Protože paměť začne s přibývajícím příbehem rychle ubývat a v některých případech je nezbytné psát u více místností stejný text, proměnou Stejný text například potřebujeme tam, kde prohledáváme jednu místnost několikrát za sebou, ale větvení příbehu potřebujeme pokaždé měnit. V našem případě sice zobrazujeme text z místnosti 1 3640 PA(4)= 1Narozdíl od první místnosti, kde se rozhodovalo stiskem klávesy se zde rozhoduje za pomocí kostky. O to, že se bude házet kostkou se stará zápis na řádku 3650 a první znak v řetězci, znak "D". 3650 K$(4)="d/a003/b003/c003/d003/e003/f003" Zápis jasně ukazuje, že všechny volby, které mohou padnou odkazují na stránku "3". Klávesou "space" kostku zastavíme a podle zastaveného čísla nás engine pošle na patřičnou stránku. Více podmínekTakřka vždy je potřeba se rozhodovat podle více možností volbou klávesnice. Tato místnost nám dovoluje stisknout jednu ze čtyř kláves a ... ... podle stisknuté klávesy nás hra pošle do ... Konce :) Konec ?Ukázka v tomto návodu je skutečná minihra o pěti obrazovkách a ukazuje drtivou většinu možností Basic Text Game Engine. Jednoduchost spočívá v pouhém přidávání jednotlivých místností a provazováním příběhu na základě všemožných podmínek, náhod soubojů a v neposlední řadě předmětů, které můžete na své cestě sbírat. Jelikož je paměti málo a při zapisování začne velmi rychle ubývat, rozšiřování tohoto zcela funkčního enginu o mnoho dalších funkcí je jen na úkor možného počtu místností, které jsou tak potřeba. ( mimochodem já se dostal na omezení počtu 87 místností a pak už to Basic prostě nebral :) Při psaní příběhu vám bude největší přítel tužka a papír a pokud budeme mít chuť, můžete tento program použít na to, aby jste si nakonec vaši hru zahráli. Celý zdrojový kód pro CBM studio včetně ukázkové minihry si můžete stáhnout zde. Samotná minihra ve formátu PRG je ke stažení zde. Petr Chlud alias PCH / Unreal
ps. Aktualizace z verze 1.1 na 2.0 proběhla zcela spontálně poté, co jsem po napsání manuálu k verzi 1 zjistil, jak je škaredá :)
Nový příspěvek k článku
24.08.2019 - PCH
Ano. Já se to dozvěděl až včera při sledování videa o Simons Basicu na youtube :) Tak jsem udělal jsem takový malý paměťový benchmark a zadání bylo následující: 23.08.2019 - jirka
Tak to jsem netušil, že ten pro mne dosud "skoro-basic" rozlišuje číselné proměnné a má možnost určit integer. To se musím tomu basicu nejen v duchu omluvit. Tohle na Atárku neumí ani TBasicXL - tedy výrazně vylepšená verze Basicu, která se musela nejprve načíst (natož ten vestavěný). 23.08.2019 - PCH
Ještě jedna věc, kterou jsem zjistil a to ta, že kde není potřeba používat FLOAT k deklaraci počtu prvku polí .. resp .. kdo by potřeboval FLOAT k indexování polí :) tak se prostou změnou zápisu z původního: 23.08.2019 - PCH
V teto verzi probiha souboj do prubehu=10. V dalsi verzi je jiz opraveno ... |
Poslední recenzereakce na článkyTOP 10 HRY
|