Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Adam Ježek
Tvůrce
Avatar
Adam Ježek:18.3.2014 15:52

Zdravim,
prolejzam si různý cvičení na netu a zasek sem se u jednoho, kde máte za úkol vytvořit šachovnici, kde uživatel zadá souřadnice koně, počet tahů a program mu následně vypočte která místa může kůň ohrozit, popřípadně kolik tahů je potřeba aby z tohoto pole navštívil každé políčko šachovnice ( je-li to vůbec možné).
Problém je v tom, že už nad tím bádam tejden a nenapadlo mě jeniný rozumný řešení, jak vypočítat možný tahy. Pár nápadů bylo, ale to byla hromada proměných a výpočtů.
Takže vás prosím o nějakou nápoveďu nebo jak na to.
Předem dík

Odpovědět
18.3.2014 15:52
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Petr Domes (petrds):18.3.2014 16:12

Ahoj,jde to jednoduše :) šachovnice má nějaké souřadnice(x,y). K souřadnicím vybraného koně přičteš hodnotu o jakou se může posunout. Kůň se posouvá o 3 pole do jedné osy a o 1 do druhé, pohyb ve tvaru L jestli se nemýlím. Tohle jsou možné pohyby:

x+3, y+1 ; x+3, y-1
x-3, y+1 ; x-3, y-1
x+1, y+3 ; x-1, y+3
x+1, y-3 ; x-1, y-3

Pak je třeba kontrolovat jestli ta souřadice je ještě na šachovnici nebo tam není jiná figurka a pod...

 
Nahoru Odpovědět
18.3.2014 16:12
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Petr Domes (petrds)
Adam Ježek:18.3.2014 16:39

kůň se posouvá jenom o dvě, ne o tři(šachy sem už pár let nehrál, ale mam za to že o dva).
pokud sem tě dobře pochopil, tak jak to popisuješ ty mě napadlo, ale když koně umístíš do prostředka, tak hned po prvním tahu už máš 8 možnejch míst, kam může. z těch se dostane zase na další a jenom v druhym tahu aspoň na dvaceti. a kdyby to tahle mělo jít dokud nepokrejeme celou šachovnici, tak by to bylo na opravdu hodně řádků.
v jednom z mejch pokusů to vypadá takhle:

if (x + 2 >= 1 && x + 2 <= 8 && y + 1 >= 1 && y + 1 <= 8) // ověří zda je v rozsahu šachovnice, mam dojem že tam mam i zbytečný podmínky
           {
               x2 = x + 2; // x,y je počáteční místo koně
               y2 = y + 1; // x2, y2 jsou souřadky k překreslení
               using (Graphics g = pictureBox1.CreateGraphics())
               vykreslovani.vykreslidanepolicko(typ, x2, y2, g); // typ jenom určuje, co se na poliděje a jaká barva se má zvolit
           }

to je jenom k jednomu v možnejch polí, potom by to bylo k dalším možnejm 7, od těch 8 by se zase zkontrolovalo těch dalších 8 a tak dál.
takže pokud tim nemyslíš vytvořit nějakou metodu, která by tohle všechno dělala za mě, tak ta mě eště nenapadla

Editováno 18.3.2014 16:39
Nahoru Odpovědět
18.3.2014 16:39
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Odpovídá na Adam Ježek
Luboš Běhounek Satik:18.3.2014 17:01

to je příklad na rekurzi :)

Nahoru Odpovědět
18.3.2014 17:01
https://www.facebook.com/peasantsandcastles/
Avatar
Petr Domes (petrds):18.3.2014 17:19

Jo posouvá se o 2 pole. Na tohle by se hodila rekurze. Tvůj kod je špatně.

public void MoveFrom(int x, int y)
       {
           if (x < 0 || x > 8 || y > 8 || y < 0) return; // prostor na sachovnici
           //zde si musis ukladat a kontrolovat pozice, na kterych uz jsi byl. Bez teto podminky se tato rekurze nikdy neukončí
           MoveFrom(x + 2, y + 1);
           MoveFrom(x + 2, y - 1);
           MoveFrom(x - 2, y + 1);
           MoveFrom(x - 2, y - 1);
           MoveFrom(x + 1, y + 2);
           MoveFrom(x - 1, y + 2);
           MoveFrom(x + 1, y - 2);
           MoveFrom(x - 1, y - 2);
       }

Tohle by ti melo doufám stačit k pochopení. Co se týká ukládání pozic, něco si vymysli jak, možností je hodně :) (kolekce, pole, 2D pole,...)

Editováno 18.3.2014 17:23
 
Nahoru Odpovědět
18.3.2014 17:19
Avatar
Lako
Člen
Avatar
Odpovídá na Petr Domes (petrds)
Lako:18.3.2014 19:41

Nejsem si jistý, jestli ti to pomůže, ale tohle je zajímavé video:
http://www.wimp.com/…mathematics/

 
Nahoru Odpovědět
18.3.2014 19:41
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Petr Domes (petrds)
Adam Ježek:18.3.2014 20:06

upřímě řečeno, nemam nejmenší páru, co movefrom je.
na devbooku sem nic nenašel a google mi vyhazuje přesuny souborů. takže jestli bych moh poprosit odkaz na stránku kde si se to naučil?

Nahoru Odpovědět
18.3.2014 20:06
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Odpovídá na Adam Ježek
Petr Domes (petrds):18.3.2014 20:27

Řešení je momentálně nad Tvé schopnosti, když ani nechápeš definici metody(funkce). Vygoogli si to. Pak se mrkni jak funguje rekurze, např tady
http://www.itnetwork.cz/…java-rekurze sice v Jave ale v Csharpu to je stejne vice mene

 
Nahoru Odpovědět
18.3.2014 20:27
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Petr Domes (petrds)
Adam Ježek:19.3.2014 16:43

ted mi to taky doslo :D ja sem zvyklej si to pojmenovavat cesky a jakmile je to v angline, tak v tom hledam hned nejakou funkci :D

Nahoru Odpovědět
19.3.2014 16:43
Počkej chvíli, poradím se s křišťálovou koulí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.