Programování her v Pascalu – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Programování her v Pascalu – Pascal – Fórum – Programujte.comProgramování her v Pascalu – Pascal – Fórum – Programujte.com

 

DevOrNot
~ Anonymní uživatel
5 příspěvků
8. 5. 2007   #1
-
0
-

Nazdar lidi. Neznáte někdo ňákej tutoriál o pascalu zaměřenej na grafiku a tvorbu jednoduchýh her?

Nahlásit jako SPAM
IP: ...–
Jakub Jurových0
Stálý člen
8. 5. 2007   #2
-
0
-

No, v pascale sa nevytvára jednoduchá hra jednoducho :D. Ale nie, zase až také hrozné to nieje. Google pomáhaj!

Nahlásit jako SPAM
IP: ...–
Kto sa smeje naposledy, ten má dlhé vedenie.
Laaca
~ Anonymní uživatel
225 příspěvků
9. 5. 2007   #3
-
0
-
Nahlásit jako SPAM
IP: ...–
dalaman0
Věrný člen
9. 5. 2007   #4
-
0
-

No ja som teraz robil hru Snake v pascale a nebolo to bohvie co... Tisic riadkov a nevyzera to velmi moderne... Ale ak skrizis nejake good kniznice a free pascal tak sa da vytvorit aj nieco lepsie

Nahlásit jako SPAM
IP: ...–
Lepšie je mať psa na saláme ako salámu pod psom !!!
DevOrNot
~ Anonymní uživatel
5 příspěvků
9. 5. 2007   #5
-
0
-

Díky, omrknu to

Nahlásit jako SPAM
IP: ...–
9. 5. 2007   #6
-
0
-

A Freepascal umí fullscreenovou grafiku? Já si teď hraju s BGI a s tim si FPC nějak neví rady.

Ale mám jinej dotaz, snad to tu neni OT když se to taky týká hry v Pascalu. Momentálně má hra několik módů a ovládá se to přes boolean proměnné a pak je jeden velkej repeat cyklus a pod tím jednotlivé části, podmíněné tou boolean proměnnou (pro další rozšiřování to taky neni moc ideální). Bylo by z hlediska rychlosti lepší přepsat to pomocí procedur? Nebo udělat několik cyklů, kde by sice spousta kódu byla duplicitní, ale v každém cyklu by se provádělo jen to co chci?

Nahlásit jako SPAM
IP: ...–
DevOrNot
~ Anonymní uživatel
5 příspěvků
9. 5. 2007   #7
-
0
-

EEEEEEEEEEH, nejde to bez toho assembleru?

Nahlásit jako SPAM
IP: ...–
Laaca0
Stálý člen
10. 5. 2007   #8
-
0
-

Assembleru se bát nemusíš. Tebe přece nezajímá, jestli procedury, které voláš používají assembler nebo ne. Pro tebe je důležitá procedura "zvenčí" - to co je "pod pokličkou" tě přece zajímat nemusí. Zapomněl jsem ale napsat, že to co je přímo u Mircosofta je určeno pro reálný režim Turbo pascalu, kdežto například většina mých kódů je určena pro DOSovou verzi Freepascalu.

Nahlásit jako SPAM
IP: ...–
DOS-u-akbar
Laaca0
Stálý člen
10. 5. 2007   #9
-
0
-

Lukfi>
Šmarjá noho!
Samozřejmě to rozděl na procedury. V učebnicích programování se doporučuje, aby každá procedura (nebo hlavní blok) neměla více než 25 řádků. Podle mě je to moc striktní (mívám běžně i 50 řádkové), ale vývod je jasný - rozsekávat kód na procedury je jednoznačně správné!
(jinak se v tom hodně rychle bídně utopíš)

Nahlásit jako SPAM
IP: ...–
DOS-u-akbar
11. 5. 2007   #10
-
0
-

>Laaca: Dík. Tak jsem to rozsekal na několik cyklů a z částí, které byly stejné, udělal procedury. Ale pořád je tam některý kód duplicitní, protože tam jsou mírné rozdíly. Něco z toho bych mohl přepsat do procedur, ale zase by tam přibyly další podmínky a proměnné :(

Nahlásit jako SPAM
IP: ...–
Smokie0
Expert
11. 5. 2007   #11
-
0
-

Lukfi píše:#
# >Laaca: Dík. Tak jsem to rozsekal na několik cyklů a z částí, které byly stejné, udělal procedury. Ale pořád je tam některý kód duplicitní, protože tam jsou mírné rozdíly. Něco z toho bych mohl přepsat do procedur, ale zase by tam přibyly další podmínky a proměnné :(

Rozsekavat kod do procedur je spravne, ale zase nie za kazdu cenu :)

Nahlásit jako SPAM
IP: ...–
12. 5. 2007   #12
-
0
-

Já si myslím. Tak to rozsekám tak aby to bylo v první řadě přehledný...

Nahlásit jako SPAM
IP: ...–
Mircosoft+1
Věrný člen
15. 5. 2007   #13
-
0
-

>Lukfi: A pak se určitě pochlub výsledkem, ať máme co pařit :-).

Nahlásit jako SPAM
IP: ...–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
16. 5. 2007   #14
-
0
-

Zatím je k dispozici testovací verze označená NX12 http://sweb.cz/lukfi/nx12.pas. Poslední netestovací je nx11.pas (taky tam je) a změny jsou v ent_changelog.txt. Momentálně řeším problém s dalším levelem hry, ptal jsem se na to ve vedlejším threadu o detekci kolize. Pokud se je podaří vyřešit, bude NX14, pokud ne, tak ví Bůh...

Nahlásit jako SPAM
IP: ...–
Mircosoft+1
Věrný člen
16. 5. 2007   #15
-
0
-

Koukám koukám...

InitGraph(gM,gD,'c:\tp\bgi'); - tohle je začátečnická chyba, která u mě pravidelně způsobuje záchvaty zuřivosti :-(. Kolik lidí asi má na svém počítači adresář c:\tp\bgi a v něm náhodou ten správný soubor? Tu cestu nech proboha prázdnou a soubor EGAVGA.BGI zkopíruj do adresáře, ve kterém máš ten program!

if o then o:=false else o:=true; - tohle se většinou řeší zápisem o:=not o;

Místo goto exit by stačilo napsat halt (to je standardní procedura, která umí ukončit program z kteréhokoli místa). Navíc Exit je jméno jedné standardní procedury (ukončuje proceduru nebo funkci), který by mohl kolidovat s názvem tohoto návěští.

Místo goto main by stačilo obalit to do cyklu repeat until (nějaká ukončovací podmínka), ale jestli ti to takhle funguje, tak proč ne.

Nahlásit jako SPAM
IP: ...–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
16. 5. 2007   #16
-
0
-

Dík, zkopíruju k tomu tu knihovnu a přepíšu to přepínání a halt.
To s tím goto main by asi šlo vyřešit i repeatem, ale tak jsem to záměrně dělat nechtěl, protože menu bylo přidáno až po ovládání lodi a tam to funguje tak, že i když se žádná klávesa nezmáčkne, program se nezastaví a loď jede dál. Jsem prostě nechtěl aby to probíhalo pořád dokolečka tak jsem tam dal goto.

Nahlásit jako SPAM
IP: ...–
Laaca0
Stálý člen
16. 5. 2007   #17
-
0
-

Průlet mezi minama je super. Udělej to ale aby min bylo napřed málo a pomalu jich časem přibejvalo. Taky by Enterprise mohla sbírat nějaký moduly, který by třeba zvětšovaly dosah radaru nebo přidávaly štíty.

Ke zdrojáku:
1)



const s=70;
a=25;
m=17;

...a podobné v globální sekci VAR

Rychlá cesta k průseru. Dříve nebo později budeš v nějaké proceduře potřebovat lokální proměnné, které nazveš S,A nebo M, protože zapomeneš, še se takto už jmenuje něco jiného. Pascal to neohlídá a program se bude chovat divně, protože nebude jasné, kdy se použije která proměnná/konstanta.
Takže - pro globální proměnné a konstanty vždycky vybírej alespoň trojpísmené názvy, abys minimalizoval možnost záměny.

2)
Víc strukturuj kód - tedy víc rozsekávej na procedury. Například hlášky v menu dej do samostatných procedur, jako tahle:


Procedure Napis_Uvod;
begin
outtextXY(10,10,'E N T E R P R I S E');
outtextXY(10,28,'(c) 2007 SHAMPOO STUDIOS');
outtextXY(10,40,'v0.6 GAMMA');
outtextXY(10,65,'CHOOSE A SCENARIO');
outtextXY(10,77,'[1] FREE FLIGHT');
outtextXY(10,89,'[2] TRAINING MISSION');
outtextxy(10,101,'[3] THE MINEFIELD');
outtextxy(10,125,'[C] CREDITS');
outtextXY(10,137,'[/] EXIT GAME');
end;


3)
Podobně osamostatni všechno vykreslování.
Tohle:


if lockon then begin
setcolor(0);
ellipse(mx[target],my[target],0,60,20,20);
ellipse(mx[target],my[target],120,180,20,20);
ellipse(mx[target],my[target],240,300,20,20);
line(mx[target]-4,my[target],mx[target]+5,my[target]);
line(mx[target],my[target]-4,mx[target],my[target]+5);
end;


změn na:


Procedure Nakresli_lockon;
begin
setcolor(0);
ellipse(mx[target],my[target],0,60,20,20);
ellipse(mx[target],my[target],120,180,20,20);
ellipse(mx[target],my[target],240,300,20,20);
line(mx[target]-4,my[target],mx[target]+5,my[target]);
line(mx[target],my[target]-4,mx[target],my[target]+5);
end;



if lockon then Nakresli_lockon;

Nahlásit jako SPAM
IP: ...–
DOS-u-akbar
eMan0
Stálý člen
16. 5. 2007   #18
-
0
-

Spíš bych si položil otázku proč dělat hry pro pascal ?? vždiť dneska už je spoustu modernějších, budoucnu-výhodnějšícha jednoduších možností... Když už pascal tak objekt pascal a tedy Delphi. A v delphi je spustu dalších možností jako třeba DelphiX(Directx7 software mode), UnDelphiX, DirectX nebo treba openGL ....

Nahlásit jako SPAM
IP: ...–
Laaca0
Stálý člen
16. 5. 2007   #19
-
0
-

Spletl sis fórum chlapče. Kdo píše sem, tak v pascalu dělat chce. Jestli chceš něco sdělovat o Delphi, tak to piš tam.

Nahlásit jako SPAM
IP: ...–
DOS-u-akbar
17. 5. 2007   #20
-
0
-

Udělej to ale aby min bylo napřed málo a pomalu jich časem přibejvalo. Taky by Enterprise mohla sbírat nějaký moduly, který by třeba zvětšovaly dosah radaru nebo přidávaly štíty.


Časem zkusím implementovat nějaké powerups a zvyšování počtu těch min (i když to je další várka proměnnejch navíc :( ) btw, NX-01 nemá štíty :)

Rychlá cesta k průseru. Dříve nebo později budeš v nějaké proceduře potřebovat lokální proměnné, které nazveš S,A nebo M, protože zapomeneš, še se takto už jmenuje něco jiného.


Já vím, proto lokální proměnné pokud možno nepoužívám. Beztak si Pascal alokuje všechnu paměť, kterou *by mohl potřebovat*, už při spuštění, takže se to dá vždycky vyřešit nějakou globální proměnnou.

Víc strukturuj kód - tedy víc rozsekávej na procedury. Například hlášky v menu dej do samostatných procedur


A není to jedno, když by se ta procedura stejně volala jenom jednou v celém programu? Přehlednější by to podle mě stejně nebylo. (Jo takhle z toho udělat externí knihovnu, to by bylo jiný kafe.)
S tím lockonem, torpédem a disruptorem tam už by to možná význam mělo, ale to je pár řádků kódu a akorát by se tam zase ty procedury musely něčím volat a něco by se jim muselo předávat, což mi nepřijde úplně ideálně efektivní...

=>eMan: Já vím, no... ale holt se ve škole učíme jenom Pascal. Taky jsem zkoušel knihovnu pro Pascal pro grafiku v 640x480x16bit od Karryho, ale ta kreslí škaredý kruhy a definovat barvy v tom 16bitovým režimu, to je za trest.

Nahlásit jako SPAM
IP: ...–
19. 5. 2007   #21
-
0
-

Tak ať máte zase co kritizovat... NX14 je hotová.
http://sweb.cz/lukfi/enterprise_nx14.rar

// No a teď... co dál? Rád bych udělal overhaul na nějakou jinou grafickou knihovnu (aby to běhalo svižněji), ale vůbec nevím, co mám vybrat. Díval jsem se na Laacovy stránky a tam bylo něco o GraphiXu, ale ten zřejmě už nikde není ke stažení a navíc nefunguje s fpc2. Knihovna pro 640x480x16bit od Karryho, co od ní je tutoriál i tady, má sice českou dokumentaci a vyznám se v tom, ale kreslí ošklivé kružnice (takže bych hafo věcí musel napsat po pixelech... uf). Poradí mi někdo?

Nahlásit jako SPAM
IP: ...–
Mircosoft+1
Věrný člen
19. 5. 2007   #22
-
0
-

>eMan:

..výhodnějších a jednoduších možností... Když už pascal tak objekt pascal a tedy Delphi...


Ne že bych na Delphi viděl něco jednoduchého - to blbnutí se správným uložením projektu u sebekratšího prográmku je hrůza, navíc mi editor automaticky opravuje zdroják, kde to uzná za vhodné (na zabití), kontextová nápověda udělala od dob TP pár kroků zpátky (že by přehledně vypsala přesnou syntaxi nějaké metody plus její zařazení do struktury rodičovského objektu? Ne.), a to ani nemluvím o tom, že se pak program s jedním oknem, jedním tlačítkem a krátkou obslužnou procedurou typu "sečti dvě čísla" uloží asi do 10 souborů a exe má přes 250 kB (v TP, kde si veškerou grafiku zařizuji vlastními prostředky a Windows za mě nic nedělají, má tentýž program 30 kB).

>Lukfi:

...Beztak si Pascal alokuje všechnu paměť, kterou *by mohl potřebovat*, už při spuštění, takže se to dá vždycky vyřešit nějakou globální proměnnou...


To je sice pravda, ale tebe by spíš mělo zajímat, jestli náhodou nějaká proměnná, kterou použiješ jenom v nějaké proceduře, nezabírá zbytečně místo zbytku programu. Čili: Pascal si zabírá veškerou volnou paměť systému (pokud neurčíš jinak). Ale: když jedna procedura využije skoro všechnu tuto zabranou paměť na své lokální proměnné a po doběhnutí ji zase uvolní, může zase jiná procedura použít podobně velký kus paměti na úplně jiné lokální proměnné. Kdyby byly tyto proměnné globální, musely by se do Pascalem obsazené paměti vejít všechny současně, což, jak časem zjistíš, většinou nejde - za běžných podmínek je jí jenom 640 KB.

A ohledně procedur... nevím jak ty, ale kdybych já na všechno používal globální proměnné a žádné procedury, tak by mi stačilo program týden nevidět a pak už bych se v něm nevyznal (nebo bych musel hodně dlouho luštit).
Není to nutné. Jestli se v programu vyznáš, je to tvoje věc. Ale on se ti časem postupným přidáváním dalších a dalších doplňků nafoukne a potom začne programování připomínat logickou adventuru se spoustou propojených levelů ;-)

Nahlásit jako SPAM
IP: ...–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
19. 5. 2007   #23
-
0
-

To je sice pravda, ale tebe by spíš mělo zajímat, jestli náhodou nějaká proměnná, kterou použiješ jenom v nějaké proceduře, nezabírá zbytečně místo zbytku programu.


Já přece vím, taky se snažím používat co nejméně proměnných co nejčastěji, ale ne vždy to jde. A zrovna Enterprise nepoužívá skoro žádné počítací procedury/funkce, většina toho je vykreslování a tam se musí načítat globální proměnné.

Nahlásit jako SPAM
IP: ...–
Mircosoft+1
Věrný člen
19. 5. 2007   #24
-
0
-

Dobrá, dělej jak myslíš :-).

Jestli ti stačí 256barevná bankovaná SVGA grafika a děláš v real módu (TP), tak na to mám jednotku VESA(http://mircosoft.webpark.cz -> Unitky). Spolehlivě zvládá rozlišení 640x480, 800x600 a 1024x768. Kružnice (vlastně elipsy) kreslí hezké a k tomu umí i spoustu dalších věcí. A je komplet česky.

Nahlásit jako SPAM
IP: ...–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
19. 5. 2007   #25
-
0
-

256 barev stačí bohatě, mně šlo spíš o to, aby to bylo rychlejší (protože pod BGI se všechno musí nakreslit a pak zase smazat). Tedy vyzkouším a dám vědět, dík moc!

//btw, koukám, že máš stránky na webparku, nechceš navýšit kapacitu? Mně se na centrum mailu hromaděj ty kredity a nevím co s nima.

///Uf, to je nějaký obrovský a nevím, jestli jsem to úplně pochopil... jak to funguje? že se něco nakreslí do virt. obrazovky v XMS a pak se to celý hodí na obrazovku nebo jako v BGI že se to musí překreslovat?

Nahlásit jako SPAM
IP: ...–
20. 5. 2007   #26
-
0
-

>Mircosoft: Nemáš náhodou nějakej jednoduchej zdroják, kde by se za pomoci tý VESA knihovny kreslily nějaký základní geometrický tvary? Abych pochopil, jak se to používá.

Nahlásit jako SPAM
IP: ...–
Mircosoft+1
Věrný člen
21. 5. 2007   #27
-
0
-

ad Webpark: diky za nabidku, ale bohuzel to nejde. Postupne jsem si kapacitu navysil na 10 MB a pak zrusili pridavani po 1 MB a tim padem mi to nedovoli doplnit ty posledni 2 do 12 :-(. Na helpline jsem psal, zebral, vyhrozoval, nabizel desetinasobek ceny, ale nic nepomohlo.

ad VESA - priklad:

program pokus;

uses vesa;
BEGIN
_setmode(_640x480); {spusteni grafiky, kody podporovanych rezimu jsou vypsany nekde na zacatku}
_fill(0); {vyplni obrazovku danou barvou - ekvivalent cleardevice}
_line(100,100,300,200,10); {nakresli caru z bodu 100,100 do bodu 300,200 v barve 10}
_bar(150,160,300,300,15); {nakresli vyplneny obdelnik, levy horni roh je 150,160, pravy dolni 300,300 a barva 15}
_ellipse(400,400,40,40,12); {nakresli kruznici o polomeru 40 (=elipsu s obema polomery 40) se stredem400,400 a v barve 12}
readln;
_setmode(_textak); {vypne grafiku a vrati se do textoveho rezimu}
END.


Podtrzitka na zacatku vseho jsou proto, ze puvodne to melo byt pouzitelne soubezne s BGI, tak aby se netloukly nazvy. A pak uz jsem to nechal.
Co zacina jednim podtrzitkem (s vyjimkou textu a putimage) musis kreslit tak, aby to nevycuhovalo z obrazovky.
Co zacina dvema podtrzitky, to se bezpecne orizne podle nastaveneho okna (obdoba viewportu) a tedy to vycuhovat muze.
Rychlost je slusna - kdykoli to jde, pouziva 32bitove instrukce.

Virtualni obrazovka je resena zapisem do nevyuzite VRAM, zadna XMS neni potreba. Pouziti:
if _pujdestrankovani then {kontrola, jestli VRAM vystaci}

begin
_nastavstrankovani; {zapne rezim s virt. obrazovkou}
repeat
...neco nakresli, nebude to zatim videt...
_swap; {zobrazeni virt. obrazovky, cekani na navrat paprsku, aby obraz neblikal, je v ni zabudovano}
until prestane te to bavit;
_nastavstrankovani; {timhle se virt. obrazovka i vypina}
end;


Pozor, ze VO se musi mazat rucne, jinak v ni zustava to, co se do ni nakreslilo minule.

Jo, a jak na texty:
var f:_font;

...
_nactifont2(f,'font5x5.fnt'); {nacteni ze souboru}
_nastavfont(f,true); {timto jednotce reknu, ze odted ma psat timto fontem. Promennou f je nutne nechat!}
_print(100,100,12,'Prvni texticek.'); {vypise na souradnice 100,100 text 'Prvni texticek.' v barve 12. Zarovnani vzdy na levy horni roh.}

_nastavtext(2,3,12); {nastavi xovou a yovou velikost a roztec pisma}
_print(100,120,12,'Prvni texticek.'); {tentyz text jinak veliky}

Do textu se daji pridavat specialni ridici kody, ktere umoznuji hrat si s pismem "za letu", ale zatim se o ne starat nemusis.

Kdyby byl nejaky problem, napis (mircosoft zavinac centrum.cz), poradim.

Nahlásit jako SPAM
IP: ...–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý