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
Ahoj, poradil, znamená, něco už mám a nevím jak dál, nebo nevím jak začít, nebo napsal za mě?
:D,... jsem na tom hodně bídně, takže nevím jak začít. Nechci aby to za mě někdo napsal, chtěl bych pochopit jak se došlo k výsledku.¨
Ta hra by měla mít nějaký kritéria, jakože když had narazí do zdi nebo sam do sebe ukončí se hra. Bude se počítat skóre při sbírání jídla. A nějaký 3 obtížnosti podle rychlosti. A to, že se při každým sebrání jídla zvětší to se snad ani řešit nemusí.
Umíš anglicky? Pokud ano, na google toho spusty najdeš
Na netu jsem hledal dlouho a už na to nemam nervy. Pokaždý, když něco najdu tak je to řešení na mě až moc složitě. Potřeboval bych to opravdu jednoduše..
Nejsem si jist, zdali je programování jednoduché, pokud máš konrétní problém, rád poradím, ale jinak asi nic SEMNOU nevyřešíme.
Chápu, že není lehký. Řeknu to jinak..potřeboval bych aby to někdo řešil semnou udělal mi takovej návod a já bych se to podle toho snažil vyřešit ale i pochopit..nevím jestli mi takhle někdo pomůže
Je to časově náročné, ja teď nemám tolik času abych ti pomohl, pochybuji že se někdo hodný najde.
Přeji hodně zdaru, mrkni ještě na youtube, tam jsem něco viděl
Todle chápu, ale děkuju :) budu se to snažit nějak vyřešit.
Největší radost a nejvíc zkušeností budeš mít, když to uděláš sám.
Jak "jednoduše"? Toto nie je aplikácia typu "Hello world", tu už musíš niečo aj vedieť...
Toto nenaprogramuješ ani za pol roka...
Máš aspoň predstavu ako má hra vyzerať, čo asi budeš musieť vymyslieť/naprogramovať? Máš už nejaký "bojový plán" na papieri?
Pre Tvoju predstavu:
Veľa šťastia.
Mám představu jak by hra měla vypadat. Při spuštění programu by se mělo objevit hrací pole s hadem. Když hrat sebere jidlo tak na náhodným místě se objeví další a mělo by se počítat skóre při sebrání jídla. Když narazí do sebe nebo do stěny ukončí se hra. Nějak takhle bych sito představoval..
Základ ako má hra vyzerať už máš, teraz tá "jednoduchšia" časť...
Skús pozrieť na hada v zdrojákoch.
asi mi chvilku zabere než se v tom vyznám .. :D
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.
co se vní vykonává*
A co kdyby ses taky trochu snažil? Je to tvůj úkol.
Ved si tu procedutru najdi v zdrojakoch a citaj si ze co jak vykonava. Citat mas kod, ne komentare.
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