PDA

View Full Version : [CICLO 11] Storia 1


Jocchan
20-02-2006, 18:04
Storia: Introduzione di un contatore per le Crush, che venga portato a 1 dopo una prima cancellazione, e continui ad essere incrementato di 1 ogni volta che, quando le gemme sovrastanti cadono per riempire i vuoti, si verifichino altre cancellazioni. Quando il suo valore è maggiore di 1, sulla sinistra dello schermo vengono mostrate delle png indicanti la lunghezza attuale della Crush.
Al termine della Crush, il valore in punteggio delle gemme cancellate durante la Crush stessa, prima di essere sommato al punteggio totale, deve essere moltiplicato per il valore massimo raggiunto dal contatore. Dopo questa operazione, il contatore verrà riportato a zero, e le gemme riprenderanno a cadere.



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
20-02-2006, 20:41
Task:
11.1.1: VICIUS: completato
Inserire un contatore interno a grid che dovrà essere incrementato ogni volta che il ciclo di cancellazione/spostamento delle gemme viene eseguito e trova qualcosa da cancellare. Se non vengono trovate gemme da cancellare il contatore deve essere portato a zero.

11.1.2: cionci: completato
Inserire una pausa di 200 ms tra un ciclo di cancellazione e l'altro. Il valore dell'intervallo deve essere configurabile dal file di configurazione.

11.1.3: ^TiGeRShArK^: completato
Ogni volta che il valore del contatore interno a grid appena introdotto ha un valore è maggiore di uno il suo valore deve essere visualizzato usando le png apposite (non le texture dei font del punteggio!!!) alle coordinate x=-67 y=192 per il P1 e x=611 y=192 per il P2. La texture contenente il valore deve essere nascosta ogni volta che viene creata una nuova gemspair.

11.1.4: thebol: completato
Il punteggio totale deve essere aggiornato al termine di ogni ciclo di cancellazione e caduta. Il valore delle gemme e biggems cancellate nel ciclo corrente deve essere moltiplicato per il valore del contatore prima di essere aggiunto al punteggio totale.

Jocchan
20-02-2006, 20:48
Piccola precisazione sulle png: sono già presenti in gfx/common/crush, ed ognuna corrisponde ad un "valore" del contatore. Questo fino al 9 (molto, molto, molto difficile da raggiungere per il giocatore).
Per ora, daremo ai valori superiori al 9 la png generica "over.png". In caso poi fosse necessario aggiungerne altre, provvederemo in seguito ad alzare questo limite.

VICIUS
21-02-2006, 13:13
Visto che anche in questo ciclo sembrate piuttosto timidi apro io le danze e mi piglio il primo task. 1 giorno.

ciao ;)

VICIUS
21-02-2006, 13:42
Task finito. Dai su che fine ha fatto il gruppo di lupi famelici di un tempo ?

ciao ;)

Bonfo
21-02-2006, 17:14
ARGH :muro: :muro:
Non sai quanta voglia avrei di farmi un taskettino!!!
Ma in sto periodo non ho nemmeno il tempo per piangere :cry: :cry:

Se trovo un buchettino mi lancio sul primo che rimane!!! ;)

...magari stanotte invece di dormire... :stordita: :mc:

Bonfo
21-02-2006, 19:49
Stavo pensando un attimo al task 11.1.2....

...ma basta testare che tra un crush e l'altro siano passati tot millisecondi??

SOLO QUESTO??

VICIUS
21-02-2006, 20:20
Stavo pensando un attimo al task 11.1.2....

...ma basta testare che tra un crush e l'altro siano passati tot millisecondi??

SOLO QUESTO??
Il concetto è quello. Per ora le chain sono praticamente istantanee cosi serve una piccola pausa tra un passo e l'altro.

ciao ;)

Ufo13
22-02-2006, 11:07
Stavo pensando un attimo al task 11.1.2....

...ma basta testare che tra un crush e l'altro siano passati tot millisecondi??

SOLO QUESTO??

Non farti ingannare dal "solo"... Sono sicuro che ci sono differenti casi da testare :)

dnarod
22-02-2006, 17:18
io mi butterei anche, ma non sono in grado ancora...sto studiando prog ogni giorno e nonostante cio non sono ancora nemmeno in grado di far girare correttamente eclipse con diamonds...è davvero mastodontico come programma, non ho mai cercato di "leggere" qualcosa di cosi grande e su cui ho cosi poca cultura...vi siete davvero imbarcati in un lavorone...spero di arrivarci entro breve, se non altro a capire quanto basta per fare un task :(

Jocchan
23-02-2006, 07:05
Se non ti senti ancora pronto puoi fare un task in pair con qualcuno.

^TiGeRShArK^
23-02-2006, 13:41
io faccio stasera il task 2
(anke se non ho capito se era già stato assegnato..:fagiano: )

VICIUS
23-02-2006, 13:48
io faccio stasera il task 2
(anke se non ho capito se era già stato assegnato..:fagiano: )
Vedo che le minacce di fek stanno avendo effetto :asd:
Tutto tuo.

ciao ;)

fek
23-02-2006, 13:54
Vedo che le minacce di fek stanno avendo effetto :asd:
Tutto tuo.

ciao ;)

E vedrai come si mettono a camminare quando passo anche alle minacce fisiche :boxe:

^TiGeRShArK^
23-02-2006, 13:54
Vedo che le minacce di fek stanno avendo effetto :asd:
Tutto tuo.

ciao ;)
uabbè.. l'avrei preso cmq stasera se vedevo ke continuava 'sta situazione...
e lo sai ke qdo potevo (relativamente) non ho esitato a fare due task d fila ;)

^TiGeRShArK^
23-02-2006, 13:57
E vedrai come si mettono a camminare quando passo anche alle minacce fisiche :boxe:
tanto ancora non arrivano i pugni attraverso il monitor... (o si?? :fagiano: )

fek
23-02-2006, 14:10
Si'.

cionci
23-02-2006, 18:04
Raga...io sono un po' incasinato...laurea in corso... Se domani non vado dalla bimba ne faccio uno...

^TiGeRShArK^
23-02-2006, 20:24
allora....
ora ke ho iniziato a capirci qualkosa....
1)verificare ke dopo una crush il lastTimeCrush in grid sia > 0
2)verificare che in due crush consecutive prima di 200 ms il crushconuter sia uguale ad 1
3) verificare che in due crush consevutive dopo 200 ms il crushconuter sia uguale a 2
e poi vediamo se serve ancora qualkosa...
intanto vado facendo questi :p

^TiGeRShArK^
23-02-2006, 20:38
opppss....
mi sta morendo eclipse continuamente....:eek:
non è un buon segno...
provo a vedere se riesco a risolvere con un sano reboot....:muro:

71104
23-02-2006, 20:39
il 3 è mio :Perfido:
però non lo so quanto ci metto, ho poco tempo :cry:

71104
23-02-2006, 20:40
tanto ancora non arrivano i pugni attraverso il monitor... (o si?? :fagiano: )

Si'.

:rotfl::rotfl::rotfl::rotfl::rotfl::rotfl::rotfl::rotfl:

^TiGeRShArK^
23-02-2006, 20:40
sembra essersi ripreso....fiuuuuu.....:mbe:

^TiGeRShArK^
23-02-2006, 21:41
mi sto perdendo nella logica contorta delle crushes....
ho provato a creare una situazione suggeritami da jocchan:

insertAndUpdate(createGem(EMERALD), 13, 2);
insertAndUpdate(createGem(EMERALD), 13, 3);
insertAndUpdate(createGem(EMERALD), 12, 2);
insertAndUpdate(createGem(EMERALD), 12, 3);

che crea una big gem di smeraldi sotto

insertAndUpdate(createGem(DIAMOND), 11, 2);
insertAndUpdate(createGem(DIAMOND), 11, 3);
insertAndUpdate(createGem(DIAMOND), 10, 2);
insertAndUpdate(createGem(DIAMOND), 10, 3);


che crea una big gem di diamanti sopra

insertAndUpdate(createGem(EMERALD_CHEST), 9, 3);
insertAndUpdate(createGem(DIAMOND_CHEST), 9, 2);

inserisco dapprima un baule di smeraldo sopra la big gem di diamanti e quindi un baule di diamanti a contatto con la big gem diamantata che dovrebbe scatenare la prima crush.

grid.updateBigGems();
timer.setTime(1);

creo le big gem e setto il timer ad 1

grid.updateCrushes(timer);
System.out.println("Number of crushes = " + grid.getChainCounter());
assertEquals("Wrong number of crushes occurred", 1, grid.getChainCounter());

faccio finalmente partire l'update per controllare il numero di crush....
il problema è che mentre nel caso semplice con una sola big gem di diamanti il contatore viene posto correttamente ad uno, in questo caso il contatore è posto a zero (mentre dovrebbe essere 2 dato che ancora non ho implementato il timer per l'attesa tra una cancellazione e l'altra)
come mai accade ciò???:confused:

EDIT: non è che è errata la condizione (crushedGems.size() == 0) && (crushedBigGems.size() == 0) che azzera la chain nel caso sia rispettata????

RIEDIT: tra l'altro non so è collegata con l'anomalia che avevo riscontrato prima e di cui avevo parlato con vicius per cui inserendo un thread.sleep(200) subito dopo il removeCrushedGems il gioco andava in stallo e poi tutte le cancellazioni venivano effettuate di seguito.....:mbe:

Vifani
23-02-2006, 22:57
Mi prendo carico del task numero 11.1.4 se per gli altri va bene.

^TiGeRShArK^
23-02-2006, 23:12
ho parlato con jocchan...ormai è tardi e qua non riesco a venirne a capo da solo...
posso committare quello ke ho fatto finora con un test green e lasciare gli altri due test commentati in fondo al codice di TestGemCrushing....
altro non so ke fare....:boh:

cionci
24-02-2006, 01:07
Come mai questo codice mi da 0 crash ?


public void testCrushCounterBeforeTimeIntervalElapsed()
{
insertAndUpdate(createGem(EMERALD), 13, 2);
insertAndUpdate(createGem(DIAMOND), 12, 2);
insertAndUpdate(createGem(DIAMOND_CHEST), 11, 2);
insertAndUpdate(createGem(EMERALD_CHEST), 10, 2);

insertAndStopGemsPair();

controller.update(timer);

assertEquals("Wrong number of crushes occurred before the elapsed time", 2, grid.getChainCounter());
}

Se inserisco solo un diamond e un diamond chest ritorna correttamente 1...

cionci
24-02-2006, 01:14
Ho capito perchè ci restano...le gemme rimaste devono cadere per effettuare un altro crush... Il problema è che comunque segna 0 crush !!!

Ma come simuliamo questa cosa ? Lo volevo fare dal punto di vista del controller per insrire nel controller la gestione del timer del task di Tiger...

fek
24-02-2006, 09:33
il 3 è mio :Perfido:
però non lo so quanto ci metto, ho poco tempo :cry:

Risposta sbagliata.
La risposta giusta e' "In base al tempo a disposizione, impieghero' tot".

Se in ufficio mi rispondi che non sai quanto ci metti perche' hai poco tempo, assumo un altro al posto tuo ;)

^TiGeRShArK^
24-02-2006, 12:00
Ho capito perchè ci restano...le gemme rimaste devono cadere per effettuare un altro crush... Il problema è che comunque segna 0 crush !!!

Ma come simuliamo questa cosa ? Lo volevo fare dal punto di vista del controller per insrire nel controller la gestione del timer del task di Tiger...
appunto.. .era proprio dove mi sono arenato io....
anche se le gemme non cadessero comunque la prima crush dovrebbe accadere...
andando di debug mi pare di aver capito (ma non sono sicurissimo xkè a un certo punto mi si incrociavano gli okkio in quel codice) che il counter venica incrementato due volte, ma alla fine veniva azzerato...
non ne sono nemmeno sicuro xkè a metà debug si è impallato tutto eclpise...cmq visto ke il primo incremento l'aveva fatto immagino facesse anke il secondo.....
ma ki l'ha scritto il codice delle cancellazioni ke ci può chiarire le idee???:confused:
P.S. io potrei riprendere a lavorare sui task a partire da lun sera... se magari qualcuno riesce a continuare questo cos' da non bloccare gli altri è meglio... al max ne prenderò qualke altro libero lun....

Bonfo
24-02-2006, 12:10
Io ho fatto insieme ad Ufo updateCrushes.

Il metodo non fa nient'altro che controllare le condizioni di eliminazione ed eliminare le gemme che devono essere cancellate dalla griglia, la caduta è altrove in updateFalls.

Il contatore non ho la più pallida idea di come funzioni... lo ha implementato Vicius.

fek
24-02-2006, 13:44
Io ho fatto insieme ad Ufo updateCrushes.

Il metodo non fa nient'altro che controllare le condizioni di eliminazione ed eliminare le gemme che devono essere cancellate dalla griglia, la caduta è altrove in updateFalls.

Puoi rifattorizzare quel codice per renderlo piu' chiaro?


Il contatore non ho la più pallida idea di come funzioni... lo ha implementato Vicius.

Idem come sopra.

Bonfo
24-02-2006, 15:03
I'm not at home.... :(
Solo internet

Jocchan
26-02-2006, 21:57
A che punto siamo con i task?

Vifani
26-02-2006, 23:19
A che punto siamo con i task?

Io sto attendendo gli altri altrimenti non posso implementare il task numero 4.

cionci
27-02-2006, 10:10
Secondo me c'è qualche problema nel 2... VICIUS puoi dare un'occhiata al test che ho postato io ?

fek
27-02-2006, 10:16
Io sto attendendo gli altri altrimenti non posso implementare il task numero 4.

Di quale task hai bisogno in particolare? Chi si sta occupando della dipendenza di Raffaele?

cionci
27-02-2006, 10:30
In teoria tiger, ma non ci torna quelo che ha fatto VICIUS :)

Ora sto provando ad aggirare il problema...

cionci
27-02-2006, 11:02
Devo dire che definitivamente c'è qualcosa che non va nel codice....

grid.updateCrushes();
if(grid.getCrushedGemsCounter() > 0)

Prima di updateCrushes ci sono 6 gemme in grid...dopo ce ne sono 4, ma grid.getCrushedGemsCounter() ritorna sempre 0...stessa cosa per il ChainCounter...

cionci
27-02-2006, 11:10
Perchè i chest non devono essere inclusi nel conteggio delle crushed gems ?!?!?

VICIUS
27-02-2006, 11:29
Perchè i chest non devono essere inclusi nel conteggio delle crushed gems ?!?!?
Perché è quello che richiede il task 11.2.1. I bauli non sono vere e proprie gemme quindi non devono essere contate.

ciao ;)

VICIUS
27-02-2006, 11:38
Come mai questo codice mi da 0 crash ?


public void testCrushCounterBeforeTimeIntervalElapsed()
{
insertAndUpdate(createGem(EMERALD), 13, 2);
insertAndUpdate(createGem(DIAMOND), 12, 2);
insertAndUpdate(createGem(DIAMOND_CHEST), 11, 2);
insertAndUpdate(createGem(EMERALD_CHEST), 10, 2);

insertAndStopGemsPair();

controller.update(timer);

assertEquals("Wrong number of crushes occurred before the elapsed time", 2, grid.getChainCounter());
}

Se inserisco solo un diamond e un diamond chest ritorna correttamente 1...
Ritorna zero perché il contatore viene azzerato durante l'ultima passata di updateCrushes in cui non sono trovate nuove gemme da cancellare.

ciao ;)

cionci
27-02-2006, 11:46
Aspe...sono riuscito a sistemarlo... Ora però ho un altro errore...

VICIUS
27-02-2006, 12:18
Aspe...sono riuscito a sistemarlo... Ora però ho un altro errore...
Come sistemarlo? Il comportamento che aveva era corretto. Almeno da quello che avevo capito del task.

ciao ;)

cionci
27-02-2006, 12:25
Prima questo test non passava...ora passa:

public void testCrushedGemsCounter()
{
Gem emeraldChest = createGem(EMERALD_CHEST);

insertAndUpdate(createGem(EMERALD), 13, 2);
insertAndUpdate(createGem(DIAMOND), 12, 2);
insertAndUpdate(createGem(DIAMOND_CHEST), 11, 2);
insertAndUpdate(emeraldChest, 10, 2);

insertAndStopGemsPair();
makeAllGemsFall();

controller.update(timer);
assertEquals(4, grid.getNumberOfGems());
assertEquals(1, grid.getCrushedGemsCounter());
assertEquals(1, grid.getChainCounter());

makeAllGemsFall();

timer.advance(200);
controller.update(timer);

assertEquals(2, grid.getNumberOfGems());
assertEquals(1, grid.getCrushedGemsCounter());
assertEquals(2, grid.getChainCounter());

timer.advance(200);
controller.update(timer);
}

E questo perchè all'interno di updateCrushes appena trovava una gemma per cui non c'era alcun crush azzerava i contatori...tutti ;)

cionci
27-02-2006, 12:35
Finisco dopo pranzo...

^TiGeRShArK^
27-02-2006, 13:10
In teoria tiger, ma non ci torna quelo che ha fatto VICIUS :)

Ora sto provando ad aggirare il problema...

P.S. io potrei riprendere a lavorare sui task a partire da lun sera... se magari qualcuno riesce a continuare questo cos' da non bloccare gli altri è meglio... al max ne prenderò qualke altro libero lun....

:fiufiu:
e cmq posso riprendere domani sera causa imprevisto......:muro:

cionci
27-02-2006, 13:17
Dai dai...ho finito :)
Comunque il repository è down...

cionci
27-02-2006, 14:14
Ho fatto il commit del 11.1.2...

fek
27-02-2006, 14:30
Ho fatto il commit del 11.1.2...

Ho visto. Ottimo lavoro :)

cionci
27-02-2006, 15:34
Denghiu...
Il repository però è nuovamente giù...

^TiGeRShArK^
27-02-2006, 16:30
buon lavoro, tnx
....io spero solo di riprendermi ke mi sa ke ho pure la febbre visto il mal d testa assurdo ke ho...
e stasera devo assolutamente finire un documento:muro:
mi viene da spararmi...:sob:

VICIUS
27-02-2006, 17:46
Ho fatto ripartire il server. Speriamo duri un po di più questa volta :D

ciao ;)

cionci
27-02-2006, 17:52
C'è un bug...e sicuramente l'ho introdotto io... Sembra che sia relativo al momento in cui si forma una nuova bigGem dopo un crush... Ora provo a trovare un test...

cionci
27-02-2006, 18:26
Scovato il bastardone d'un bug...

La situazione in cui la bigGem si formava male era questa:


X
C
XY
XX

C è un chest di tipo Y... La bigGem si formava prima che la gemma X si fermasse... Provate anche voi perchè è difficile da riprodurre mentre si gioca una situazione di questo tipo... Io ho trovato un test che testava una situazione simile, ma era diventato inefficace con le modifiche che ho fatto io... Cioè testava che non si verificasse una situazione che era impossibile che si verificasse... L'ho adattato e mi ha dato la barra rossa... Non vorrei che siano molti i test a soffrire dello stesso problema... Diversi ne ho già corretti...

Vifani
27-02-2006, 20:53
Di quale task hai bisogno in particolare? Chi si sta occupando della dipendenza di Raffaele?

Beh devo lavorare sul contatore. Ho bisogno che funzioni perfettamente e il task 3 non è stato ancora concluso.

cionci
28-02-2006, 08:52
Raffaele...in teoria credo che tu possa andare avanti lo stesso... Dopo tutto il task 3 riguarda solo la visualizzazione di un png...
Mentre il tuo usa i contatori prodotti nel task 1...

PS: ho introdotto il metodo resetChainCounter che potrebbe tornare utile nel tuo task e viene chiamato ogni qual volta inizia un nuovo ciclo di crush...

cionci
28-02-2006, 09:21
Mi sono accorto di un errore nel mio task... In pratica il timeStamp verifica che il timeOut sia passato fra due crush...in realtà però in questo modo si conta anche il tempo di caduta delle gemme !!! Secondo me non deve essere così...allora ho fatto questo test che ovviamente non passa:



public void testFallingTimeNotCountedInDelayBetweenCrushes()
{
insertAndUpdate(createGem(EMERALD), 13, 2);
insertAndUpdate(createGem(DIAMOND), 12, 2);
insertAndUpdate(createGem(DIAMOND_CHEST), 11, 2);
insertAndUpdate(createGem(EMERALD_CHEST), 10, 2);

insertAndStopGemsPair();
makeAllGemsFall();

controller.update(timer);
timer.advance(100);
makeAllGemsFall();

timer.advance(config.getInteger("DelayBetweenCrushes") - 100);
controller.update(timer);

assertEquals("Only first crash must be done", 4, grid.getNumberOfGems());
}

cionci
28-02-2006, 10:16
Corretta anche questa cosa...

Ho anche refactorizzato un po' il codice...

fek
28-02-2006, 10:18
Beh devo lavorare sul contatore. Ho bisogno che funzioni perfettamente e il task 3 non è stato ancora concluso.

Puoi provare a svolgere il tuo task mockando la parte del task 3 che ti serve?

fek
01-03-2006, 15:34
A che punto siamo con i task della Storia?

Vifani
01-03-2006, 21:00
A che punto siamo con i task della Storia?

Francesco, oggi mi è morta la scheda madre del PC. Ora sto dal notebook dove non ho niente del progetto, neanche Eclipse. Se c'è qualcun altro che può svolgere il mio task per accelerare i tempi è bene, altrimenti me lo dite e vedo di arrangiarmi con il notebook.

thebol
02-03-2006, 06:50
Francesco, oggi mi è morta la scheda madre del PC. Ora sto dal notebook dove non ho niente del progetto, neanche Eclipse. Se c'è qualcun altro che può svolgere il mio task per accelerare i tempi è bene, altrimenti me lo dite e vedo di arrangiarmi con il notebook.

prendo io

incomincio stasera

^TiGeRShArK^
02-03-2006, 16:39
ma il 3 è stato completato alla fine???
altrimenti lo posso prendere io stasera...
fatemi sapere! :p

Jocchan
02-03-2006, 20:58
Se non è completo, per favore, prova a finirlo tu, Tiger. Non manca molto alla fine del ciclo.

thebol
02-03-2006, 21:36
proposta shock

brasare via bagofgem

non ne vedo il senso e nn mi piace. Ora dovrei inserici dentro un array di gemme e associarlo a un fattore moltiplicativo(il numero di chain). Si farebbe molto prima con 3 contatori in grid(uno per il punteggio totale, uno per il punteggio attuale delle gem e bigGem crushate e uno per il numero di catene).

Si potrebbe fare una classe punteggio con queste logiche(per nn inquinare troppo grid).

cmq provo a procedere con bagofgems.

thebol
02-03-2006, 21:38
fra l'altro quando inserisco le gemme in bagOfgem non so quale valore moltiplicativo associargli...dovrei cmq costruire una specie di stato per bagOfGem(inserimento gemme) e poi associargli alla fine il fattore.

^TiGeRShArK^
02-03-2006, 23:09
ok task completato... o almeno credo..
i test li passa tutti ma giocando non sono riuscito a creare una combo quindi non sono sicuro del risultato al 100%...
i test che ho aggiunto sono:

public void testCrushBoxCounterWithoutCrush()
public void testCrushBoxCounterAfterTwoCrush()
public void testCrushBoxCounterPositionAfterTwoCrush()
public void testCrushBoxCounterAfterThreeCrush()
public void testCrushBoxCounterAfterNewGemsPair()

il codice che ho usato per visualizzarlo è stato semplicemente crushBox.show() e crushBox.hide() ... a occhio dovrebbe funzionare, i test passano, ma come ho detto prima non sono riuscito a verificare on the road...
se qualcuno può fare la prova e mi dice se è tutto ok è meglio...
intanto committo

EDIT: mi ero dimenticato di aggiungere la classe crushbox (perchè non era selezionato show unversioned files :muro: ) e di gestire il caso con 10 crush in cui si doveva mostrare la rexture over (perchè sono idiota :muro: )
Aggiunto relativo test e codice che lo fa passare....
Build verde, commit effettuato.
Resto in attesa per eventuali problemi di visualizzazione che non sono riuscito a riprodurre.....:fagiano:

Vifani
02-03-2006, 23:27
prendo io

incomincio stasera

Grazie.

Ufo13
03-03-2006, 00:10
proposta shock

brasare via bagofgem

non ne vedo il senso e nn mi piace. Ora dovrei inserici dentro un array di gemme e associarlo a un fattore moltiplicativo(il numero di chain). Si farebbe molto prima con 3 contatori in grid(uno per il punteggio totale, uno per il punteggio attuale delle gem e bigGem crushate e uno per il numero di catene).

Si potrebbe fare una classe punteggio con queste logiche(per nn inquinare troppo grid).

cmq provo a procedere con bagofgems.

perchè un array di Gem? A cosa serve tenere i riferimenti alle Gem? Non fai prima a tenere solo un contatore?

thebol
03-03-2006, 23:26
FINITO :)

alla fine ho brasato via bagofgem, e introdotto una nuova classe ScoreCalculator, con gli stessi metodi di bagofgem(addgem, addbigGem), solo che invece di tenersi il numero di gemme per tipo, aggiunge direttamente al punteggio il valore della gemma.

O meglio, lo aggiunge allo score temporaneo, che sara aggiunto allo score reale quando viene chiamata la closeChain(int i), per cui lo score temporaneo viene moltilicato per i e poi aggiunto allo score reale.


la closeChain l'ho inserita in gridcontroller.update nel blocco

if(waitStateBeforeNewGemsPair)
{
grid.closeChain();
handleWaitStateBeforeNewInsertion(timer);
}
cioè prima di inserire la gemspari. In questa maniera sono sicuro che le chain siano finite, ma nn so se il posto migliore, cmq funziona :).

Altra cosa, ho creato una classe abstract per i test AbstractTestInsertCrushFall che contiene alcuni metodi di utilita per inserire gemme, farle scendere, etc. Non e stata una decisione mia, ma di checkstyle, che mi segnalava del codice duplicato in 2 classi (avevo fatto copia incolla...).

Anche i getter e i setter ai field protetti sono merito suo :)

VICIUS
03-03-2006, 23:40
Ottimo lavoro thebol.
Finalmente abbiamo finito la prima storia. :D

ciao ;)

fek
06-03-2006, 09:34
Ottimo! Chiudiamo il topic e spostiamolo. Poi prendiamo un tag del codice.

Quando Jocchan ha finito di valutare la build, si passa al prossimo Ciclo 12.