Vesmírná arkáda – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vesmírná arkáda – Pascal – Fórum – Programujte.comVesmírná arkáda – Pascal – Fórum – Programujte.com

 

juiCZe0
Návštěvník
5. 6. 2008   #1
-
0
-

Zdravím

Před měsícem jsem dostal zadání na ROČ do konce tohoto šk.roku, na hru v pascalu. Napadla mě vesmírná arkáda (pro neznalé, takhle vypadá jedna :http://www.awem.com/star_defender/scr05.jpg ), ale bez vektorů.
Návrh vypadá takhle - dole budou 2 řádky s informacemi o zdraví,levelu, atd. S lodí se bude pohybovat šipkami, nepřátelé a případně pozadí (země, hvězdy ..) bude ubíhat směrem dolů.
Zatím bych potřeboval pomoct s problémem - chci to udělat formou "obnovování", tzn poběží tam cyklus, v každém průběhu se vykreslí loď,nepřátelé,informace,pozadí ... ale nevím jak vyřešit situaci, kdy uživatel nezmáčkne žádnou klávesu a nechá loď na místě (pozadí má běžet dál), tak aby to nečekalo na stisk. Napadla mě

 if(keypressed)then key:=readkey;

ale tam by se musela klávesa mačkat dvakrát.

budu vděčný za jakoukoliv radu

Nahlásit jako SPAM
IP: 89.176.184.–
sir_arthur
~ Redaktor
0
Stálý člen
5. 6. 2008   #2
-
0
-

zdravim, pascal asi nema nieco take ako timer ze?
neslo by to vyriesit nejakym vzdy pravdivym whilom? while true..

Nahlásit jako SPAM
IP: 82.119.117.–
@mattonik
juiCZe0
Návštěvník
5. 6. 2008   #3
-
0
-

To sir_arthur [#75953]: Nejde mi o to vyřešit nekonečný cyklus, ten je repeat until(key=#27) - tzn dokud hráč nezmáčkne ESC. Potřebuju vyřešit problém, jak spustit blok s switchem (case), pouze když bude klávesa zmáčknutá. Bohužel v pascalu žádný timer neexistuje ..
pro jednoduchost - potřebuju udělat tento algoritmus :

pokud je zmáčknutá klávesa, udělej něco. Ale nezastavuj celý cyklus, pokud zmáčknutá nebude.
pokud není, pokračuj dál v cyklu.

Nahlásit jako SPAM
IP: 89.176.184.–
Mircosoft+1
Věrný člen
5. 6. 2008   #4
-
0
-

Tak na tohle budeš potřebovat dvě věci:

1) Nahradit obsluhu klávesnice vlastní verzí, která umožní číst víc stisknutých kláves najednou, bez čekání.
2) Použít systémový časovač, aby se délka cyklu udržela na konstantní hodnotě bez ohledu na rychlost procesoru.

Řešení prvního bodu najdeš v téhle jednotce http://mircosoft.ic.cz/download/KLAVESY.PAS, řešení druhého v téhle http://mircosoft.ic.cz/download/CAS.PAS. Použij z nich, co uznáš za vhodné.

Hlavní cyklus by s použitím výše uvedených jednotek vypadal takhle:

repeat

StartCekani;
inc(pozice_pozadi);
vykresli_pozadi;
if pressed(pLSipka) then {pohyb lode doleva};
if pressed(pHSipka) then {pohyb lode nahoru};
...atd...
vykresli_lod;
pockej(doba_cyklu);
until pressed(pEsc);

Nahlásit jako SPAM
IP: 147.32.160.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Laaca0
Stálý člen
5. 6. 2008   #5
-
0
-

Práci doporučuju začít prošmejděním Mircosoftových (ten člověk, co psal předchozí přízpěvek, ne M$ z Kalifornie) stránek a postahováním jeho jednotek na práci s grafikou,klávesnicí, časovačem atd. Nic lepšího neseženež, je to česky a se spoustou komentářů.

Nahlásit jako SPAM
IP: 195.113.79.–
DOS-u-akbar
juiCZe0
Návštěvník
20. 6. 2008   #6
-
0
-

Děkuji microsoftovi, bez těch jednotek bych si nedokázal už nic moc představit :). Hru jsem chtěl udělat obsáhlejší (střely, atd) ale když jsem se dozvěděl že se neznámkuje, tak jsem ty funkce odepsal.
Můžete si ji zkusit, bohužel se po třech restartech začne podivně mazat pole s nepřáteli, ale nebudu to řešit.
[url]http://cid-4bf53c03bf97f8bb.skydrive.live.com/self.aspx/Ve%c5%99ejn%c3%a9/RO%c4%8c%20Pascal.rar
[/url]
myslím, že vyřešeno :)

Nahlásit jako SPAM
IP: 89.176.184.–
Mircosoft+1
Věrný člen
20. 6. 2008   #7
-
0
-
Nahlásit jako SPAM
IP: 85.132.158.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
juiCZe0
Návštěvník
20. 6. 2008   #8
-
0
-
Nahlásit jako SPAM
IP: 89.176.184.–
Laaca0
Stálý člen
21. 6. 2008   #9
-
0
-

Ty jo! Hodně, hodně dobrý!
A taky to máš výborně naprogramovaný a kód je elegantní a srozumitelný.
Jeden problém tam ale přece jenom je. Používáš textový režim 80x50, ale standardní DOSovské rozlišení je 80x25. Ty ale nevoláš žádnou proceduru pro nastavení 80x50. Tudíž já jsem před spuštěním tvojí hry musel napřed napsat "mode con: cols=80 lines=50"
Zkrátka, na začátek programu dej příkaz TextMode(c80+Font8x8) (je z jednotky Crt)
...a na konec TextMode(c80)

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
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, 21 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ý