Delphi - jak naprogramovat hru "Hada"?
Dobrý den,
potřeboval bych někoho kdo umí s delphi a poradil by mi jak naprogramovat jednoduchou hru "Hada".
Mockrát Vám děkuji
Změna předmětu, původně: Delphi (host)
Dobrý den,
potřeboval bych někoho kdo umí s delphi a poradil by mi jak naprogramovat jednoduchou hru "Hada".
Mockrát Vám děkuji
Změna předmětu, původně: Delphi (host)
Zpět do poradny Odpovědět na původní otázku Nahoru
Našel jsem kod na hada, který je podle mě dobře řešený. Kod si ještě upravím aby mi vyhovoval a pozměním pár věcí podle sebe, ale základy řešení bych ponechal. Snažím se pochopit jak ruzne funkce a procedury byli řešeny. Co mají dělat je mi jasné, ale to jak se řešili v tom trochu plavu. Chtěl bych proto poradit. Kdyby mi tu třeba někdo ke každy funkci a proceduře napsal takovej menší popisek co se tam děje. Dám příklad
Procedure PlaceFood; \\ souradnice jidla x se nastavy na nahodnou....atd. Nechci to všechno podrobně, ale jen tak stručně. Jde mi to abych dobře pochopil algoritmus.
Je mi jasné, žeto bude asi trochu náročné na čas, ale kdyby se někdo tak ochotný tu našel a pomohl by mi stim trochu, byl bych mu moc zavázán.
Komentáře přece už v tom kódu máš.
ja vím, ale ty kontáře popisujou co ma funkce/procedura vykonat..ale ne jak je řešena..nebo jak bych to řekl ..co se v ní má vykonat.
Ty chceš komentovať každý príkaz? Čo si sa udrel do hlavy? Ty si niečo skopíroval a nemáš ani páru o tom čo tie príkazy znamenajú...
Tu nejde o logiku programu, tú pochopíš po prezretí kódu raz-dva.(V tomto je Delphi takmer neprekonateľné na rozdiel od iných jazykov. ).
Ty máš zásadný problém, že neovládaš programovanie ako také...
Upravil jsem ti prvni cast - hned je to lip citelne.
Vezmi si vzdy jednu proceduru nebo funkci a okomentuj co nejvic radku, co si myslis, ze to dela. Bud to pochopis sam, nebo to proste posli sem na konzultaci.
Vic se naucit a lide zde uvidi snahu a pomohou.
Jde o to, aby ses neco naucil. Kdyz uz jsi ten kod nepsal, aspon musis rozumet, o co tam jde. Je to jen par radku kodu.
jen abych se do toho dostal..
pfdimention : tpoint = (x:200; y:200); // playfield width and hight
pfposition : tpoint = (x:5; y:5); // playfield position on form
Pfdimention to chápu to je šírka víška hracíplochy a Pfposition je teda co ? Z toho komentaře to má být pozice hrací plochy na formulaři ?
když pozměním v kodu x a y tak se mi okraj hraci plochy zvětší/zmenší (podle změny)
jeto myšleno jako zed ??
Anglicky moc neumim, ale nejak jsem si to přeložil ..
Z překladu by to měla být pozice hrací plochy ve formuláři, asi tam je okraj.
Sirka zdi. Kdyz se podivas do kodu, tak pokud pozice hada dosahne pfposition, tak hra konci.
Chtěl bych se zeptat ohledně toho vykreslení hracího pole (DrawPlayfield)
Jestli jsem vlastně pochopil co se děje v proceduře.
var
pfdimention : tpoint = (x:200; y:200);\\ hrací plocha je jakýsi bod o výšce a šířce 200 pixelů
pfposition : tpoint = (x:5; y:5)\\ umístění na formuláři (jakási pomyslná zeď) je bod o výše a šířce 5 pixelů
pfcolor : tcolor = clWhite; \\ barva hrací plochy nastavena na bílou
procedure DrawPlayfield;
begin
Form1.Canvas.Brush.Color := pfcolor; \\ barva plátna nastavena na bílou
Form1.Canvas.Pen.Color := pfcolor; \\ barva pera natavena na bílou
Form1.Canvas.Rectangle(pfposition.x, pfposition.y, pfdimention.x + pfposition.x, pfdimention.y + pfposition.y);
end
\\ na form1 se vykreslí čtvercový bod který bude mít odsazení od formuláře Left/Top 5 pixelů a bude mít výšku/šířku nastavenou na 200 pixelů.
procedure TForm1.FormPaint(Sender: TObject);
begin
form1.ClientWidth := pfdimention.x + (pfposition.x * 2);
form1.ClientHeight := pfdimention.y + (pfposition.y * 2);
form1.Color := clBlack;
end
\\ Na výšku/šířku formuláře se nastaví naše hrací pole a barva formuláře je černá.
Takže tím pádem, ta naše pomyslná zeď dostane barvu černou protože to je ten formulář. ??
Kdyby Vám něco nesedělo nebo to chápu špatně byl bych moc rád kdyby jste mě opravili a dovysvětlily.
tpoint len uchovava dve celociselne hodnoty, nemusi to byt bod. Zmysel tych hodnot moze byt cokolvek. Trebars v tom pripade vyska a sirka nejakej plochy.
Brush neni platno ale stetec (= Brush po anglicky), t.j. farba vyplne ak kreslim nejaky vyplnitelny objekt, napr. obdlznik.
Na form1 sa nenakresli bod, ale obdlznik (= Rectangle po anglicky).
procedura FormPaint je tam pouzita dost dementne, nastavuje to len parametre objektu form1, ta procedura je ale volana systemom (kniznicou) z uplne inych dovodov. Niekde tu sirku platna autor nastavit musel, tak to robi tam lebo ine ho nenapadlo.
Vseobecne ak sa pouziva nejaky kniznicny objekt napr. ten Form.Canvas tak si nastuduj ze jake to ma parametre a co vsetko musis tomu objektu nastavit, a jake procedury ti system bude volat a kedy. Snad k tomu delphi bol pribaleny aj nejaky help, referencna prirucka, apod. Ak nemas tak google Form.Canvas reference, apod. Alebo si googli rovno slova programovani v delphi pro zacatecniky a citaj si nejaky tutorial od zaciatku. Aby si aspon chapal jak sa strukturuje Windows program a co to je riadenie eventami apod.
P.S> a nechapem preco to nutne chces v Delphi, imho mrtva platforma.
Musím to mít v delphi...
A trochu blbě si mě pochopil...
.. resp. tym ze do FormPaint (co je asi OnPaint event to musis si pozret ty v tvojom projekte) nastavuje clientwidth a height co je asi sirka a vyska okna na pevnu hodnotu, a OnPaint je volany pri kazdom prekresleni okna, by mal tym padom dosiahnut ze sa okno neda zvacsit/zmensit. Nie som si isty ptz delhi nerobim a neda sa k tomu najst poriadna referencia googlom, je to mrtve.
FormPaint je udalost, ktera se vola pri potrebe o prekresleni formulare (pohnes s nim, prekreje jej jiny formular apod.).
V teto procedure by melo probehnout veskere kresleni na Canvas formulare.
Jak psal MM, nastaveni ClientWidth a ClientHeight staci pouze jednou v OnCreate formulare. Je to oblast, na ktere muzes umistovat komponenty apod.
To same plati o nastaveni cerne barvy formulare.
V podstate to melo probehnout nasledovne:
inicializace hry - vygenerujes si pole (2 rozmerna hraci plocha) s hadem, jidlem, prekazkami, ...
V OnPaint formulare budes mit pouze vykresleni pole na plochu formulare, nic jineho - obycejne 2 cykly v sobe, ktere vykresli mrizku a hada.
Po stisku klavesy nebo v udalosti Timeru budes aktualizovat pouze pole, zadne kresleni a na konci obsluhy zavolas Form.Refresh, Form.Invalidate pripadne jinou metodu, ktera vynuti prekresleni formulare