Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Google ha appena rinnovato la sua celebre serie A con il Pixel 10a, lo smartphone della serie più conveniente se consideriamo il rapporto tra costo e prestazioni. Con il chip Tensor G4, un design raffinato soprattutto sul retro e l'integrazione profonda di Gemini, il colosso di Mountain View promette un'esperienza premium a un prezzo accessibile. E il retro non ha nessuno scalino
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
Al MWC Qualcomm annuncia una coalizione industriale per lanciare il 6G entro il 2029 e introduce agenti IA per la gestione autonoma della RAN. Ericsson, presente sul palco, conferma la direzione: le reti del futuro saranno IA-native fin dalla progettazione
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air è un ultraleggero da 1 kg con Ryzen 5 6600H, display 14" 16:10 e 16 GB LPDDR5. Offre buona portabilità, autonomia discreta e costruzione in alluminio, ma storage PCIe 3.0 e RAM saldata limitano l'espandibilità. A 549 euro sfida brand più noti nella stessa fascia di mercato.
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


Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso CHUWI CoreBook Air alla prova: design premium, b...
Roborock Saros 20: il robot preciso e molto sottile Roborock Saros 20: il robot preciso e molto sott...
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm ASUS ROG Kithara: quando HIFIMAN incontra il gam...
NVIDIA cerca un progettista di datacente...
DREAME Aqua10 Ultra Roller scende ora a ...
Targa e assicurazione per monopattino, a...
Recensione Nothing HeadPhone (a): le cuf...
Più colore, meno ricariche: Nothi...
Nothing lancia Phone (4a) e Phone (4a) P...
Pentagono e Anthropic tornano a parlarsi...
Svelata la classifica 2026 sulle auto el...
Huawei Watch GT6 ora a soli 199€ su Amaz...
Intel vede segnali positivi per la Found...
Nasce in Germania una centrale ibrida eo...
News Corp firma un accordo pluriennale c...
Offerta lampo: iPhone 17 256GB scende a ...
OpenAI sfida Microsoft: in arrivo un'alt...
Google ed Epic Games, accordo globale: c...
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: 13:57.


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