|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
[Xmas Story] TDD refactoring and tasks 1.1-1.2 (cisc vs 71104 speed crushers)
Implementare il pattern Observer in modo essenziale, introducento una classe GridController che deve attendere una notifica da parte di Grid dell'avvenuta collisione, e agire di conseguenza inserendo una nuova Gem.
test list: - se grid non ha controllore, verificare che non venga aggiunta nessuna gemma dopo una collisione - aggiungere un controller a grid e controllare che l'aggiunta abbia avuto successo - verificare che dopo una collisione venga effettuta la notifica al controllore - verificare che il controllere inserisca la nuova gemma dopo una notifica primo test: Codice:
public void testNoGemUnderController()
{
grid.setGravity(12);
grid.insertGem(13,2,gem);
grid.update();
assertTrue("No Gem must be under control", grid.getGemUnderControl()==gem);
}
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker Ultima modifica di cisc : 14-12-2005 alle 17:00. |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
basta commentare la chiamata a insertNewGem(); all'interno di update e il test passa
a questo punto però la build non è rotta, è fracassata!! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
la build è fracassata perchè stiamo facendo un bel cambiamento in grid, prox test:
Codice:
public void testSetController()
{
grid.setController(new GridController());
assertTrue("Grid must be under control", grid.isControlled()) ;
}
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
per farlo passare basta aggiungere:
Codice:
public boolean isControlled()
{
return true;
}
committato. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
ok, prossimo test:
Codice:
public void testNotSetController()
{
assertFalse("Grid must be under control", grid.isControlled()) ;
}
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Codice:
public void setController(GridController controller)
{
controlled = true;
}
public boolean isControlled()
{
return controlled;
}
ma in fondo c'è da chiedersi: serve realmente che Grid memorizzi l'istanza del suo controller?? lo sapremo continuando il task ed ecco il prossimo test: Codice:
public void testControllerNotifiedAfterDrop()
{
grid.setController(controller);
grid.insertGem(13, 4, gem);
grid.update();
assertTrue(controller.notified());
}
Ultima modifica di 71104 : 14-12-2005 alle 01:21. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
minima modifica, aggiunto questo metodo a GridController:
Codice:
public boolean notified()
{
return true;
}
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
e se io ci metto questo?
Codice:
public void testControllerNotNotified()
{
grid.setController(controller);
assertFalse(controller.notified());
}
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
ho dovuto fare un po di modifiche a grid:
Codice:
private GridController controller;
public void setController(GridController controller)
{
this.controller = controller;
controlled = true;
}
//in update
.
.
//se una gemma è droppata
if (controller != null)
{
controller.notifyDrop();
}
.
.
Codice:
public class GridController
{
private boolean notified = false;
public GridController()
{
}
public boolean notified()
{
return notified;
}
public void notifyDrop()
{
notified = true;
}
}
prossimo test: Codice:
public void testControllerInsertNewGem()
{
grid.setController(controller);
grid.insertGem(13, 4, gem);
grid.update();
assertFalse("No Gem must be under control", grid.getGemUnderControl() == gem);
}
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
#10 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ok, un piccolo refactoring prima di continuare: il flag controlled e l'istanza del controller in grid costituiscono una duplicazione di informazione, percui questo codice
Codice:
public void setController(GridController controller)
{
this.controller = controller;
controlled = true;
}
public boolean isControlled()
{
return controlled;
}
Codice:
public void setController(GridController controller)
{
this.controller = controller;
}
public boolean isControlled()
{
return null != controller;
}
(tranne quelli che abbiamo rotto |
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ho fatto passare il test decommentando insertNewGem e spostandola all'interno dell'if; ora però siccome è un attimino tardino, direi caro cisc di ripristinare la build e andare a nanna ^^
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
per riprisrinare la build abbiamo adottato una soluzione temporanea che in definitiva non tiene conto delle modifiche che abbiamo effettuato fino ad adesso, a domani 71104
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Ragazzi, mi dispiace interrompervi, ma per favore fate il revert di questi cambiamenti.
Grid non deve sapere nulla dell'esistenza di un oggetto che la controlla. E' un punto importante del design che voglio mantenere. Al massimo ci deve essere un solo punto di contatto per implementare l'Observer usando un meccanismo di callback.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#14 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
ma il meccanismo di callback in Java come lo realizziamo? funzioni virtuali? Ultima modifica di 71104 : 14-12-2005 alle 10:45. |
|
|
|
|
|
|
#15 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
fatto il revert.
|
|
|
|
|
|
#16 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Mi piace pensarla come una dimostrazione di quanto funzioni avere piu' persone che lavorano su ampie porizioni di codice: io sono partito subito con l'Observer, perche' ero entrato in quell'ordine di idee, ed ho ignorato totalmente possibili soluzioni alternative. Il mio errore e' stato corretto da cionci che guardando il problema da un lato differente ha proposto una soluzione alternativa piu' semplice.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#18 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
io e cisc abbiamo steso la nuova test list:
- verificare che grid non inserisca da sola la nuova gemma - verificare che GridController.update chiami Grid.update - verificare che GridController inserisca una nuova gemma - verificare che GridController faccia tutto questo dopo un timeout - verificare che il controller catturi l'eccezione lanciata da Grid in caso di game over e disegni lo sprite "Game Over" sono solo gli acceptance test, sicuramente ce ne saranno altri. allora cisc, cominciamo? |
|
|
|
|
|
#19 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ecco la nuova classe TestGridController:
Codice:
public class TestGridController extends TestCase
{
private Grid grid;
private Gem gem;
public void setUp()
{
grid = Grid.createForTesting();
gem = Gem.createForTesting();
}
public void testGridDoesntInsertNewGems()
{
grid.insertGem(13, 4, gem);
grid.update();
assertEquals(gem, grid.getGemUnderControl());
}
}
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:33.



















