Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-03-2006, 14:47   #1
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
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
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2006, 15:02   #2
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
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.
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2006, 15:03   #3
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
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());
    }
Partiamo....!!!!
__________________
Software engineer
Bonfo's Blog

Ultima modifica di Bonfo : 22-03-2006 alle 15:40.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2006, 15:37   #4
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
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.
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2006, 16:53   #5
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
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());
    }
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2006, 16:53   #6
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
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));
        }
    }
GREEN
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2006, 17:00   #7
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
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());       
    }
a te la palla...
__________________
Software engineer
Bonfo's Blog

Ultima modifica di Bonfo : 22-03-2006 alle 17:17.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2006, 19:08   #8
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
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));
    }
con QuickFix passa da solo

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));
    }
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 00:05   #9
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
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;
    }
GREEN

Di nuovo a te
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 11:10   #10
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
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.
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 11:33   #11
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
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 ;
    }
..non è rimasto molto dell'originale

GREEN
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 12:52   #12
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
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.
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 13:08   #13
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
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());
    }
Passa da solo

Codice:
    public void insertStoneIntoColumn(Gem stone)
    {
        stone.setCurrentFrame(1);
    }
Il test di Bonfo ora passa.

Preparo nuovo test...
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 13:20   #14
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
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());
    }
A te
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 13:54   #15
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
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);
        }
    }
GREEN

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());       
    }
buon lavoro
__________________
Software engineer
Bonfo's Blog

Ultima modifica di Bonfo : 23-03-2006 alle 14:05.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 20:00   #16
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
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);
        }
    }
GREEN

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());       
    }
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 20:09   #17
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
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);
        }
    }
GREEN

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());       
    }
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 20:10   #18
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
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);
        }
    }
GREEN
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 20:54   #19
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
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)]);
    }
Funziona perfettamente...ma non il checkstyle non mi fa passare il
private static final...quindi niente commit

TASK COMPLETATO
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 20:57   #20
cionci
Senior Member
 
L'Avatar di cionci
 
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
Musk non riesce a fermare la causa: le t...
Grafene al posto del silicio per le cell...
F-Stop, il prequel cancellato di Portal ...
Il razzo spaziale New Glenn di Blue Orig...
La Cina si prepara al primo lancio orbit...
Sale LAN, la Manovra 2027 introduce una ...
11 prezzi imperdibili in Amazon: non sol...
Giù i prezzi di Xiaomi 17T e Xiao...
Una tassa di 5,5 centesimi su ogni gigab...
Vuoi clonare un videogioco con l'IA? Cla...
Furto da 6,3 miliardi di dollari, Binanc...
Gli USA dipendono dai robot stranieri: T...
Volkswagen non ha più soldi per l...
Telescopio spaziale Hubble: la NASA cerc...
Più sottile e potente: le nuove i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 03:24.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v