Hlidal pan Tomas Knap (fakt v pohode chlapik).
[motivacni] Zadani jednou vetou: Maximalizovat pocet mrtvych v jednom tahu damou ve hre dama.
Zadani strucne: umlatit (pruchodem do hloubky) primitivni hlavolam s velmi malym stavovym prostorem, udelat GUI pro zadani pocatecni konfigurace, vypis vysledku pomoci GUI + nejaka ta GUI bizuterie okolo (menu pro konec, restart)
Zadani podrobne (bylo zadano jako kameny a archeolog, pro snazsi vysvetleni budu pouzivat terminologii hry Dáma (Checkers), ze ktere zadani vychazi):
Hraci plocha napevno 10x10 totoznych policek.
Na policku muze byt: volno, kamen, dama
Dama je prave jedna.
Predstavte si, ze hrajete damu. Jedina Vase figurka je dama. Mate jeden jediny tah a vasim ukolem je skocit(sebrat) maximalni mozne mnozstvi figur protivnika. Jeden tah se muze sestavat z nekolika skoku (sebrani cizich figurek).
Dama se pohybuje jako dama v Dame - tedy pouze po diagonalach o libovolny pocet policek.
Skocit figurku je mozne pouze pokud je za ni volne misto.
Je tedy mozne skocit: O - figurka, D - dama, X - volno, z: XDXXXX XXXXXX XXXXXX XXXOXX XXXXXX do: XXXXXX XXXXXX XXXXXX XXXXDX neni mozne skocit: XXO XDX XXX ani dve figurky za sebou: DXXX XOXX XXOX XXXX
Taktez v situaci kdy na jedne diagonale je dama a 2 souperovy figurky [s dostatecnym mistem na skoceni te blizsi i vzdalenejsi], pak pokud chci skocit tu vzdalenejsi, musim nejprve skocit tu blizsi a pak az tu vzdalenejsi. [Coz o trochu to zeslabuje vrazednou silu damy]. Preskocenim se figurka okamzite odstranuje z hraci plochy.
Ukolem je vratit maximalni mozny pocet sebranych figurek + cestu, jakou proto musi dama absolvovat.
Jak bylo receno, mame prave jeden tah.
Tedy pro pripad:
XXXXX XOXOX XXXXX XXDXX XXXXX
nesebereme nic.
Ukolem bylo udelat GUI - reprezentujici hraci plochu, ve kterem muzeme naklikat pozice kamenu a damy.
[Bylo presne zadano, ze leve mysitko->kamen/volno, prave mystiko->dama/volno. Dale zajisteni ze dama bude prave jedna].
Tlacitko Prepocitej, ktere overilo ze herni plocha obsahuje damu a vyhodilo v message dialogu vysledek.
Horni menu umoznujici Konec a Restart.
Oblibeny testovaci vstup byl:
OXXXXXXXXX XXXXXXXXXX XXOXXXXXXX XXXXXXXXXX XXXXOXXXXX XXXXXXXXXX XXXXXXOXXX XXXXXXXXXX XXXXXXXXXX XXXXXXXXXD
Co povazuju za vhodne pouzit u teto ulohy[postrehy me a kamaradu]:
Hraci policko jako tlacitko jemuz menim Text .
100 hracich tlacitek generovat ve for cyklu, ukladat do pole, vsem nastavit stejny listener [ktery na zaklade Name tlacitka provede spravnou akci].
Pro generovani tahu nepsat nepatrne odlisny kod pro smery 1,3,7,9 [viz. numpad] ale udelat 3 for cykly:
for( int i=-1; i<=1; i+=2 ) //for i in {-1, 1}
for( int j=-1; j<=1; j+=2 ) //for j in {-1, 1}
for( x=x0 + i, y=y0 + j; 0<=x && x<VYSKA && 0<=y && y<SIRKA; x = x + i, y= y + j) { //x0,y0 je pozice damy
....}
Zaver [jez doufam poslouzi jako odstrasujici priklad]:
Prisel jsem po jednom dni pripravy. Prvni setkani se Swingem.
Naprasil 360 radek kodu, o kterem uz ted vim ze jde minimalne o 150 zkratit.
Odchazel jako posledni po prodlouzeni [30 min?]. p.Knapa jsem se ptal a 60-70% z nas nedalo.
GUI chodilo jak melo, program pri nalezeni reseni vracel spatnou strukturu a umiral... jeho posledni slova byla NullPointerException