|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
[Task 13.1.2] Ufo vs Bonfo
13.1.2:
Cambiare il codice che crea le stone in modo che il frame da mostrare durante la caduta sia dipendente dalla riga in cui è previsto che la pietra andra a collidere. Per sapere quale frame usare seguite la tabella: Riga Frame 13-12 2 11-10 3 9-7 4 6-4 5 3-0 6 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Test List:
- Per tutte le fasce dove va a cadere la Stone deve essere settato il frame corretto. - Una Stone contiene 8 frame. - I frame della Stone sono posizionati correttamente. - Il frame corrente deve poter essere settato in base al valore che deve essere visualizzato. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Partiamo col primo test...mooolto facile:
Codice:
public void testStoneNumberOfFrames()
{
int[] randomSequence = {0};
GemFactory gemFactory = GemFactory.createForTesting(new MockRandomGenerator(randomSequence));
Gem stone = gemFactory.createStone(GemType.EMERALD_STONE);
assertEquals("Stone must have 8 frames", 8, stone.getNumberOfFrames());
}
Ultima modifica di Bonfo : 22-03-2006 alle 15:40. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Green
Codice:
public Gem createStone(GemType gemType)
{
Gem newStone = Gem.createStone(gemType);
return setupGemAnimationAndSound(newStone);
}
Codice:
public static Gem createStone(GemType type)
{
Gem newStone = new Gem(type, 0);
newStone.numberOfFramesInTexture = 8;
return newStone;
}
Ultima modifica di Ufo13 : 22-03-2006 alle 15:45. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Nuovo test:
Codice:
public void testStoneIsNotAnimated()
{
int[] randomSequence = {0};
GemFactory gemFactory = GemFactory.createForTesting(new MockRandomGenerator(randomSequence));
Gem stone = gemFactory.createStone(GemType.EMERALD_STONE);
grid.insertGem(13, 2, stone);
grid.updateGemAnimations(timer);
int startingFrame = stone.getCurrentFrame();
timer.advance(config.getInteger("GemAnimationUpdateRate")+1);
grid.updateGemAnimations(timer);
assertEquals("Stone must not be animated", startingFrame, stone.getCurrentFrame());
}
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Ecco risolto.
Metodo update in Gem: Codice:
public void update(TimerInterface timer)
{
if(!this.getType().isStone())
{
long animationTime = computeAnimationTime(timer);
setCurrentFrame(findAnimationFrame(animationTime));
}
}
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Ecco il prossimo test:
Codice:
public void testStoneFrameInSecondPortion()
{
int[] randomSequence = {0};
GemFactory gemFactory = GemFactory.createForTesting(new MockRandomGenerator(randomSequence));
Gem stone = gemFactory.createStone(GemType.EMERALD_STONE);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 13, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 12, 4);
insertAndUpdate(stone, 0, 4);
assertEquals("Stone must using the second frame", 1, stone.getCurrentFrame());
}
Ultima modifica di Bonfo : 22-03-2006 alle 17:17. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
commento un secondo il tuo test...
Aggiungo il seguente test in TestGrid: Codice:
public void testColumnHeightIsZero()
{
assertEquals("Column height must be 0", 0, grid.getHeightOfColumn(0));
}
allora ti propongo questo che fallisce: Codice:
public void testColumnHeightIsOne()
{
insertAndUpdate(createGem(DIAMOND), 13, 2);
assertEquals("Column height must be 1", 1, grid.getHeightOfColumn(2));
}
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Risolto!
Aggiunto il metodo in grid. Codice:
public int getHeightOfColumn(int column)
{
int value = 0;
for(int i = grid.length - 1; i >= 0; i--)
{
Gem gem = grid[i][column];
if(gem == null)
{
continue;
}
value++;
}
return value;
}
Di nuovo a te |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Nuovo test
Codice:
public void testColumnHeightWithHoles()
{
Gem floatingGem = createGem(DIAMOND);
floatingGem.drop();
insertAndUpdate(floatingGem, 4, 2);
assertEquals("Column height must be 10", 10, grid.getHeightOfColumn(2));
}
Ultima modifica di Ufo13 : 23-03-2006 alle 11:14. |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Ecco il codice relativo a questo test.
Gl'indici mi hanno fatto un po' impazzire..ma alla fine ho vinto io Codice:
public int getHeightOfColumn(int column)
{
int i = 0;
while(i < grid.length && grid[i][column] == null)
{
i++;
}
return grid.length - i ;
}
GREEN |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
A questo punto mi permetto di fare un piccolo cambiamento nel test postato da Bonfo:
Codice:
public void testStoneFrameInSecondPortion()
{
int[] randomSequence = {0};
GemFactory gemFactory = GemFactory.createForTesting(new MockRandomGenerator(randomSequence));
Gem stone = gemFactory.createStone(GemType.EMERALD_STONE);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 13, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 12, 4);
grid.insertStoneIntoColumn(stone);
assertEquals("Stone must using the second frame", 1, stone.getCurrentFrame());
}
Ultima modifica di Ufo13 : 23-03-2006 alle 13:08. |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Aggiunto test:
Codice:
public void testSetAndGetCurrentFrame()
{
Gem gem = createGem();
gem.createAnimationSequence(0);
gem.setCurrentFrame(1);
assertEquals(1, gem.getCurrentFrame());
gem.setCurrentFrame(2);
assertEquals(2, gem.getCurrentFrame());
}
Codice:
public void insertStoneIntoColumn(Gem stone)
{
stone.setCurrentFrame(1);
}
Preparo nuovo test... |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Codice:
public void testStoneFrameInSecondSegment()
{
GemFactory gemFactory = GemFactory.createForTesting(null);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 13, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 12, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 11, 4);
Gem stone = gemFactory.createStone(GemType.EMERALD_STONE);
grid.insertStoneIntoColumn(stone, 4);
assertEquals("Stone must be using the second frame", 1, stone.getCurrentFrame());
}
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Fatto
Codice:
public void insertStoneIntoColumn(Gem stone, int column)
{
if(getHeightOfColumn(column)<=1)
{
stone.setCurrentFrame(0);
}
else
{
stone.setCurrentFrame(1);
}
}
Ed ecco subito il prossimo test Codice:
public void testStoneFrameInThirdSegment()
{
int[] randomSequence = {0};
GemFactory gemFactory = GemFactory.createForTesting(new MockRandomGenerator(randomSequence));
insertAndUpdate(gemFactory.create(GemType.EMERALD), 13, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 12, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 11, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 10, 4);
Gem stone = gemFactory.createStone(GemType.EMERALD_STONE);
grid.insertStoneIntoColumn(stone, 4);
assertEquals("Stone must be using the third frame", 2, stone.getCurrentFrame());
}
Ultima modifica di Bonfo : 23-03-2006 alle 14:05. |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Ufo ha un po' di problemi ... impegni improvvisi
Vado avanti io SOLUZIONE: Codice:
public void insertStoneIntoColumn(Gem stone, int column)
{
if(getHeightOfColumn(column)<=1)
{
stone.setCurrentFrame(0);
}
else if(getHeightOfColumn(column)<=3)
{
stone.setCurrentFrame(1);
}
else
{
stone.setCurrentFrame(2);
}
}
Ecco il prossimo test: Codice:
public void testStoneFrameInFourthSegment()
{
int[] randomSequence = {0};
GemFactory gemFactory = GemFactory.createForTesting(new MockRandomGenerator(randomSequence));
insertAndUpdate(gemFactory.create(GemType.EMERALD), 13, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 12, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 11, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 10, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 9, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 8, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 7, 4);
Gem stone = gemFactory.createStone(GemType.EMERALD_STONE);
grid.insertStoneIntoColumn(stone, 4);
assertEquals("Stone must be using the fourth frame", 3, stone.getCurrentFrame());
}
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
SOLUZIONE:
Codice:
public void insertStoneIntoColumn(Gem stone, int column)
{
if(getHeightOfColumn(column)<=1)
{
stone.setCurrentFrame(0);
}
else if(getHeightOfColumn(column)<=3)
{
stone.setCurrentFrame(1);
}
else if(getHeightOfColumn(column)<=6)
{
stone.setCurrentFrame(2);
}
else
{
stone.setCurrentFrame(3);
}
}
Ecco il prossimo test: Codice:
public void testStoneFrameInFifthSegment()
{
int[] randomSequence = {0};
GemFactory gemFactory = GemFactory.createForTesting(new MockRandomGenerator(randomSequence));
insertAndUpdate(gemFactory.create(GemType.EMERALD), 13, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 12, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 11, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 10, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 9, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 8, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 7, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 6, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 5, 4);
insertAndUpdate(gemFactory.create(GemType.EMERALD), 4, 4);
Gem stone = gemFactory.createStone(GemType.EMERALD_STONE);
grid.insertStoneIntoColumn(stone, 4);
assertEquals("Stone must be using the fifth frame", 4, stone.getCurrentFrame());
}
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Ecco la soluzion all'ultimo test.
Codice:
public void insertStoneIntoColumn(Gem stone, int column)
{
if(getHeightOfColumn(column)<=1)
{
stone.setCurrentFrame(0);
}
else if(getHeightOfColumn(column)<=3)
{
stone.setCurrentFrame(1);
}
else if(getHeightOfColumn(column)<=6)
{
stone.setCurrentFrame(2);
}
else if(getHeightOfColumn(column)<=9)
{
stone.setCurrentFrame(3);
}
else
{
stone.setCurrentFrame(4);
}
}
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Siccome il metodo così fa abbastanza schifo, ecco un piccolo refactoring basato su una idea di Ufo.
Codice:
private static final int[] STONES_FRAMES_BASED_ON_ROW = {0,0,1,1,2,2,2,3,3,3,4,4,4,4};
public void insertStoneIntoColumn(Gem stone, int column)
{
stone.setCurrentFrame(STONES_FRAMES_BASED_ON_ROW[getHeightOfColumn(column)]);
}
private static final...quindi niente commit TASK COMPLETATO |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Perchè la metti visibile a livello di classe ? Non la puoi mettere visibile solo a livello di metodo ?
Ultima modifica di cionci : 23-03-2006 alle 21:00. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:42.



















