Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-03-2006, 13: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, 14: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, 14: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 14:40.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2006, 14: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 14:45.
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2006, 15: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, 15: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, 16: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 16:17.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2006, 18: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 22-03-2006, 23: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, 10: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 10:14.
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 10: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, 11: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 12:08.
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 12: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, 12: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, 12: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 13:05.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 19: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, 19: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, 19: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, 19: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, 19: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 20:00.
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Home Assistant su uno schermo touch econ...
L'IA entra nei negozi Unieuro con Google...
"What Holds Us", la nuova most...
La Formula 1 divide sui motori, ma il su...
Un computer a DNA esegue moltiplicazioni...
Ibride cinesi, l'Europa fissa il tetto a...
iPhone Duo potrebbe dar vita a una gamma...
Denza Z9S: la berlina elettrica con il r...
Valve abilita i driver e il supporto all...
Terafab, il progetto di Musk finisce in ...
Il meglio di Amazon in 42 articoli: sono...
ECOVACS WINBOT W2 PRO OMNI a 349€: ecco ...
Samsung Gallery Cloud Sync introduce il ...
Dyson V8 Cyclone a 249€: scopa elettrica...
Rifiuti elettronici, l'altra faccia dell...
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: 12:07.


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