Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Ktorá metóda je rýchlejšia pre testovanie možných ťahov na šachovnici?

Pri kontrole ťahov fiígúrok na šachovnici je možné možné ťahy kontrolovať dvoma spôsobmi:
1. Kontrolovať či nie je ťah mimo rozsah a potom skontrolovať reálnosť ťahu
2. Kontrolovať reálnosť ťahu s tým, že na šachovnici bude vytvorení okraj, ktorý bude dávať dojem, že sa jedná o vlastné figúrky a teda netestovať rozsah.

Obidve metódy majú svoje výhody a nevýhody:
1. Viac vypisovania v zdrojáku, ale menší nárok na pamäť (výhodné pri testovaní ťahov so šachovnicou v pamäti (aby sa nemusel vracať ťah).
2. Menej vypisovania, ale väčšie nároky na pamäť a tiež na zápis v jazyku C (v Delphi bez problémov)

Ktorá metóda zaberie menej strojového času a prečo? Podľa mňa tá prvá.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Postav to na OOP a dedicnosti. Pak kazda figurka bude vedet, kam a jestli muze tahnout. Jen provedes…
Jan Fiala 12.12.2006 11:28
Jan Fiala
Dobre, tak sa o tom rozpíšem viac. Ak napíšem toto, tak za každú figúrku budem musieť prejsť celú š…
msx. 12.12.2006 11:46
msx.
Ted jsem trochu na rozpacich... Chces zkontrolovat tah figurky nebo hledat optimalni tah pocitace ?
Jan Fiala 12.12.2006 12:01
Jan Fiala
Hľadať optimálny ťah počítača metódou Minimax, Alfa Beta a podobne, aby to zabralo čo najmenej stroj…
msx. 12.12.2006 12:04
msx.
Pak bude asi nerychlejsi, kdyz si po kazdem tahu figurky vybudujes seznam poli, na ktera muze tahnou…
Jan Fiala 12.12.2006 12:14
Jan Fiala
Dobre a teraz ohľadne jazdca (v prípade veže to nie je až tak nutné) mám dať mantinel a nekontrolova…
msx. 12.12.2006 13:01
msx.
OMG ved pise ze najrychlejsie je ak si pred testovanim tahov vytvoris nejake pole v ktorom budu mozn…
MM.. 12.12.2006 13:07
MM..
No a na toto potrebujem vedieť, ktorá metóda je rýchlejšia. Už rozumieš?
msx. 12.12.2006 15:58
msx.
Ja te nechapu. Kdyz tahnu fugirkou, tak si po dokonceni tahu vytvorim novy seznam poli, kam muze fig…
Jan Fiala 12.12.2006 17:37
Jan Fiala
Naštudovanú teóriu ťahu počítača v šachu už mám približne natoľko, že sa do toho môžem pustiť. Možno…
msx. 12.12.2006 18:30
msx.
Abys urcite veci nemusel pocitat 2 a vicekrat a abys to mohl jednoduse pouzivat, tak presne k tomu s…
Jan Fiala 12.12.2006 20:06
Jan Fiala
Ja by som ho použil, ale sa bojím, že pri použití OOP bude počítač rozmýšľať 10 sekúnd a bez neho 3…
msx. 12.12.2006 20:29
msx.
Nechapu, jaky by k tomu mel duvod. Rychlost zalezi na tom, jak kvalitne napises kod, ne jestli pouzi…
Jan Fiala 12.12.2006 20:42
Jan Fiala
To znie je zlé. O OOP uvažujem, ale z hľadiska zjednodušenia. Pohyb by som vedel jednoducho riešiť a…
msx. 12.12.2006 21:02
msx.
No, doufam, ze ten sachovy program pak uvolnis jako Freeware. Bez OOP se v tomhle moc nechytnes, pro…
MaSo 13.12.2006 04:25
MaSo
No vlastne aj OOP sa dá s týmto skombinovať. Urobím vlastne objekt figúrka a priradím im "hodnosť" a…
msx. 13.12.2006 19:30
msx.
Proc bys delal takove silenosti typu Dama potomek Strelce? Dama je jako ostatni potomek tridy Figura
Jan Fiala 13.12.2006 20:12
Jan Fiala
To bolo len tak akože. Mne sa skôr najlepšie vidí varianta, kde figúrke nastavím vlastnosť, ktorá bu…
msx. 13.12.2006 20:37
msx.
Pridani property do objektu ti neovlivni zbytek programu. Pridani property do predka = property je d…
Jan Fiala 13.12.2006 20:52
Jan Fiala
Objekt figúrky by mal danú vlastnosť. Figúrka by bol univerzálny objekt. Niečo ako TBitBtn s vlastno… poslední
msx. 13.12.2006 21:35
msx.

Postav to na OOP a dedicnosti. Pak kazda figurka bude vedet, kam a jestli muze tahnout.
Jen provedes:
if Figurka.TahniNa('B6') then ...

Bude ti jdno, jestli to bude kral nebo strelec. Figurka si osetri, jestli tam muze jit a pokud dojde k sebrani souperovy figurky, muze vyvolat nejakou udalost.

Dobre, tak sa o tom rozpíšem viac.

Ak napíšem toto, tak za každú figúrku budem musieť prejsť celú šachovnicu a teda ak na šachovnici bude povedzme 35 ťahov pre danú stranu, tak prejdem šachovnicu toľkokrát, koľko mám figúrok a dostanem 35 ťahov. Ak by som to postavil na testovaní podľa figúrok a priamo ich možné ťahy, tak prejdem vybrané miesta na šachovnici toľkokrát, koľko je figúrok. Zdanlivo je to rýchlejšie, ale pri tomto musím testovať priamo vhodné polia a niekde vyexportovať možné ťahy. To by nebol problém, akurát, že musím vedieť koľko ťahov je maximum, čiže nevýhoda. Nespomalí mi teda prebehnutie celej šachovnice toľkokrát koľko je figúrok program?

Hľadať optimálny ťah počítača metódou Minimax, Alfa Beta a podobne, aby to zabralo čo najmenej strojového času. Dokonca myslím, v tom prípade môžem na OOP kompletne zabudnúť, pretože OOP je ďalší slimáks káblovou televíziou a širokopásmovým Internetom v ulite.

Dobre a teraz ohľadne jazdca (v prípade veže to nie je až tak nutné) mám dať mantinel a nekontrolovať, či je rozmer mimo šachovnice alebo otestovať rozmer a potom, či je ťah možný? Osobne si myslím, že test s kontrolou je rýchlejší. Toto je vlastne otázka, ktorú som položil na začiatku.

OMG ved pise ze najrychlejsie je ak si pred testovanim tahov vytvoris nejake pole v ktorom budu mozne cielove policka danej figurky. Tie sa daju urobit jednoducho pre kazdu figurku (pre kazdu osobitny algoritmus).
Zavisi co presne potrebujes mat rychle.

Dilemovat ze ci urobit if(x>8) alebo if(dx==dy) je uplne nepodstatne, su casovo rovnocenne.

P.S. "mantinel" z figurok je nezmysel, kon by ti to mohol preskocit. Celkovo na to ides nejako moc divne.

P.S.2. nemusi to byt ani pole moznych tahov v RAM, staci ak to budes robit v cykle pre kazdu figurku tahy. Napr.
testuj_tahy()
{
for(x=0; x<8; x++)
for(y=0; y<8; y++)
switch(sachovnica[x,y])
{
case VEZA:
tu si v cykle vytvoris mozne tahy veze z x,y
a zavolas OhodnotTah(novex, novey)
apod.
}
}

Ja te nechapu. Kdyz tahnu fugirkou, tak si po dokonceni tahu vytvorim novy seznam poli, kam muze figurka tahnout. Zrovna tak si vytvorim novy seznam pol pro figurky, ktere svym tahem ovlivnila.
Pri vyhodnocovani projdes pole moznych tahu bez jakehokoliv testovani.

Pokud chces hledat opravdu tah za pocitac, potrebujes si nastudovat teorii her a budes muset kazde pole ohodnotit z pohledu vsech figur - to znamena nekolikere prochazeni.

Nechapu, jaky by k tomu mel duvod.
Rychlost zalezi na tom, jak kvalitne napises kod, ne jestli pouzijes nebo nepouzijes OOP.

Pokud OOP nepouzijes, budes mit program plny podminek, kde se budes rozbocovat podle druhu figurky.

Predstav si ze to udelas nejak takto:
Udelas tridu figura, nadefinujes ji vlastnosti a metody, jako mozne tahy, barva, jmeno, ...
Od ni odvodis jednotlive figurky, prepises jim metodu pro tah. Jmeno nastavis v jejim konstruktoru.

Pak si vzpomenes, ze potrebujes ke vsem figurkam pridat jejich vahu. V OOP to pridas predkovi a v constructoru nastavis.
V proceduralnim programovani to znamena upravy parametru funkci a zmeny na spouste mist.

To znie je zlé. O OOP uvažujem, ale z hľadiska zjednodušenia. Pohyb by som vedel jednoducho riešiť aj bez OOP a to tak, že každý pohyb bude mať bitovú váhu:

Bity:
0-pešiak
1-jazdec
2-strelec
3-veža
4- kráľ
5-biely
6-čierny (dá sa aj zrušiť v prípade, že nemám (a ja nedám) mantinel)
7-pre vlastnú potrebu (možno využijem, možno nie)

Dáma nie je potrebná, tá bude mať nastavené bity 2 a 3, čiže figúrky budú:
1-pešiak
2-jazdec
4-strelec
8-veža
12-dáma

Pohyb figúrok je takto nezávislý od metódy, pretože metóda ani nespozná, či má vežu alebo dámu. Akurát sa pohyb rozvetví pri dáme aj pri podmienke na strelca.

No vlastne aj OOP sa dá s týmto skombinovať. Urobím vlastne objekt figúrka a priradím im "hodnosť" a ťahy sa budú hľadať podľa hodnosti. Osobne sa mi moc nevidí robiť povedzme dámu ako potomka strelca a čo potom v vežou. Multidedičnosť v Delphi nie je?;-) Myslím, že nie, ale aj tak neviem ako by som dokázal multidedičnosť skombinovať. Okrem toho Pešiak sa môže zmeniť na dámu a tým by som musel zrušiť objekt a vytvoriť nový, takto univerzálnemu objektu zmením vlastnosť. No a poprosím konštruktívnu kritiku, ako by to bolo ešte lepšie.

To bolo len tak akože. Mne sa skôr najlepšie vidí varianta, kde figúrke nastavím vlastnosť, ktorá bude znamenať jej hodnosť. Čiže objekt figúrky a vlastnosť hodnosti. Je to jednoduchšie naprogramovateľné a pešiak sa pri dosiahnutí poslednej pozície len zmení a nemusí sa vytvárať nový objekt. Alebo tento nápad je nevhodný?

Zpět do poradny Odpovědět na původní otázku Nahoru