PDA

View Full Version : [CICLO 8] Storia 2


Jocchan
09-01-2006, 14:35
Storia 2: Quando una gemma è a contatto con altre dello stesso colore, e queste formano un quadrilatero nella griglia (quadrato o rettangolo di dimensioni qualsiasi), formeranno un agglomerato. Le gemme nell'agglomerato useranno delle png differenti a seconda che si trovino nei bordi dello stesso (4 angoli e 4 lati) o al suo interno. L'agglomerato è considerabile come un oggetto complesso, il cui valore di punteggio è pari alla somma dei singoli punteggi delle gemme componenti, moltiplicato per un bonus (il valore del bonus è unico per tutti gli agglomerati, ed è variabile da GameConfig). Le gemme presenti in un agglomerato non possono più tornare ad essere singole.
Terminata la storia, occorre eliminare l'illuminazione per le gemme uguali adiacenti.


Punti cardine da tenere a mente durante i lavori:

Mai fare a gara a chi finisce il task per primo, meglio procedere con calma, altrimenti perderemo molto più tempo in seguito
Evitiamo di complicarci la vita, esiste di certo una soluzione più semplice di quella che abbiamo pensato di implementare
MAI aggiungere elementi non richiesti esplicitamente dai task: se mai serviranno, se ne parlerà nelle prossime storie
Comunichiamo il più possibile, se qualcosa non è chiaro discutiamone tutti i dettagli fino ad eliminare ogni dubbio, anche il più insignificante
Postare sempre la test list PRIMA di mettere mano al codice

Jocchan
09-01-2006, 19:24
Linee guida per le texture degli agglomerati
I file che ho appena committato in gfx/gems/tiles hanno una struttura diversa da quella delle texture precedenti. Possiamo assimilarli ad una griglia 6x6 strutturata come in questo file di esempio:

http://lnx.rc6.it/diamonds/varie/maxi_sample.jpg

Griglia e coordinate sono ovviamente presenti solo per chiarezza.
Come potete vedere, le maxigemme usano una struttura a tile (unico metodo che ci consente di avere agglomerati di dimensioni qualsiasi), e nei file è già presente un sistema per ricavare delle animazioni (che inseriremo in un altro ciclo). Per ora, quindi, utilizzeremo soltanto la porzione di png che racchiude le caselle da A1 a C3, ignorando temporaneamente le altre.
Le caselle A1, A3, C1 e C3 andranno a rivestire gli angoli degli agglomerati. Per i lati useremo A2, B1, B3 e C2, mentre per le caselle all'interno ripeteremo B2 finchè necessario.
Buon divertimento ;)

VICIUS
10-01-2006, 22:29
Task:
8.2.1: Vifani: completato
Modificare il codice che rileva le gemme addiacenti in modo che riconosca solo gruppi di gemme che formano un rettangolo o un quadrato.

8.2.2: thebol + ??: ??
Quando un gruppo rettangolare o quadrato di gemme viene riconosciuto al posto delle gemme dev'essere disegnata una gemma grande usando i tile dell'immagine di Jocchan.

8.2.3: jappilas + fek: completato
Modificare bagofgem in modo che il punteggio delle gemme che fanno parte di un gruppo sia moltiplicato per un Bonus. Il valore del bonus deve essere modificabile da GameConfig.xml

8.2.4: Vifani: completato
Eliminare il codice e i test che illuminano le gemme addiacenti.

ciao ;)

Vifani
10-01-2006, 22:47
Il task 8.2.1 è mio, ma ho bisogno di al più 4 giorni, ma molto probabilmente finirò prima.

thebol
11-01-2006, 07:15
mi prenoto per l' 8.2.2 in pair :)

71104
11-01-2006, 11:15
aaaaaargh, il primo lo volevo io!! :cry: :cry:
vabbè, vorrà dire che farò il secondo
alla fine mi chiameranno the pair man :D

thebol, quando? :)
considera che io devo anche fare un task della storia precedente, ma non ho ben capito quand'è che va bene per Bonfo... io cmq ci sono praticamente tutte le sere, altrimenti vi avviso.

PS: vicius, considera che questa è la storia che mi piace di più, quella che apettavo praticamente dall'inizio del gioco :D
quindi se per voi sto facendo troppi task piuttosto che rinunciare a questo preferisco rinunciare a quello della Storia 1 ^^

thebol
11-01-2006, 17:53
per me vanno bene tutte le sere tranne venerdi.
sabato e domenica pero sono in forse.



cmq ho paura che sara dura farlo in una sera sola sto task

jappilas
11-01-2006, 18:02
sto studiando l' 8.2.3 ;)

Vifani
16-01-2006, 00:00
Ragazzi ho bisogno di un paio di giorni in più per realizzare il mio task. Purtroppo risulta essere più dura di quanto pensassi all'inizio. Comunque quasi tutti i test che mi ero prefisso sono passati. Manca solo qualcosina.

thebol
16-01-2006, 07:22
np :)

fek
16-01-2006, 11:12
8.2.3 completato

Vifani
16-01-2006, 11:31
8.2.4 lo farò io. E' incluso nel mio task perché con il nuovo rilevamento delle gemme addiacenti, i test vecchi falliscono sempre per ovvie ragioni.

Vifani
16-01-2006, 23:15
I test che ho identificato relativi al task 8.2.1 sono i seguenti:

public void testQuadDropAndBrighten()
{
grid.insertGem(13, 3, gem3);
grid.update(timer, gem3);

grid.insertGem(13, 4, gem4);
grid.update(timer, gem4);

grid.insertGem(12, 3, gem5);
grid.update(timer, gem5);

grid.insertGem(12, 4, gem6);
grid.update(timer, gem6);

assertTrue(gem5.isBrighter() && gem6.isBrighter() && gem3.isBrighter() && gem4.isBrighter());
}

public void testRectDropAndBrighten()
{
grid.insertGem(13, 3, gem3);
grid.update(timer, gem3);

grid.insertGem(13, 4, gem4);
grid.update(timer, gem4);

grid.insertGem(12, 3, gem5);
grid.update(timer, gem5);

grid.insertGem(12, 4, gem6);
grid.update(timer, gem6);

grid.insertGem(11, 3, gem7);
grid.update(timer, gem7);

grid.insertGem(11, 4, gem8);
grid.update(timer, gem8);

assertTrue(gem7.isBrighter() && gem8.isBrighter() && gem5.isBrighter() && gem6.isBrighter() && gem3.isBrighter() && gem4.isBrighter());
}

public void testRectDropAndDontBrighten()
{
grid.insertGem(13, 3, gem3);
grid.update(timer, gem3);

grid.insertGem(13, 4, gem4);
grid.update(timer, gem4);

grid.insertGem(12, 3, gem5);
grid.update(timer, gem5);

grid.insertGem(12, 4, gem6);
grid.update(timer, gem6);

grid.insertGem(11, 3, gem7);
grid.update(timer, gem7);

grid.insertGem(11, 4, gem1);
grid.update(timer, gem1);

assertFalse(gem7.isBrighter() && gem1.isBrighter() && gem5.isBrighter() && gem6.isBrighter() && gem3.isBrighter() && gem4.isBrighter());
assertTrue(gem5.isBrighter() && gem6.isBrighter() && gem3.isBrighter() && gem4.isBrighter());
}

public void testQuadDropAndDontBrighten()
{
grid.insertGem(13, 3, gem1);
grid.update(timer, gem1);

grid.insertGem(13, 4, gem5);
grid.update(timer, gem5);

grid.insertGem(12, 3, gem3);
grid.update(timer, gem3);

grid.insertGem(12, 4, gem4);
grid.update(timer, gem4);

assertFalse(gem1.isBrighter() && gem5.isBrighter() && gem3.isBrighter() && gem4.isBrighter());
}

Vifani
16-01-2006, 23:17
I seguenti sono una rivisitazione dei vecchi test. Fanno parte del task 8.2.4.


public void testDropAndDontBrightenOnRight()
{
grid.insertGem(13, 5, gem1);

grid.update(timer, gem1);

grid.insertGem(13, 4, gem2);
grid.update(timer, gem2);
assertFalse(gem2.isBrighter());
}

public void testDropAndDontBrightenOnDown()
{
grid.insertGem(13, 4, gem1);

grid.update(timer, gem1);

grid.insertGem(12, 4, gem2);
grid.update(timer, gem2);
assertFalse(gem2.isBrighter());
}

public void testDropAndDontBrightenOnLeft()
{
grid.insertGem(13, 3, gem1);

grid.update(timer, gem1);

grid.insertGem(13, 4, gem2);
grid.update(timer, gem2);
assertFalse(gem2.isBrighter());
}


public void testMultipleBrightening()
{
grid.insertGem(13, 3, gem1);
grid.update(timer, gem1);

grid.insertGem(13, 4, gem2);
grid.update(timer, gem2);

assertFalse(gem1.isBrighter() && gem2.isBrighter());
}

VICIUS
17-01-2006, 00:00
Ho dato una letta veloce hai test e mi sembrano buoni. Per rendere i test più semplici prova ad usare una funzione di appoggio simile a questa.
private static void insertAndUpdate(Gem gem, int x, int y)
{
grid.insertGem(x, y, gem);
grid.update(timer, gem);
}

ciao ;)

Vifani
17-01-2006, 00:58
Ci avevo pensato, però avevo visto che nessuno lo aveva fatto e quindi pensavo non fosse necessario. In ogni caso ho un altro problema: la complessità ciclomatica dell'algoritmo messo a punto è troppo elevata. Se faccio la commit il checkstyle fallirà sicuramente.

fek
17-01-2006, 09:18
Ci avevo pensato, però avevo visto che nessuno lo aveva fatto e quindi pensavo non fosse necessario. In ogni caso ho un altro problema: la complessità ciclomatica dell'algoritmo messo a punto è troppo elevata. Se faccio la commit il checkstyle fallirà sicuramente.

Per quanto riguarda semplificazioni come quella che ti ha suggerito Vicius, non hai bisogno di vedere che qualcuno lo abbia gia' fatto, hai piena liberta' di semplificare come e quando vuoi, ancora meglio se con soluzioni innovative.

Per quanto rigarda la complessita' ciclomatica, qualche Extract Method e vedi che piombera' a valori accettabili e aprira' la strada per altri refactoring.

fek
18-01-2006, 09:19
mi prenoto per l' 8.2.2 in pair :)

A che punto e' questo task? In attesa di 8.2.1?

Vifani
18-01-2006, 10:33
A che punto e' questo task? In attesa di 8.2.1?

Ragazzi perdonatemi per questo ritardo, ma è davvero un periodaccio tra 3DMark06, R580, riproduzione video.... questo solo per parlare di Hardware Upgrade.

Comunque l'algoritmo è a posto e funziona perfettamente: i test passano. Il tempo di ridurre le complessità ciclomatica e metto tutto su SVN. Conto di finire il tutto questa sera.

fek
18-01-2006, 10:51
Ragazzi perdonatemi per questo ritardo, ma è davvero un periodaccio tra 3DMark06, R580, riproduzione video.... questo solo per parlare di Hardware Upgrade.

Comunque l'algoritmo è a posto e funziona perfettamente: i test passano. Il tempo di ridurre le complessità ciclomatica e metto tutto su SVN. Conto di finire il tutto questa sera.

Tranquillo, e' un periodaccio per tutti :)

E nonostante questo stiamo per finire tre storie invece di due.

fek
18-01-2006, 14:08
8.2.1 completato. Potete partire con 8.2.3 e poi abbiamo finito questa Storia.

71104
18-01-2006, 14:14
Tranquillo, e' un periodaccio per tutti :) già, e a proposito, scusate se ultimamente sono parecchio assente, ma sono sotto esami; comunque una controllatina al forum ogni tanto la do lo stesso; thebol, quand'è che va bene per te fare l'8.2.2?

Ufo13
18-01-2006, 14:37
71104 se sei occupato posso offrirmi io che non ho fatto nessun task in questo ciclo :p

jappilas
18-01-2006, 14:41
8.2.1 completato. Potete partire con 8.2.3 e poi abbiamo finito questa Storia.
l' 8.2.3 l' abbiamo fatto noi due ed e' finito... :)
l' 8.2.2 e' da completare ;)

edit: noto che alberto mi aveva preceduto :)

thebol
18-01-2006, 17:44
già, e a proposito, scusate se ultimamente sono parecchio assente, ma sono sotto esami; comunque una controllatina al forum ogni tanto la do lo stesso; thebol, quand'è che va bene per te fare l'8.2.2?

sono disponibile per stasera, domani sera, e venerdi sera(venerdi anche durante il giorno, ma non per troppo che di giorno pago :\)

fek
18-01-2006, 19:26
sono disponibile per stasera, domani sera, e venerdi sera(venerdi anche durante il giorno, ma non per troppo che di giorno pago :\)

Se 71104 non e' disponibile stassera puo' subentrare Ufo che non ha avuto la possibilita' di fare task a questo giro.

Ma guarda tu se bisogna combattere a calci e sputi per avere un task :|

fek
18-01-2006, 19:27
Dimenticavo, un applauso a Raffaele che ha concluso il task sul riconoscimento dei gemmoni che fino ad oggi e' stato il task decisamente piu' complesso che abbiamo affrontato. Da qui in poi e' strada in discesa :)

Il codice del task e' bello pieno di test cosi' potere sbizzarrirvi col refactoring.

Ufo13
18-01-2006, 21:10
Dimenticavo, un applauso a Raffaele che ha concluso il task sul riconoscimento dei gemmoni che fino ad oggi e' stato il task decisamente piu' complesso che abbiamo affrontato. Da qui in poi e' strada in discesa :)

Il codice del task e' bello pieno di test cosi' potere sbizzarrirvi col refactoring.

Anche la doppia gemma non è stata facilissimissima :p

Comunque non voglio prendere il task di 71104 se non è d'accordo anche lui :p

Ufo13
18-01-2006, 21:11
vabè lo è stata dopo 2000 refactoring (e qui c'è da ringraziare anche cionci)

^TiGeRShArK^
18-01-2006, 22:38
Comunque non voglio prendere il task di 71104 se non è d'accordo anche lui :p
mai offrire il collo nudo ad un vampiro! :O

:asd:

;)

71104
18-01-2006, 22:48
MEGADOH!!! :doh: :doh: :doh:
non pensavo che a thebol andasse bene oggi... :cry:
be', a me dispiace non aver fatto nulla nell'ultimo ciclo per Diamonds, mi piace molto lavorare a questo progetto ^^
Ufo13, ti ringrazio per la lealtà :D ma anche io vorrei fare il task :Prrr: perciò facciamo così: adesso consulto il log, e a fare il task sarà la persona che ha committato meno di recente, cioè che ha contribuito a Diamonds meno recentemente :D
ci stai? :D

edit: doh, siamo entrambi oltre la prima schermata del log e non so come si fa con tortoise a visualizzare le altre :mbe:
vabbè, te lo lascio, che domani può essere che sarò impegnato ed è meglio che mi lascio 1 po' di giornata libera; in definitiva stavolta ho solo ritardato il task di un giorno :(
sorry :ave:

PERò AL PROSSIMO CICLO FACCIO DUE TASK!!! :Prrr: :D

Ufo13
18-01-2006, 22:58
Ma guarda che io non è che muoio se non faccio il task. Il fatto è che prima completiamo i task di questo ciclo e prima inizierà quello nuovo quindi se sei molto occupato mi offro (volentieri) per farlo.

fek
18-01-2006, 23:00
Risolviamo democraticamente il problema: decido io :D

Questo task e' di Ufo in Pair.

Ufo13
18-01-2006, 23:42
ashg ok thebol fammi sape :p

Vifani
19-01-2006, 01:03
Salve ragazzi. Vi spiego come funziona l'algoritmo alla base del task 8.2.3.

Essenzialmente è stata introdotta la classe GemGroups che consiste in una collezione di gemme tutte dello stesso tipo. La sua generazione avviene quando una gemma si posa sopra una configurazione di questo tipo al posto della X:

OX
OO

oppure

XO
OO

L'evoluzione del gemgroups avviene nel modo sequente. Quando una gemma si posiziona vicino ad altre gemme già facenti parte di un gruppo, questa gemma candidata viene aggiunta al gruppo e parte l'algoritmo che trova all'interno del gruppo di gemme la configurazione a quadrilatero completa massimale. Ciò avviene identificando le gemme ai quattro angoli (superiore sinistro, superiore destro, inferiore sinistro, inferiore destro), verificando che siano allineate tra loro (cerchiamo quadrati o rettangoli, non trapezi e cose simili), che formino almeno un quadrato 2x2 e che il quadrilatero da loro delimitato siano pieno di gemme appartenenti a quello stesso gruppo. Se tutte queste condizioni sono vere, le gemme all'interno di quel quadrilaterò vengono accese. Lo spazio di ricerca inizialmente è sulla totalità delle gemme appartenenti al gruppo, tuttavia se dovesse accadere che i quattro angoli non sono allineati tra loro, lo spazio di ricerca viene ridotto di una riga o di una colonna (a seconda del caso). In questo modo se esiste una sola configurazione valida nel gruppo, verrà trovata.

In questi giorni lavoro alla realizzazione di qualche test aggiuntivo per coprire tutte le righe della classe GemGroups con i test.

thebol
19-01-2006, 06:59
ce un bug(o forse è una feature :asd: decidete voi)
in configurazione
XX
XXBC
XXBC
(dove le gemme sono dello stesso tipo)
prima sono state inserite tutte le X, poi le B e poi le C.

la prova è nell'allegato.
se riesco faccio il test che mostra l'eventuale bug, ma fra poco devo andare al lavoro :|

thebol
19-01-2006, 07:13
ecco il test

public void testSixAndQuadDropAndBrighten(){
///primo blocco da 6
insertAndUpdate(gem3, 13, 3);

insertAndUpdate(gem4, 13, 4);

insertAndUpdate(gem5, 12, 3);

insertAndUpdate(gem6, 12, 4);

insertAndUpdate(gem7, 11, 3);

insertAndUpdate(gem8, 11, 4);

assertTrue(gem7.isBrighter() && gem8.isBrighter() && gem5.isBrighter() && gem6.isBrighter() && gem3.isBrighter() && gem4.isBrighter());

//secondo blocco da 4 adiacente al primo
insertAndUpdate(gem9, 13, 5);

insertAndUpdate(gem10, 13, 6);

insertAndUpdate(gem11, 12, 5);

insertAndUpdate(gem12, 12, 6);

assertTrue(gem9.isBrighter() && gem10.isBrighter() && gem11.isBrighter() && gem12.isBrighter());

}

thebol
19-01-2006, 07:27
certo che se da questa situazione
XX
XXBC
XXBC

si passasse a questa

XXB
XXBC
XXBC

non è chiarissimo quale deve essere il comportamento

Ufo13
19-01-2006, 09:28
certo che se da questa situazione
XX
XXBC
XXBC

si passasse a questa

XXB
XXBC
XXBC

non è chiarissimo quale deve essere il comportamento

Se seguiamo l'esempio di super puzzle fighter l'ultima B aggiunta non cambia niente.

Vifani
19-01-2006, 09:34
ce un bug(o forse è una feature :asd: decidete voi)
in configurazione
XX
XXBC
XXBC
(dove le gemme sono dello stesso tipo)
prima sono state inserite tutte le X, poi le B e poi le C.

la prova è nell'allegato.
se riesco faccio il test che mostra l'eventuale bug, ma fra poco devo andare al lavoro :|

Non è un bug. E' giusto che sia così. Vicius mi ha detto che un gruppo di gemme non è scindibile, quindi se si vuole fare evolvere una situazione del tipo:

XX
XX
XX

bisogna arrivare per forza a

XXX
XXX
XXX

oppure a

XX
XX
XX
XX

Ufo13
19-01-2006, 09:37
Eh no Vifani però il gruppo di 4 celle in basso a destra deve formarsi... Formandolo non scindi niente

fek
19-01-2006, 09:40
Eh no Vifani però il gruppo di 4 celle in basso a destra deve formarsi... Formandolo non scindi niente

Si', e' vero. Quel gruppo deve formarsi. Jocchan confermi?

Se arriva la conferma scrivete il test relativo?

Ho dato uno sguardo al codice ieri sera ed e' stato un ottimo lavoro, c'e' stato poco o niente da rifattorizzare. Credo ci sia ancora spazio per qualche semplificazione se a qualcuno viene una bella idea.

Bonfo
19-01-2006, 09:50
Okkei...per capire meglio faccio due esempi.
Il gruppo sarà sostituito con il disegno di un gemmone.

Ora il caso

XX
XXOO
XXOO

con X.gemType()=O.gemType() e con le 4 O inserite succesivvamente, dovrebbe risultare, come sostiene Ufo13 ed anchio :Dm come 2 gemmone: 1 formata dalle X e una dalle O.

XX
XXOOO
XXOOO

Come evoluzione della precedente quindi va a modificare il gemmone delle O estendendolo. giusto?

Ora, nel malcapitato caso:

XXAA
XXOOO
XXOOO

sempre come evoluzione del precedente e con A.gemType()=X.gemType()=O.gemType()
non cambia nulla secondo quello che dice Vifani... :mbe:

Ed infine

XXAAA
XXOOO
XXOOO

Dovrebbe comportare l'unione dei 2 Gemmoni e delle 3 gemme in un unico GEMMONE.

L'evoluzione torna o non ho capito niente?? :mc: :mc:
:muro: :muro: :muro:

Spero così di aver portato alla luce i problemi...sempre che ce ne siano :D :D

Ufo13
19-01-2006, 10:10
Le regole sono poche:

In teoria secondo SPF2 gli agglomerati possono solo essere fusi tra loro per formarne di più grossi. Non puoi prelevare gemme da un altro agglomerato per incrementarne uno.

Bonfo
19-01-2006, 10:21
In teoria secondo SPF2 gli agglomerati possono solo essere fusi tra loro per formarne di più grossi. Non puoi prelevare gemme da un altro agglomerato per incrementarne uno.

:mbe: :confused: :mbe:

...non ho capito, o meglio, o capito ma non mi sembra di aver dettoil contrario, anzi, con l'esempio volevo proprio chiedere conferma. :stordita:

Non ho capito se l'esmpio e corretto nei vari passaggi o no?? ;)

Ufo13
19-01-2006, 10:23
Ehm :p non ti ho contraddetto ho solo formalizzato in poche righe :p

Bonfo
19-01-2006, 10:34
Aaahh...ok. :flower:
Scusate se sono un po' prolisso :ave:
...ma pensavo di auitare oltre a capirci qualcosa in più.

Però dalla tua risposta ho capito di aver capito :winner: :D :D :D

Jocchan
19-01-2006, 10:57
Si', e' vero. Quel gruppo deve formarsi. Jocchan confermi?


Confermo. E' un secondo blocco 2x2 posizionato a destra del primo ;)

Prendendo come esempio quelli riportati da Bonfo, avremmo:

XX
XXOO
XXOO ---> un gemmone 3x2 ed uno 2x2 a destra

XX
XXOOO
XXOOO ---> un gemmone 3x2 ed uno 2x3 a destra

XXAA
XXOOO
XXOOO ---> idem, con due gemme singole A sopra

XXAAA
XXOOO
XXOOO ---> il tutto si fonde in un unico gemmone 3x5

;)

fek
19-01-2006, 11:32
XXAAA
XXOOO
XXOOO ---> il tutto si fonde in un unico gemmone 3x5


Non credo che questa fusione sia supportata al momento. Qualcuno puo' scrivere un test per confermarlo?

Ufo13
19-01-2006, 11:35
hmmm e questo?

2 blocchi separati:


XXX BBB
XXXTBBB
XXXTBBB


diventano 1 blocco unico:


XXXTBBB
XXXTBBB
XXXTBBB


Tipo di X = Tipo di T = Tipo di B

Jocchan
19-01-2006, 12:07
hmmm e questo?
(cut)

Esatto :)

fek
19-01-2006, 12:17
hmmm e questo?

Va scritto un test anche per questo caso.

Vifani
19-01-2006, 17:02
Va bene ragazzi. Posso aggiustare la cosa, però oggi non ho tempo da dedicargli. Se volete aiutarmi magari, mi potete già scrivere tutti i test necessari così nei prossimi due giorni aggiorno l'algoritmo e faccio passare tutto. E' ok per voi?

Ufo13
19-01-2006, 17:10
per me chi fixa chi può :p

Ufo13
19-01-2006, 17:17
Ok... Primo test:


public void testAdjacentBlockIsBrightening()
{
insertAndUpdate(gem3, 13, 3);

insertAndUpdate(gem4, 13, 4);

insertAndUpdate(gem5, 12, 3);

insertAndUpdate(gem6, 12, 4);

insertAndUpdate(gem7, 11, 3);

insertAndUpdate(gem8, 11, 4);



Gem gem9 = Gem.create(gem3.getType(), 3500);

Gem gem10 = Gem.create(gem3.getType(), 3500);

Gem gem11 = Gem.create(gem3.getType(), 3500);

Gem gem12 = Gem.create(gem3.getType(), 3500);

insertAndUpdate(gem9, 13, 5);

insertAndUpdate(gem10, 13, 6);

insertAndUpdate(gem11, 12, 5);

insertAndUpdate(gem12, 12, 6);

assertTrue("Adjacent agglomerate wasn't brightened", gem9.isBrighter() && gem10.isBrighter() && gem11.isBrighter() && gem12.isBrighter());
}


Il test fallisce... ora vedo se riesco a fixare ma non ho moltissimo tempo

thebol
19-01-2006, 20:42
Si', e' vero. Quel gruppo deve formarsi. Jocchan confermi?

Se arriva la conferma scrivete il test relativo?

Ho dato uno sguardo al codice ieri sera ed e' stato un ottimo lavoro, c'e' stato poco o niente da rifattorizzare. Credo ci sia ancora spazio per qualche semplificazione se a qualcuno viene una bella idea.

ma il mio test non sè l'è fumato nessuno :|
non ho committato perche non sapevo ancora se era bug o feature :|

fek
19-01-2006, 20:50
ma il mio test non sè l'è fumato nessuno :|
non ho committato perche non sapevo ancora se era bug o feature :|

Mettete i test per Raffaele in it.diamonds.tests.ignore cosi' non rompono la build. Lui li sceglie, li sposta nel package giusto e li implementa.

thebol
19-01-2006, 20:53
Mettete i test per Raffaele in it.diamonds.tests.ignore cosi' non rompono la build. Lui li sceglie, li sposta nel package giusto e li implementa.

tru cazzo :|

nn ci avevo pensato :|

Ufo13
19-01-2006, 21:34
lol mi sono sbattuto e i test li aveva già fatti thebol :p

thebol
20-01-2006, 10:30
ho introdotto il concetto di isCandidateGroup in Gem(default false, viene modificato da GemGroups, quando una gemma viene inserita fra i candidati passa a candidate = true e gli viene assegnato il gruppo, quando si verifica che e dentro il rettangolo del gruppo, passa a candidate = false)(tutto testato).

poi ho aggiunto una funzione sempre in Gem hasGroup che risponde true se isCandidate == false && group != null (tutto testato).

poi nella createGroupsGem di grid ho introdotto la nuova funzione hasGroup

private void createNewGroup(Gem gem, Gem neighborough1, Gem neighborough2, Gem neighborough3)
{
if (
!neighborough1.hasGroup() &&
!neighborough2.hasGroup() &&
!neighborough3.hasGroup() )
{
GemGroups group = new GemGroups(rows,columns);
group.addGem(gem);
group.addGem(neighborough1);
group.addGem(neighborough2);
group.addGem(neighborough3);
}
}

ora il bug rilevato dal test mio o di ufo non cè piu :)

manca l'unione di 2 gruppi, ma questo lo lascerei come successivo task.

ps.L'informazione isCandidate dentro a Gem forse puo portare a qualche semplificazione in groupGems(per certi versi e una duplicazione...) Insomma bisogna guardare se si puo semplificare da una delle 2 parti, magari mettendo l'info isCandidate in gemGroups associandola alle gemme(ora in un arrayList, magari si potrebbe trasformare in hashMap).

fek
20-01-2006, 10:37
ho introdotto il concetto di isCandidateGroup in Gem(default false, viene modificato da GemGroups, quando una gemma viene inserita fra i candidati passa a candidate = true e gli viene assegnato il gruppo, quando si verifica che e dentro il rettangolo del gruppo, passa a candidate = false)(tutto testato).

Ottimo lavoro. Cambia solo il nome hasGroup() in isInAGroup(), e' piu' descrittivo.

ps.L'informazione isCandidate dentro a Gem forse puo portare a qualche semplificazione in groupGems(per certi versi e una duplicazione...) Insomma bisogna guardare se si puo semplificare da una delle 2 parti, magari mettendo l'info isCandidate in gemGroups associandola alle gemme(ora in un arrayList, magari si potrebbe trasformare in hashMap).

Mi piace l'idea. Esploratela un po'. Sono convinto che riusciremo a rendere GemsGroup quasi banale.

fek
20-01-2006, 10:39
Ragazzi, ho bisogno che chiudiate 8.2.2 entro stasera, al massimo domani, cosi' diamo la domenica a Jocchan per valutare la build. E' la nostra priorita'.

Io dovrei riuscire a chiudere l'ultimo task della Storia 3 domani pomeriggio con Ufo e abbiamo finito.

thebol
20-01-2006, 10:47
Ottimo lavoro. Cambia solo il nome hasGroup() in isInAGroup(), e' piu' descrittivo.




roger.

per quanto riguarda l'8.2.2 se qualcuno è disponibile per il pair io ci sono anche oggi pome e stasera.

cmq provo intanto a guardare come fare.

thebol
20-01-2006, 10:53
altra cosa che mi sono dimenticato di dire:

ho cambiato
private void fillNeighboroughoodWithGem(Gem gem, boolean[] neighboroughWithSameType, Gem[] neighboroughs)
{
final int xoffsets[] = {+1, 0, +1, 0, +1};
final int yoffsets[] = { 0, -1, -1, +1, +1};

for (int i = 0; i < 5; ++i)
{
//andrebbero invertiti xoffsets e yoffset, non sono chiari
neighboroughWithSameType[i] = isGemOfSameType(gem, xoffsets[i], yoffsets[i]);



private void fillNeighboroughoodWithGem(Gem gem, boolean[] neighboroughWithSameType, Gem[] neighboroughs)
{
final int yoffsets[] = {+1, 0, +1, 0, +1};
final int xoffsets[] = { 0, -1, -1, +1, +1};

for (int i = 0; i < 5; ++i)
{
//andrebbero invertiti xoffsets e yoffset, non sono chiari
neighboroughWithSameType[i] = isGemOfSameType(gem, xoffsets[i], yoffsets[i]);



perchè isGemOfSameType prende (int rowOffset, int columnOffset). Alla riga va riferito il deltaY e alla colonna il deltaX(usando 2 nomi diversi si faceva un po di confusione).

il risultato non cambia, ma guardando gli x e y offset ora è piu chiaro sapere quale gemma vicina viene guardata.

fek
20-01-2006, 10:54
roger.

per quanto riguarda l'8.2.2 se qualcuno è disponibile per il pair io ci sono anche oggi pome e stasera.

cmq provo intanto a guardare come fare.

Ufo si e' prenotato per il Pair ed ha avuto un'ottima intuizione: disegnare il diamantone nella classe GemsGroup rendendola un Drawable. Mi serve che buttiate giu' una test list prima di iniziare il task.

PS. Non commentare il codice in italiano ;) Non commentarlo proprio, fai il refactoring se lo reputi necessario, non c'e' bisogno di approvazione.

thebol
20-01-2006, 11:33
Ufo si e' prenotato per il Pair ed ha avuto un'ottima intuizione: disegnare il diamantone nella classe GemsGroup rendendola un Drawable. Mi serve che buttiate giu' una test list prima di iniziare il task.

PS. Non commentare il codice in italiano ;) Non commentarlo proprio, fai il refactoring se lo reputi necessario, non c'e' bisogno di approvazione.

k

cmq il commento era un mio "Segnalibro", avevo notato la cosa e col commento l'avevo segnata(era meglio un TODO lo so ;), per poi modificarla(non ci sarebbe arrivata sul svn)

Ufo13
20-01-2006, 11:39
thebol cercami su MSN che stiliamo la test list :p


Di colpo mi trovo a dover fare 2 task belli grossi in 2 giorni :fagiano:

thebol
20-01-2006, 11:43
a dopo pranzo :)

Ufo13
20-01-2006, 11:43
a dopo pranzo :)

ottimo :)