Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
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 vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Tutti gli sconti Apple su Amazon: tornan...
Altro che entry-level: due smartwatch Am...
Roscosmos ha posticipato (ancora) il lan...
Isar Aerospace si prepara al secondo lan...
Tory Bruno è entrato in Blue Orig...
Fujifilm lancia la cartuccia per archivi...
Dreame H15 Mix: la soluzione 7-in-1 per ...
AirPods Pro 3 in forte sconto su Amazon:...
36 offerte Amazon, molte appena partite:...
2 caricatori multipli eccezionali: da 28...
OLED e 360 Hz a un prezzo senza preceden...
Roborock Q10 S5+ a un prezzo molto conve...
Upgrade PC a prezzo ridotto: le migliori...
Sono i 6 smartphone migliori su Amazon: ...
Google Pixel 9a a 361€, mai così ...
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: 14:42.


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