View Full Version : [CICLO 8] Storia 2
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
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 ;)
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 ;)
Il task 8.2.1 è mio, ma ho bisogno di al più 4 giorni, ma molto probabilmente finirò prima.
mi prenoto per l' 8.2.2 in pair :)
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 ^^
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 ;)
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.
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.
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());
}
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());
}
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 ;)
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.
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.
mi prenoto per l' 8.2.2 in pair :)
A che punto e' questo task? In attesa di 8.2.1?
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.
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.
8.2.1 completato. Potete partire con 8.2.3 e poi abbiamo finito questa Storia.
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?
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 :)
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 :\)
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 :|
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.
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
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:
;)
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
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.
Risolviamo democraticamente il problema: decido io :D
Questo task e' di Ufo in Pair.
ashg ok thebol fammi sape :p
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.
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 :|
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());
}
certo che se da questa situazione
XX
XXBC
XXBC
si passasse a questa
XXB
XXBC
XXBC
non è chiarissimo quale deve essere il comportamento
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.
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
Eh no Vifani però il gruppo di 4 celle in basso a destra deve formarsi... Formandolo non scindi niente
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.
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
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.
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?? ;)
Ehm :p non ti ho contraddetto ho solo formalizzato in poche righe :p
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
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
;)
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?
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
hmmm e questo?
(cut)
Esatto :)
hmmm e questo?
Va scritto un test anche per questo caso.
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?
per me chi fixa chi può :p
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
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 :|
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.
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 :|
lol mi sono sbattuto e i test li aveva già fatti thebol :p
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).
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.
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.
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.
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.
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.
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)
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:
a dopo pranzo :)
ottimo :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.