Zápočet 6. 2. 2009 v 14:00, archeolog

Control at 2009-02-07 17:44:17

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

Ellrohir at 2009-02-07 20:09:01

sakra eště že se mi povedle na poslední chvíli dát hledání min...tohle bych asi nedal taky :shock:

Donarus at 2009-02-08 15:47:28

nekde jsem delal chybýu v rekurzi ... A jak to dopadlo asi vsici tusite

Ellrohir at 2009-02-09 00:06:09

tak tomu říkám slušně zabitej den :shock: pitty for u :oops: