Keypressed - had – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Keypressed - had – Pascal – Fórum – Programujte.comKeypressed - had – Pascal – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
ronin0
Duch
29. 5. 2012   #1
-
0
-

Dobrý den,

na střední škole mám prvním rokem programování v Pascalu. Jelikož mě programování zaujalo a úkoly od učitelů pro mě zatím nebyli náročné, rozhodl jsem se zkusit napsat klasickou hru had. Nedíval jsem se na žádný kód, chtěl jsem, aby řešení bylo mé, třebaže nebude nejefektivnější.

Nicméně jsem nejspíše nepochopil funkci keypressed, kterou jsem si našel na netu. Jestli správně chápu, pozná, jestli jsem zmáčkl klávesu. (laicky řečeno)  Mám tedy podmínky:

repeat begin


delay(1000);
if Keypressed  then begin
if ord(readkey)=(87 or 119)  then begin
  gotoxy(x, y-1);
  ...
 
  end;
if ord(readkey)=(83 or 115)  then begin
  ...
  end;
  end;

atd...

Problémem je, že program čeká, než bude stisknuta klávesa, přitom by podle zapsání neměl. Zkoušel jsem procedurou vyprázdnit poslední buffer, na programu se však nic nezměnilo:

procedure ClearBuffer;
  var c: Char;
  begin
  while (keypressed) do
  c := ReadKey;
  end;

Program je zatím v rané fázi, má okolo 150 řádků. Nemá však cenu pokračovat, když mi nefunguje základní mechanismus. Chtěl bych tedy pomoci s řešením načítání kláves, ne řešením celého hada.

Nahlásit jako SPAM
IP: 89.102.171.–
Reklama
Reklama
KIIV+42
God of flame
29. 5. 2012   #2
-
0
-

no pokazdy kdyz zavolas readkey, tak to nacita dalsi znak.. a u keypressed mas jistotu ze je tam aspon jeden...

budes ty pocty readkey trosku zredukovat.. napriklad nactenim do promenne a pak si to muzes testovat kolikrat chces

+ ses si opravdu jist tim  "ord(readkey)=(83 or 115)"  ?? mam takovy pocit ze  83 or 115 == 115:

0b1010011 or 0b1110011 = 0b1110011

Nahlásit jako SPAM
IP: 62.245.85.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ronin0
Duch
29. 5. 2012   #3
-
0
-

Na jednoduchou otázku, jednoduchá odpověď. Chce si to hodit do samostané proměnné.

Tím 83 or 115 jsem chtěl zamezit možnosti, že má člověk náhodou zaplý Capslock. Případně to v budoucnu přepsat na šipky.

Nahlásit jako SPAM
IP: 89.102.171.–
KIIV+42
God of flame
29. 5. 2012   #4
-
0
-

no nebude to fungovat .. velky pismena to stejne nepozna ...

Nahlásit jako SPAM
IP: 62.245.85.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Mircosoft+1
Věrný člen
30. 5. 2012   #5
-
0
-

Pozor na prioritu operátorů. Logické operátory (and, or a xor) se vyhodnocují před porovnávacími (=, <> atd.), takže je potřeba závorkovat:

klavesa:=ord(readkey);
if (klavesa=87)or(klavesa=119) then ...
if (klavesa=83)or(klavesa=115) then ...

Mimochodem, znaky se dají psát přímo, stačí použít místo čísla typ char:

klavesa:=readkey;
if (klavesa='W')or(klavesa='w') then ...
if (klavesa='S')or(klavesa='s') then ...

Držím palce ;-).

Nahlásit jako SPAM
IP: 212.118.224.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
JoDiK
~ Anonymní uživatel
981 příspěvků
30. 5. 2012   #6
-
0
-

#5 Mircosoft
V takovém případě bych doporučil rovnou:

klavesa:=upcase(readkey);
if klavesa='W' then ...
if klavesa='S' then ...

nebo ještě lépe:

klavesa:=upcase(readkey);
case klavesa of
  'W' : ...
  'S' : ...
  ....
  else ...
 end;
Nahlásit jako SPAM
IP: 88.103.236.–
ronin0
Duch
30. 5. 2012   #7
-
0
-

Díky. Povedlo se mi vytvořit prvnotní pohyb hada. Nyní přijde na řadu to, čeho jsem se od začátku obával - víceúrovnové zatačení, tedy had se bude pohybovat ve dvou a více kloubech. Nějaké nápady mám, uvidíme, jestli budou fungovat :)

Nahlásit jako SPAM
IP: 89.102.171.–
Mircosoft+1
Věrný člen
31. 5. 2012   #8
-
0
-

Než řešit klouby, spíš bych doporučil ukládat si do kruhové fronty souřadnice všech článků hada. Jedním koncem by se do ní sypaly nové polohy hlavy, z druhého by se odmazával odplazivší se ocas. Prakticky se to dá řešit buď polem nebo spojovým seznamem, ten seznam mi přijde jednodušší. Ale kecat ti do toho nebudu :-).

Nahlásit jako SPAM
IP: 212.118.224.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
ronin0
Duch
2. 6. 2012   #9
-
0
-

Právě to jsem chtěl vyzkoušet. Mít pod kontrolou všechny body hada. A musím říct, že to funguje, had se pohybuje již přesně, jak má :-). Řešil jsem to přes pole recordů (souřadnice x, y). Spojový seznam je pro mě novinka, budu se muset hold více vzdělávat. 

Ještě bych se rád zeptal, jelikož školní rok je téměř u konce, jak se vzdělávat a učit novým věcem v pascalu. Dva měsíce je dlouhá doba a nechce se mi vypustit tempo, když jsem se do toho už pomalu dostával. Ve škole jsme skončili někde u bubble sortu.

Nahlásit jako SPAM
IP: 89.102.171.–
Ondrap
~ Anonymní uživatel
8 příspěvků
3. 6. 2012   #10
-
0
-

Si zkus udělat nějakej větší projekt .. zkus udělat třeba textový editor, Databázi,

Nahlásit jako SPAM
IP: 88.102.250.–
Mircosoft+1
Věrný člen
4. 6. 2012   #11
-
0
-

#9 ronin: Na tohle se mi nejlíp osvědčilo psát hry - nemusí být moc komplikované, ale i tak tě donutí naučit se spoustu různých věcí. A zároveň se u nich pobavíš. Textový editor je dost složitá věc, tím bych radši nezačínal.

Kdybys chtěl nějaké materiály pro inspiraci, zkus třeba http://mircosoft.mzf.cz (no jo no, musím se pochlubit :-]).

Tak ať ti to nadšení vydrží ;-).

Nahlásit jako SPAM
IP: 212.118.224.–
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, 13 hostů

Moderátoři diskuze

 

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