|
|
|
|
Strumenti |
05-02-2008, 21:33 | #81 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7026
|
Bonfo, i metodi isStoneTransforming e isStoneTransformed in realtà agiscono solamente sulla stone, non sulla action; io li sposterei in Stone rinominandoli rispettivamente isTransforming e isTransformed.
|
05-02-2008, 21:52 | #82 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
C'ho pensato pure io, ma, non so se l'hai notato, c'e' un cast di mezzo.
Io aspetteri di vedere come risolviamo il problema del getType e isXXX. Se valutate che conviene farlo subito... ... cambialo subito, ma poi devi aggiungere i test |
05-02-2008, 22:55 | #83 |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
spianato il primo TODO: REFACTOR THIS di TestGameRestartOnGameOver
ho rinominato la classe di test in TestGameOnGameOver (visto che il metodo testava il gameOver a partire da loop). Da: Codice:
public void testPassToGameOverState() throws IOException { // TODO: REFACTOR THIS LayerManager oldLayerManager = loop.getLayerManager(); fillFourthColumn(); environment.getTimer().advance(newGemDelay); loop.doOneStep(); // verifico che il restart nn sia ancora stato fatto assertEquals(oldLayerManager, loop.getLayerManager()); assertEquals(field1, loop.getPlayFieldOne()); assertEquals(field2, loop.getPlayFieldTwo()); environment.getTimer().advance(restartGameDelay - 2); loop.doOneStep(); // verifico che il restart nn sia ancora stato fatto assertEquals(oldLayerManager, loop.getLayerManager()); assertEquals(field1, loop.getPlayFieldOne()); assertEquals(field2, loop.getPlayFieldTwo()); environment.getTimer().advance(1); loop.doOneStep(); assertNotSame("The layer must be different from the old one", oldLayerManager, loop.getLayerManager()); // TODO manca test che � stato settato il background(come si fa?) assertNotSame("field1 must be different from the old one", field1, loop.getPlayFieldOne()); assertNotSame("field2 must be different from the old one", field2, loop.getPlayFieldTwo()); } Codice:
public void testPassToGameOverOnColumnFull() throws IOException { fillFourthColumn(); environment.getTimer().advance(newGemDelay); loop.doOneStep(); assertTrue(loop.getPlayFieldOne().getGridController().isGameOver()); } public void testPassToGameOverNotRestartGame() throws IOException { fillFourthColumn(); environment.getTimer().advance(newGemDelay); loop.doOneStep(); assertEquals(layerManager, loop.getLayerManager()); assertEquals(field1, loop.getPlayFieldOne()); assertEquals(field2, loop.getPlayFieldTwo()); } public void testDelayBeforeRestart() throws IOException { fillFourthColumn(); environment.getTimer().advance(newGemDelay); loop.doOneStep(); environment.getTimer().advance(restartGameDelay - 2); loop.doOneStep(); assertEquals(layerManager, loop.getLayerManager()); assertEquals(field1, loop.getPlayFieldOne()); assertEquals(field2, loop.getPlayFieldTwo()); } public void testRestartAfterDelay() throws IOException { fillFourthColumn(); environment.getTimer().advance(newGemDelay); loop.doOneStep(); environment.getTimer().advance(restartGameDelay-1); loop.doOneStep(); assertNotSame("The layer must be different from the old one", layerManager, loop.getLayerManager()); assertNotSame("field1 must be different from the old one", field1, loop.getPlayFieldOne()); assertNotSame("field2 must be different from the old one", field2, loop.getPlayFieldTwo()); } ho anche eliminato il todo che diceva che si doveva testare l'apparizione dell'immagine del game over, ma nn si sapeva come(ho la strana sensazione di averlo scritto io..fra l'altro.... Codice:
public void testNotShowGameOverImageBeforeGameOver() throws IOException { Image gameOverImage = environment.getEngine().createImage(GameOverBox.texturePath); assertFalse(mockEngine.wasImageDrawn(gameOverImage)); } public void testShowGameOverImageOnGameOver() throws IOException { fillFourthColumn(); environment.getTimer().advance(newGemDelay); loop.doOneStep(); Image gameOverImage = environment.getEngine().createImage(GameOverBox.texturePath); assertTrue(mockEngine.wasImageDrawn(gameOverImage)); } public void testNotShowGameOverAfterRestart() throws IOException { fillFourthColumn(); environment.getTimer().advance(newGemDelay); loop.doOneStep(); environment.getTimer().advance(restartGameDelay-1); loop.doOneStep(); Image gameOverImage = environment.getEngine().createImage(GameOverBox.texturePath); assertFalse(mockEngine.wasImageDrawn(gameOverImage)); } Codice:
public void clearDisplay() { drawInfoList = new ArrayList<DrawInfo>(); numberOfQuadsDrawn = 0; } In piu ho messo public static final GameOverBox.texturePath, per avere accesso all'nome texture/immagine. C'è un altro test che usa la tecnica environment.getEngine().createImage(NOME_TEXTURE) e che hanno il nome texture hardcoded nel test(come nel mio caso il nome texture era private static). Non so quale modo sia migliore...(anche se io voto mettere i nomi texture public static final) Ultima modifica di thebol : 05-02-2008 alle 23:01. |
05-02-2008, 23:11 | #84 | |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Quote:
Mi ricordo che avevamo trovato un doppione... controlla, altrimenti signifca che cosi' va benissimo |
|
05-02-2008, 23:27 | #85 | |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
non ne sono sicuro, ma potrebbe essere questa modifica a farlo saltare fuori. ps.si lo so c'è un volontario per il test del bug...però se va bene domani mattina.. pps.mancava l'allegato Ultima modifica di thebol : 05-02-2008 alle 23:31. |
|
06-02-2008, 04:47 | #86 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Il bug penso di aver capito dov'è.
Prima con frame = 7 riusciva comunque a passare il primo if, ovvero Codice:
if(frame < 5 ) { return; } Codice:
if(frame < 5 || frame >= 7) { return; } Spostiamo la discussione di questo nel thread dei Bug Ultima modifica di Bonfo : 06-02-2008 alle 04:55. |
06-02-2008, 04:56 | #87 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Perchè AbstractDroppable non si tiene una reference al DroppableDescription invece di usarlo solo per inizzializzare i membri??
|
06-02-2008, 09:28 | #88 | |
Senior Member
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
|
Quote:
Se vedi una cosa cosi' semplice, fallo senza problemi. Ieri ho rifattorizzato 20 classi a mezzanotte, qualcosa puo' scappare.
__________________
"We in the game industry are lucky enough to be able to create our visions" |
|
06-02-2008, 22:18 | #89 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Prima:
Codice:
protected boolean canMoveButNotWithFullGravity(Grid grid) { // TODO: REFACTOR THIS float gridBottom = grid.getRowUpperBound(grid.getNumberOfRows() - 1); int numberOfRowsOverOne = region.getBottomRow() - region.getTopRow(); if (getSprite().getPosition().getY() + numberOfRowsOverOne * Cell.SIZE_IN_PIXELS + ((float)grid.getActualGravity()) / 2 > gridBottom) { return true; } if (getSprite().getPosition().getY() + ((float)grid.getActualGravity()) / 2 <= grid.getRowUpperBound(getRegion().getTopRow())) { return false; } Cell cell = new Cell(getRegion().getBottomRow() + 1, getRegion().getLeftColumn()); return grid.isDroppableAt(cell); } Codice:
protected boolean canMoveButNotWithFullGravity(Grid grid) { float nextPositionY = getSprite().getPosition().getY() + grid.getActualGravity() * 0.5f; float limit = grid.getRowUpperBound(grid.getNumberOfRows() - getRegion().getHeight()); if (nextPositionY > limit) { return true; } float currentRowLimit = grid.getRowUpperBound(getRegion().getTopRow()); if (nextPositionY <= currentRowLimit) { return false; } Cell cell = new Cell(getRegion().getBottomRow() + 1, getRegion().getLeftColumn()); return grid.isDroppableAt(cell); } - il supporto a gravita' che producano step solo <= 1 cella ( visibile nella costruzione della cella) - il fatto che si controlli solo la 1 column, probabilemnte causa del bug 6. Ultima modifica di Bonfo : 06-02-2008 alle 22:26. |
06-02-2008, 23:08 | #90 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12068
|
Quote:
cazz.. avevo in cameretta proprio quel poster... ma la scritta non me la ricordavo..
__________________
|
|
07-02-2008, 00:10 | #91 |
Member
Iscritto dal: Apr 2006
Città: Gazzaniga (BG)
Messaggi: 67
|
Comincio a lavorare sul refactoring della CrushByChestAction
EDIT: ho committato, anche se ho lasciato il REFACTOR THIS perchè c'è ancora lavoro da fare. In particolare pensavo di mettere in Droppable un metodo getAdjacentDroppable che restituisse una DroppableList con le droppable adiacenti (e un flag se sono richieste le droppable dello stesso colore, oppure un altro metodo apposito). Con un metodo simile il codice della CrushByChestAction si dimezzerebbe e saremmo più vicini alla sua eliminazione. Si può andare in questa direzione? |
07-02-2008, 08:32 | #92 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Mi sono preso la libertà di aggiungere un paio di Refactor this
Poi ho aggiunto il metodo create() a MockSingleDroppable, che vedo sostiuirsi benissimo al createGem() di GridTestCase, poi, con il refactoring che ho fatto su BigGem, anche la loro creazione dovrebbe essere molto più semplice, facendo si che si possano eliminare tutti qui metodi strani da GridTestCase... che secondo me dimagrisce un bel po'. Inoltre stavo pensando di valutare bene cosa stanno a fare li in nostri TestCase custom. Ovvero a parte il GridTestCase che fa tutto, gli altri li vedo un po' "inutili", il che vuol dire 2 cose: - o li stiamo usando male, - o non servono a un granchè. In ogni caso bisogna "omogeneizzare" i test Io un po' alla volta sto cercando di eliminare le dipendenze. Ad esempio è inutile usare GridTestCase se l'unica cosa che mi serve è un MockEngine. Ultima modifica di Bonfo : 07-02-2008 alle 08:36. |
07-02-2008, 09:51 | #93 |
Senior Member
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
|
Giusto, togli le dipendenze dai TestCase che non servono e aggiungi i Refactor This che reputi opportuni.
__________________
"We in the game industry are lucky enough to be able to create our visions" |
07-02-2008, 12:10 | #94 |
Member
Iscritto dal: Apr 2006
Città: Gazzaniga (BG)
Messaggi: 67
|
Uhmmm, ieri sera il forum è andato in palla e non mi ha più modificato il post...
Dunque: ho committato il lavoro sulla CrushByChestAction ma si può fare ancora qualcosa: pensavo di aggiungere un metodo getAdjacentDroppables ai vari Droppables (implementato magari in AbstractDroppable e in BigGem) che restituisca tutte le gemme adiacenti (ovvero con un lato in comune) di qualsiasi colore (pensavo con un flag che indichi se devono o meno essere dello stesso colore, oppure creare un altro metodo apposito). Questo semplificherebbe notevolmente la Action e ci metterebbe più vicini alla sua eliminazione. Posso procedere in quella direzione? Ultima modifica di Baol : 07-02-2008 alle 12:18. |
07-02-2008, 12:41 | #95 | |
Senior Member
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" |
|
07-02-2008, 12:43 | #96 |
Member
Iscritto dal: Apr 2006
Città: Gazzaniga (BG)
Messaggi: 67
|
Chiedo scusa, volevo dire due metodi separati
|
07-02-2008, 15:27 | #97 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7026
|
ho una domanda circa la regola 1 commit ==> 1 refactor this che se ne va: è possibile committare aggiungendo dei refactor this nel codice ma senza risolverne nessuno? oppure per committare qualunque cosa (anche l'aggiunta di nuovi refactor this) bisogna per forza risolverne almeno uno?
|
07-02-2008, 15:43 | #98 | |
Senior Member
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" |
|
07-02-2008, 16:17 | #99 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7026
|
ok.
ora sto lavorando sul refactor this in it.diamonds.grid.action.CrushByChestAction:11 |
07-02-2008, 16:18 | #100 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7026
|
ot: ho notato solo oggi l'immagine di ken shiro in prima pagina
credo che abbiamo trovato un'ispirazione per il codename della prossima release (il codename precedente era YAGNI ) |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:23.