Generování tahů – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Generování tahů – C / C++ – Fórum – Programujte.comGenerování tahů – C / C++ – Fórum – Programujte.com

 

Kuba
~ Anonymní uživatel
59 příspěvků
23. 8. 2013   #1
-
0
-

Ahoj, mohly by mi někdo poradit jak by se daly elegantně vygenerovat všechny možné skoky v dámě pro povýšené kameny? mám už skoky pro obyčejné kameny, ale u povýšených pořád tápu, zkoušel jsem to rekurzí, ale nikdy mi to nevygenerovalo všechny (třeba když v pravidlech je že dáma může doskočit libovolně daleko za soupeřovy figurku, tak mě se podařilo vygenerovat jen když dopadne hned za soupeřovu figurku).

Později vložím i kód co mě už napadlo

Díky

PS jedná se o frískou dámu

Nahlásit jako SPAM
IP: 85.207.214.–
liborb
~ Redaktor
+18
Guru
23. 8. 2013   #2
-
0
-

Asi nejjednodušší je vygenerovat si pro aktuální pozici dámy seznam všech políček, na které by teroreticky mohla skočit (tj. ve stejné sloupci, ve stejném řádku a na stejných diagonálách). Může jenom na černé, takže seznam bude o polovinu kratší :). No a pak každý tento tah otestuj, jestli je možný (není na něm kámen, nepřeskakuje se více kamenů). Tím dostaneš seznam možných tahů. Hodnocení tahů budeš mít nejspíše v rekurzivní funkci na skákání, ne?

Nahlásit jako SPAM
IP: 188.75.135.–
Kuba
~ Anonymní uživatel
59 příspěvků
23. 8. 2013   #3
-
0
-

#2 liborb
Obyčejné posouvání po desce jsem už dodělal :), ale u skákání jsem se zase zasekl, hodnocení tahů si pro každý skok ukládám do struktury tahu a pak si to sečtu, když je tah vícenásobný (aspoň to tak dělám u obyčejných figurek).

Když jsem to napsal tak aby se mi negenerovali vícenásobné tahy tak mi to funguje, ale když jsem to začal přepisovat na rekurzi tak se mi správně vygeneruje první skok, ale figurka jakoby dopadne hned za nepřítele atd. a pak se rekurze samozřejmě ukončí, ale nedaří se mi to napsat tak aby se prošlo např. až na konec diagonály.

Nahlásit jako SPAM
IP: 85.207.214.–
Kuba
~ Anonymní uživatel
59 příspěvků
23. 8. 2013   #4
-
0
-

tady je kousek kódu:

for(int k = i + 1, l = j + 1; k < 10 && l < 10; k++, l++)
	{
		if(board[k][l] == piece*player || board[k][l] == queen*player)
			break;
		if(board[k][l] == _empty && !m.overC)
			continue;
		if((board[k][l] == -(piece*player) || board[k][l] == -(queen*player)) && !m.overC)
		{
			m.overC = Coords(k, l);
			m.origOver = board[k][l];
			m.newOver = _empty;
			m.value = m.origOver;
		}
		if(board[k][l] == _empty && !(!m.overC))
		{
			m.newC = Coords(k, l);
			m.origNew = _empty;
			m.newNew = queen*player;

			jumps = moveGenerator::jumpsQueens(player, Coords(k, l), board);
			jumps.push_front(m);
			return jumps;
		}			
	}

a takhle vlastně projdu všechny směry (obdobně), problém je v tom return, budu muset nějak projít až na konec, myslíte že by pomohlo vyhodit to až za ten vnější if?

Nahlásit jako SPAM
IP: 85.207.214.–
peter
~ Anonymní uživatel
4016 příspěvků
24. 8. 2013   #5
-
0
-

Čo keby si vyskúšal to urobiť tak, že vygeneruješ všetky možné ťahy z miesta kde si a keď sa pohneš, znova sa vygenerujú všetky možné ťahy z toho jedného :) 

Nahlásit jako SPAM
IP: 178.143.196.–
peter
~ Anonymní uživatel
4016 příspěvků
24. 8. 2013   #6
-
0
-

miesta

Nahlásit jako SPAM
IP: 178.143.196.–
Kuba
~ Anonymní uživatel
59 příspěvků
24. 8. 2013   #7
-
0
-

ahoj, díky za rady, tak jsem to nakonec nějak dokázal :), ještě ale mám jednu takovou otázečku, nevíte někdo jak udětal sort na tomto:

list<list<Move> >   - seznam všech skoků, potřeboval bych to setřídit podle počtu tahů v seznamech uvnitř hlavního seznamu

Nahlásit jako SPAM
IP: 85.207.214.–
vitamin+8
Grafoman
24. 8. 2013   #8
-
0
-

#7 Kuba
Pouzi sort, std::list ho ma dokonaca ako metodu:

list<list<Move> > l;

l.sort([](const list<Move>& a, const list<Move>& b){
	return a.size() < b.size();	//alebo ina podmienka;
});
Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Kuba
~ Anonymní uživatel
59 příspěvků
24. 8. 2013   #9
-
0
-

#8 vitamin
aha, děkuji :)

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

Podobná vlákna

Generování obrázků — založil Marek Štafl

Generováni frekvence — založil Tomáš

Generování posloupnosti — založil Rail

Generovani slov — založil jesterka296

Moderátoři diskuze

 

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