TXT game


Popis aplikace

Jedn� se o textovou RPG hru. Jej� p��b�h je zasazen do bl�e nespecifikovan�ho sv�ta sk�et�, trpasl�k� a jin�ch potvor. Historick� obdob� nen� ur�eno, proto se ve h�e m��ete setkat s ne�ekan�mi v�cmi.
Soubojov� syst�m, jak jsem zjistil, je v podstat� p�evzat z Dra��ho doup�te. Postava m� charakterizuj�c� vlastnosti: S�LA, ODOLNOST, �TOK a OBRANA. �to�n� ��slo se po��t� S�LA + 0..�TOK, p�i�em� kdy� padne 0 je kritick� ne�sp�ch, to znamen� �e v� / potvory �tok se v tomto kole ru��. Obran� ��slo se po��t� jako ODOLNOST + 0..OBRANA. Kdy� je �to�n� ��slo v�t�� ne� obran� ��slo, tak va�e postava/potvora p�ijde o �ivoty odpov�daj�c� rozd�lu �to�n�ho a obran�ho ��sla. V�echny vlastnosti va�eho hrdiny m��ete zlep�it / zhor�it pomoc� r�zn�ch me��, �t�t�, brn�n� a lektvar�.

Na t�to map� se odehr�v� p��b�h:

Popis instalace

Sta�� rozbalit zip arch�v v�etn� podadres��� do v�mi vybran�ho adres��e

N�vod ke spu�t�n� a ovl�d�n�

Spu�t�n�

V p��kazov�m ��dku MS-DOS spustit soubor TXTgame.exe z adres��e, kam jste hru rozbalili.
V prost�ed� Windows poklep�n� na ikonku TXTgame

Ovl�d�n�

Ovl�d�n� hry p�ipom�n� p��kazov� ��dek MS-DOS, u p��kaz� a parametr� se nerozli�uj� mal� a VELK� p�smena.

Seznam v�ech p��kaz�:

Popis �innostiP��kazParametrKde se mus� dan� v�c na kterou je p��kaz pou�it nach�zet
ch�ze do dal�� lokace jdi, bez, g jm�no dve�i dal�� m�stnost
zvednuti predmetu do invetare seber, zvedni, t jm�no p�edm�tu m�stnost
zahozeni predmetu na zem zahod, poloz, p jm�no p�edm�tu prava ruka, leva ruka, telo, inventar
prohlednuti predmetu zkoumat, ukaz, e jm�no p�edm�tu mistnost
utok na potvoru zabij, utok, a jm�no potvory mistnost
zkoumani lokace koukam, l ----- sou�asn� m�stnost
ukazani vlastnosti postavy char, c ----- -----
ukazani inventare inv, i ----- -----
uchopeni predmetu z inventare leva, prava, telo jm�no p�edm�tu invent��
pouziti predmetu z inventare pouzij, use, u jm�no p�edm�tu invent��
konec hry konec ----- -----

P��klad: JDI veznice, ZABIJ skret, INV, CHAR
Pozn�mka: Je jedno, jestli pou�ijete p��kaz JDI nebo G, maj� �pln� stejnou funkci. To plat� u v�ech ostatn�ch p��kaz�.

Popis �e�en�

Popis hrub�ho �e�en� programu

Procedura LoadWorld pomoc� dal��ch procedur a funkc� na�te xml soubor a vytvo�� z n�j datovou strukturu. Tata datov� struktura je tvo�ena line�rn�m seznamem m�stnost�, kter� je je�t� nav�c prov�z�n dal��mi ukazateli, kter� p�edstavuj� jednotliv� dve�e do dal��ch m�stnost�. Ka�d� m�stnost obsahuje dal�� 2 line�rn� seznamy: seznam potvor a seznam p�edm�t�. Ka�d� potvora m��e obsahovat dal�� p�edm�ty. Datov� struktura tohoto sv�ta vypad� takto:

Hr�� je reprezentov�n z�znamem, ve kter�m je definov�na jeho s�la,obrana, to co m� na sob�, d�le ukazatel na invent��, co� je seznam item� a ukazatel na aktu�ln� m�stnost.
Vlastn� hra funguje tak, �e v cyklu se nejprve vol� procedura CheckAtckCr, kter� zjist� jestli na va�i postavu �to�� prvn� postova v m�stnosti. Pokud ano tato procedura zavol� proceduru souboj. Jako dal�� vol� proceduru CtiVstup, kter� v�m pokl�d� ot�zku: "Co chces delat?" a vrac� hodnotu p��kazu a parametru. P��kaz a parametr jsou posl�ny do dal�� procedury DoAction, kter� si v p�evodn� tabulce z unity MeziTab zjist�, jak� konstanta odpov�d� p��kazu. Tato konstanta je selektor v�tven�, kter� ur�uje, jak� procedura se zavol�. Pokud ��dn� procedura neodpov�d� konstant�, co� znamen�, �e p��kaz je chybn�, vyp�e se chybov� hl�ka. V�d�in� t�mto procedur�m se pos�l� parametr (string), v�d�inou jm�no potvory nebo p�edm�tu. Tento cyklus kon�� pokud �ivoty va�� postavy (curLive) jsou men�� ne� 0, nebo prom�n� run je false. Prom�n� run se zm�n� na false v p��pad�, �e zabit� potvora, sebran� p�edm�t nebo m�stnost do kter� jste p�i�li m� prom�nou endg = true.
Cel� program je rozd�len do 5 unit a hlavn�ho programu. V unit� datastr jsou naimlementov�ny 3 line�rn� seznamy, procedury a funkce pro pr�ci s nimi a z�sobn�k. Z�sobn�k se pou��v� pouze v procedu�e LoadWorld pro ukl�d�n� ukazatel� na posledn� m�stnost/potvoru/p�edm�t.


V�pis typ�, prom�n�ch, lavi�ek procedur a funkc� v unit� DataStr:

Z�sobn�k

procedure Init (var Zasobnik: UkPolozka);
inicializace z�sobn�ku, nastaven� vrcholu a dna na nil

function Empty (Zasobnik: UkPolozka): boolean;
pokud je z�sobn�k pr�zdn� vrac� true

function Push (t: zTyp; m: UkRoom; c:UkCreature; i:UkItem; var Vrchol: UkPolozka):boolean;
p�id�n� do z�sob�ku
Proto�e jsem v Pascalu nep�i�el na zp�sob jak p�etypovat typovan� ukazatel, mus� se do parametru t zadat o kter� ukazatel se jedn�, ten pak p�i�adit spr�vn�mu parametru a zbyl� nastavit na nil (nen� nutn�).

function Pop (var Vrchol: UkPolozka):pointer;
odebere prvek ze z�sobn�ku, s prvkem se ji� d�l nepracuje, proto je ukazatel netypov�

Pr�ce s m�stnostmi

procedure rLoadDoors(s: string; var dl: tDoorList);
Napln� pole Doors v aktu�ln� m�stnosti jm�nami m�stnost� kam se d� j�t

function rNew (at: AttList; n: byte; p: pTab): UkRoom;
Vytvo�� z�znam odpov�daj�c� nov� m�stnosti a vr�t� na n� ukazatel, parametry kter� nebyly v XML souboru zad�ny nastav� na po��te�n� hodnotu

procedure rAdd ( nova: UkRoom; var world: UkRoom);
P�id� (novou) m�stnost na za��tek line�rn�ho seznamu kam ukazuje prom�n� world

function rSearch (jmeno: string; svet: UkRoom): UkRoom;
Vr�t� adresu odpov�daj�c� jm�nu m�stnosti v parametru jmeno

procedure rInitDoors(var svet: UkRoom);
vol� se po na�ten� cel�ho sv�ta, pro ka�d� dve�e ve v�ech m�stnostech zavol� prceduru rSearch a v�slednou adresu ulo�� do pole dve�� Doors ke jm�nu dve��

function rSearchDoor(d: string; m: UkRoom): UkRoom;
podle jmena d najde odpov�daj�c� adresu m�stnosti, funkce navenek je stejn� jako u rSearch, ale prohled�v� pouze konkr�tn� m�stnost, Rychl�!!!

Pr�ce s p�edm�ty

function iNew(Atrib: AttList;n: byte; p:pTab): UkItem;
Pomoc� Atrib listu z funkce gettag a prevodn� tabulky vytvo�� z�znam p�edm�t a vr�t� na n�j ukazetel

function iSearch (jmeno: string; predmet: UkItem): UkItem;
Najde adresu p�edm�tu odpov�daj�ci jm�nu v seznamu na kter� ukazuje p�edm�t

procedure iAdd (novy: UkItem; var kam: UkItem);
P�id� novy na za��tek seznamu kam ukazuje kam

procedure iAddToEnd (novy: UkItem; var iList: UkItem);
Vhodn� pro p�id�v�n� cel�ho seznamu k jin�mu. POMAL�!!!

function iRemove (predmet: UkItem; var ItemList: UkItem): UkItem;
Odebere p�edm�t z itemlistu a vr�t� jeho adresu

procedure iMove (var i, odkud, kam: UkItem);
p�esune p�edm�t mezi dv�mi seznami

Pr�ce s potvorami


function cNew(Atrib: AttList;n: byte; p:pTab): UkCreature;
viz iNew

procedure cAdd (nova: UkCreature; var kam: UkCreature);
viz iAdd

function cRemove (potvora: UkCreature; var cList: UkCreature): UkCreature;
vir iRemove

function cSearch (jmeno: string; potvora: UkCreature): UkCreature;
viz i Search




V unit� MeziTab jsou dv� p�evodn� tabulky slou��c� pro p�evod �et�zce na ��selnou konstantu. Jsou zde deklarov�ny 2 sady konstant. Jedna sada slou�� p�i vytv��en� datov� struktury ze souboru, ve funkc�ch rNew, iNew, cNew. Druh� sada slou�� jako dekod�r p��kaz� z p��kazov�ho ��dku. Ka�d� tabulka se mus� zvl�t inicializovat. K tomu slou�� procedure InitTabVstup(var T: pTab); a procedure InitTabPar(var T: pTab);
P�evod je realizov�n funkc� function Preved(T: pTab; k: string): byte;


Unita barvy se mela starat o vsechny vystupy na obrazovku. Jsou v ni pouze procedury na zm�nu barvy, aby se v programu nemuselo vypisovat nap�.: textcolor(yellow) s procedury s parametrem string. Tyto procedury obsahuj� pouze zm�nu barvy a standartn� proceduru write/writeln


Unita infoFile obsahuje pouze informativn� text s popisem ovl�d�n�


Unita Parser - obsahuje tyto funkce:

function openFile (var f: text; name: string): boolean;
funkce na otev�en� textov�ho souboru f se jm�nem name, vrac� true pokud otev�en� prob�hlo �sp�n�

function UpString(s: string): string;
Velice vyu��van� funkce. P�evede ka�d� znak z �et�zce string na velk� p�smeno a znak op�t vr�t� do �et�zce. Nap�.: aHoj --) AHOJ

function getTag(var f:text;var name: string;var fl: byte;var n: byte;var att: Attlist;var count:string):boolean;
Vlastn� funkce na parsrov�n� XML souboru. Na�te v�dy jeden tag a vr�t� true pokud na�ten� prob�hlo v po��dku. Pou��v� dal�� funkce, ale ty pro v�sledn� �e�en� nemaj� dal�� v�znam. V prom�n�ch jsou tyto data:
name - jmeno tagu
fl - STARTTAG/ENDTAG/SINGLETAG
n - pocet atribut�
att - pole od 1 do MAXATT z�znam� 2 �et�zc�: name a value
count - text p�ed tagem


Vlastn� program obsahuje funkci Loadworld(f:text):UkRoom Kter� vytvo�� celou datovou strukturu m�stnost� / potvor / p�edm�t�. D�le procedury pro vytvo�en� hlavn� (Va��) postavy a pr�c� s n� (p�id�v�n� / ub�r�n� v�c� do / z invent��e, pou��v�n� p�edm�t�,...). D�le jsou zde procedury rVypis, iVypis, cVypis pro vypisovani vlastnosti. D�le�it� je procedura souboj. Je to kompletn� soubojov� syst�m s v�pisem pr�b�hu a n�sledn�m p�end�n�m vypadl�ch p�edm�t�. Po skon�en� hry se volaj� procedury CloseWorld, kter� uvol�uje pam�t m�stnost� / potvor / p�edm�t� a procedura freeHero, ktera uvolni dynamicky alokovane promene u hrdiny (invent��). Procedury tvo��c� cel� komunika�n� rozhran� s hr��em jsou CtiVstup(var typ, hod: string); a DoAction (t,hod: string); volan� v tomto po�ad�. Pro inicializaci cel� hry je nutn� zavolat proceduru initGame na kterou navazuje procedura menu.


Pro p��padn� dal�� ot�zky pi�te na email