Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Tutti gli articoli Tutte le news

Vai al Forum
Discussione Chiusa
 
Strumenti
Old 13-12-2005, 11:10   #1
Jocchan
Senior Member
 
L'Avatar di Jocchan
 
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
[CICLO 6/bis] Xmas Carol Story 2

Visto che siete insaziabili, e avete già prenotato tutti i task disponibili, allora possiamo permetterci di introdurre anche una nuova storia, che ci porterà ancora più vicini ad una versione effettivamente giocabile. Questa storia è indipendente dalla precedente, quindi potrete prenotarvi per i task fin da subito.

Storia 2: Le gemme devono scendere a coppie di due, sebbene la loro caduta sia scollegata. Quella inizialmente in basso è la gemma primaria della coppia, quella inizialmente in alto è la secondaria. Premendo il tasto Z, la secondaria deve cambiare posizione ruotando (ma non su sè stessa, le png devono avere lo stesso aspetto) in senso antiorario intorno alla primaria. Premendo il tasto X, invece, la secondaria deve ruotare in senso orario. Se la casella di destinazione della gemma secondaria è già occupata, e la rotazione è impossibile, la gemma verrà automaticamente fatta ruotare ulteriormente nello stesso senso di rotazione, fino a trovare una casella libera in cui posizionarla. Gli effetti delle rotazioni sono descritti nello schema:

- secondaria sopra la primaria -> la secondaria andrà rispettivamente a sinistra o a destra della primaria
- secondaria a sx della primaria -> andrà rispettivamente sotto o sopra
- secondaria sotto la primaria -> andrà rispettivamente a destra o a sinistra
- secondaria a dx della primaria -> andrà rispettivamente sopra o sotto

Mediante il tasto C, la gemma secondaria dovrà ruotare di due posizioni.
Quando ognuna delle due gemme collide con qualche oggetto sottostante, l'altra - se non troverà nulla al di sotto - proseguirà indipendentemente la propria caduta. Il box Next continuerà a mostrare, senza incertezze, la coppia di gemme immediatamente successiva a quella attualmente in caduta (la nuova primaria in basso, la nuova secondaria in alto).


Punti cardine da tenere a mente durante i lavori:
  • Mai fare a gara a chi finisce il task per primo, meglio procedere con calma, altrimenti perderemo molto più tempo in seguito
  • Evitiamo di complicarci la vita, esiste di certo una soluzione più semplice di quella che abbiamo pensato di implementare
  • MAI aggiungere elementi non richiesti esplicitamente dai task: se mai serviranno, se ne parlerà nelle prossime storie
  • Comunichiamo il più possibile, se qualcosa non è chiaro discutiamone tutti i dettagli fino ad eliminare ogni dubbio, anche il più insignificante
  • Postare sempre la test list PRIMA di mettere mano al codice
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam.

Ultima modifica di Jocchan : 13-12-2005 alle 20:20.
Jocchan è offline  
Old 13-12-2005, 20:33   #2
Jocchan
Senior Member
 
L'Avatar di Jocchan
 
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
Piccolo schema riassuntivo per le rotazioni:
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam.
Jocchan è offline  
Old 16-12-2005, 11:33   #3
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Ecco i task per questa nuova storia.

Task
Xmas.2.1: thebol + Ufo13: completato
GridControl deve ora creare due gemme. La prima si chiamera pivot e sara quella sotto controllo tramite input. La secondaria deve seguire i movimenti della prima.
Xmas.2.2: DanieleC88: completato
Intercettare la pressione del tasto Z e ruotare la gemma secondaria di 90° in senso orario attorno al pivot
Xmas.2.3: VICIUS: completato
Intercettare la pressione del tasto X e ruotare la gemma secondaria di 90° in senso anti-orario attorno al pivot
Xmas.2.4: VICIUS: completato
Intercettare la pressione del tasto C e ruotare la gemma secondaria di 180°.
Xmas.2.5: 71104: completato
Quando una delle due gemme collide entrambe perdono il controllo e quella ancora libera precipita verso la prima cella libera.

ciao

Ultima modifica di VICIUS : 04-01-2006 alle 11:28.
VICIUS è offline  
Old 16-12-2005, 12:29   #4
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
prendo Xmas.2.4, 2 giorni dopo la fine del task 1
Ufo13 è offline  
Old 16-12-2005, 16:06   #5
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Il Xmas.2.2 è mio.
1 giorno, direi.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline  
Old 16-12-2005, 17:43   #6
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Prendo l'Xmas 2.1
tempo 2 giorni
thebol è offline  
Old 16-12-2005, 20:18   #7
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
vorrei il 5°, 2 giorni a partire da quando finisco il task del game over ^^'
(provo a finirlo adesso)
71104 è offline  
Old 16-12-2005, 21:46   #8
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Ho fatto un corposo refactoring di GridController e InputReactor (cionci, e' quello di cui abbiamo parlato). Fate un bell'update prima di iniziare i vostri task.

Mi raccomando la test list.
fek è offline  
Old 16-12-2005, 22:49   #9
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
testlist provvisoria:

test inserire 2 gemme in grid e posizione
test che la prima gemma inserita sia quella sottocontrollo(pivot) e nella posizione
1,4
test che la seconda gemma sia in 0,4

test che a un movimento della prima gemma, corrisponda un movimento analogo della seconda



naturalmente, varie ed eventuali
thebol è offline  
Old 16-12-2005, 23:21   #10
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Lo scopo del task è generare 2 gemme e metterle sotto il controllo di grid.

Per fare questo, voglio pero aggiungere un test, per controllare che la queue dopo essere stata creata sia full
Codice:
    public void testFullAfterNew()
    {
        assertTrue("queue must be full",new GemQueue(Config.createForTesting()).isFull());   
       
    }
poi inserisco il test

Codice:
    public void testInsertTwoNewGem()
    {
        int oldNumberOfGems = grid.getNumberOfGems();
        grid.insertTwoNewGem();
        assertTrue("two gem are added", grid.getNumberOfGems() - 2 == oldNumberOfGems);
    }
    
    public void testPositionOfInsertTwoNewGem()
    {
        grid.insertTwoNewGem();
        assertTrue("one jem at 0,4", grid.isGemAt(0, 4));
        assertTrue("one jem at 1,4", grid.isGemAt(1, 4));
    }
implemento:

Codice:
    public void insertTwoNewGem()
    {
        insertGem(1,4, gemGenerator.extract());
        insertGem(0,4, gemGenerator.extract());
    }
ora devo settare la prima come master, e la seconda come slave

devo introdurre un nuovo metodo che inserisca la gemma come slave(ho aggiunto la variabile gemSlave).

ma ancor prima devo creare e testare che la setGemSlave e getSlave

Codice:
    public void testGetGemSlave()
    {
        
        grid.setGemSlave(gem1);

        assertSame("Wrong gem under control", gem1, grid.getGemSlave());
    }
    
    public void testGetgemSlaveIsNotInTheGrid()
    {
        try
        {
            grid.insertGem(0, 0, gem1);
            grid.setGemSlave(Gem.createForTesting());
        }
        catch(IllegalArgumentException e2)
        {
            return;
        }

        fail("must throw if gem is not in the grid");
    }
e

Codice:
    public Gem getGemSlave()
    {
        return gemSlave;
    }


    public void setGemSlave(Gem gem)
    {
        if(!gem.isAttachedToGrid())
        {
            throw new IllegalArgumentException();
        }

        gemSlave= gem;
        
    }

introduco poi il metodo insertGemAsSlave(...)

Ultima modifica di thebol : 16-12-2005 alle 23:24.
thebol è offline  
Old 16-12-2005, 23:30   #11
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da thebol
poi inserisco il test

Codice:
    public void testInsertTwoNewGem()
    {
        int oldNumberOfGems = grid.getNumberOfGems();
        grid.insertTwoNewGem();
        assertTrue("two gem are added", grid.getNumberOfGems() - 2 == oldNumberOfGems);
    }
Qui secondo me convine usare: assetEquals("...", oldNumberOfGems + 2, grid.getNumberOfGems())
in questo modo è molto piu chiaro quello che vuoi testare.

ciao
VICIUS è offline  
Old 17-12-2005, 00:01   #12
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
A questo punto per la insertGemAsSlave devo testare:
che inserisca la gemma in grid, che dove la inserisca non ci siano altre gemme, etc



Pero primi mi rendo conto che insertGemAsSlave fa praticamente tutto il lavoro di insertGem, ma invece di chiamare alla fine setGemUnderControl(gem);
chiamerà setGemSlave(gem);

per questo, prima di implementare insertGemSlave, faccio un po di refactoring.

tolgo la setGemUnderCOntrol(gem) da insertGem (rendendola piu generica) e la sposto nella
insertNewGem che diventa
Codice:
    public void insertNewGem()
    {
        Gem gem1 = gemGenerator.extract();
        insertGemIntoColumn(4, gem1);
        setGemUnderControl(gem1);
    }
si sarebbe potuto creare un metodo insertGemUnderControl, ma per adesso penso vada bene cosi.

la insertNewGem() diventa percio

Codice:
        Gem gem1 = gemGenerator.extract();
        insertGemIntoColumn(4, gem1);
        setGemUnderControl(gem1);
la build cosi è molto rotta, perche in molti test(nel codice forse no, il gioco sembra andare bene) la insertGem e stata usata presupponendo che mettesse anche la gemma sotto controllo.

percui, rifaccio lo stesso refactoring ma in un altra maniera
prima rinomino insertGem in insertGemUnderControl, e poi ci estraggo tutto il codice tranne l'ultim riga e rinomino il metodo insertGem.

Alla fine la insertGemUnderControl è venuta fuori =D. Si potrebbe fare un po di refactoring sui test per vedere dove andrebbe usate insertGem invece che insertGemUnderControl(la ex insertGem), ma si puo fare in futuro.

[la nuova funzione insertGem e testata implicitamente da tutti i test che testano insertGemUnderControl, percui escluso il discorso di prima, non cè bisogno di toccare i test]

a questo punto posso aggiungere

Codice:
    public void testInsertGemAsSlave(){
        grid.insertGemAsSlave(0, 0, gem1);
        assertSame("Wrong gem slave", gem1, grid.getGemSlave());
    }
con relativa implementazione
Codice:
    public void insertGemAsSlave(int row, int column, Gem gem)
    {
        insertGem(row, column, gem);
        setGemSlave(gem);
    }

Ultima modifica di thebol : 17-12-2005 alle 00:06.
thebol è offline  
Old 17-12-2005, 00:05   #13
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da VICIUS
Qui secondo me convine usare: assetEquals("...", oldNumberOfGems + 2, grid.getNumberOfGems())
in questo modo è molto piu chiaro quello che vuoi testare.

ciao
fatto
thebol è offline  
Old 17-12-2005, 00:20   #14
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
dopo questa modifica insertTwoNewGem() diventa

Codice:
   public void insertTwoNewGem()
    {
        insertGemUnderControl(1,4, gemGenerator.extract());
        insertGemAsSlave(0,4, gemGenerator.extract());
    }
e posso testare il fatto che

Codice:
    public void testInsertTwoNewGem()
    {
        int oldNumberOfGems = grid.getNumberOfGems();
        grid.insertTwoNewGem();
        assertEquals("two gem are added", oldNumberOfGems +2, grid.getNumberOfGems());
        assertNotNull("Gem under control is null", grid.getGemUnderControl());
        assertNotNull("Gem slave is null", grid.getGemSlave());
    }
(Avrei dovuto fare il contrario, sorry :\ )


ora manca il test per il movimento simultaneo della gemmaPivot e per la slave

mi verrebbe da testare che a ogni movimento le posizioni relative rimangano costanti, ma se a qualcuno viene un idea migliore, forse e meglio
thebol è offline  
Old 17-12-2005, 20:52   #15
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
inizio testando che la seconda gemma cada per la gravita

Codice:
    public void testTwoGemIsMovingWhenLowerCellIsEmpty()
    {
        grid.insertGemUnderControl(1, 4, gem1);
        grid.insertGemAsSlave(0,4,gem2);
        //grid.setGemUnderControl(gem1);
        grid.setGravity(1.0f);
        
        float oldPositionPivot = gem1.getY();
        float oldPositionSlave = gem2.getY();
        
        grid.update(new MockTimer());
        
        assertEquals("Gem Pivot is not moving when cell under current position is empty", 
            oldPositionPivot + 1.0f, gem1.getY(), 0.0001f);
        
        assertEquals("Gem Slave is not moving when cell under current position is empty", 
            oldPositionSlave + 1.0f, gem2.getY(), 0.0001f);
    }
modificando il metodo update di grid

Codice:
    public void update(AbstractTimer timer)
    {
        updateGemAnimations(timer);
        
        if(getGemUnderControl() == null)
        {
            return;
        }

        if(gemCantMoveDown(getGemUnderControl()))
        {
            alignGemToCellUpperBound(getGemUnderControl());
            getGemUnderControl().dropGem();

            if(gemIsSurroundedBySameType(getGemUnderControl()))
            {
                getGemUnderControl().useBrighterImage();
            }
        }
        else
        {
            moveGem(getGemUnderControl());
            if (getGemSlave() == null){
                return;
            }
            moveGem(getGemSlave());
        }
    }


Cosi facendo, tutti i test passano e posso andare avanti.
[NB, con questa implementazione ci puo essere un bug se girando le gemme, quella piu in basso risulta la slave. Ma mi sembra che questa cosa vada risolta col 4 task, percui se non ricevo altre informazioni, questo caso non sarà coperto in questo task]

questo test compre anche il caso della pressione del tasto down, che presuppone un aumento
del fattore gravity



Ora ce da testare che se spingo lefkey, entrambe le gemme si spostino(andra poi fatto uguale per rightkey)

Codice:
   public void testTwoGemMoveLeft()
    {
        
        grid.insertGemUnderControl(1, 4, gem1);
        grid.insertGemAsSlave(0, 4, gem2);

        input.generateKey(KeyCode.vk_Left, timer.getTime());
        inputReactor.reactToInput();

        assertEquals("Gem pivot didnt move to the left", grid.getGemAt(1, 3), gem1);
        assertEquals("Gem slave didnt move to the left", grid.getGemAt(0, 3), gem2);
    }
per farlo passare, basta andare nella classe LeftKeyHandler e modificare executeWhenPressed

Codice:
    public void executeWhenPressed(InputReactor inputReactor)
    {
        KeyEventHandler rightHandler = inputReactor.getKeyHandler(KeyCode.vk_Right);
        
        if(!rightHandler.wasRepeated() 
            && !rightHandler.hasBeenRepeated(
                    inputReactor.getLastInputTimeStamp()))
        {
            if(this.grid.getGemUnderControl() != null)
            {
                this.grid.moveGemLeft(this.grid.getGemUnderControl());                
            }
            if(this.grid.getGemSlave() != null)
            {
                this.grid.moveGemLeft(this.grid.getGemSlave());                
            }
        }
    }

analogo per il moveRight
thebol è offline  
Old 17-12-2005, 22:53   #16
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
non ci posso credereeee!!!
mi avete lasciato il 2.3!!!
sono commosso!!!
non ci speravo proprio che dei lupi famelici come voi mi lasciassero qualcosa....
VICIUUUUSSSS:..
prenotami prima che se lo mangi qualcunoooo!!!!!!

tempo stimato ....... se il pc a torino non si è autodistrutto direi 2 giorni....
__________________
^TiGeRShArK^ è offline  
Old 17-12-2005, 22:57   #17
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
ho una domanda da fare.
i test per il movimento, non è propriamente corretto, nel senso che se le 2 gemme sono messe in orizzontale (2,1)(2,0) puo non funzionare.

Questa e pero una casistica compresa nel mio task?

in teoria no, visto che non è ancora possibile farle girare...

percui introddurre questo test e andare fuori task o no?
thebol è offline  
Old 18-12-2005, 11:00   #18
Jocchan
Senior Member
 
L'Avatar di Jocchan
 
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
Quote:
Originariamente inviato da thebol
ho una domanda da fare.
i test per il movimento, non è propriamente corretto, nel senso che se le 2 gemme sono messe in orizzontale (2,1)(2,0) puo non funzionare.

Questa e pero una casistica compresa nel mio task?

in teoria no, visto che non è ancora possibile farle girare...

percui introddurre questo test e andare fuori task o no?
Non hai tutti i torti, in effetti ci starebbe bene un sesto task, per definire il comportamento anche nei casi di posizionamenti relativi differenti.
Quando vedo Vicius su MSN vedremo di elaborarlo e di postarlo. Poi, se nessuno si prenota, allora sarà tuo di diritto
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam.
Jocchan è offline  
Old 18-12-2005, 11:06   #19
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
Sinceramente io avrei visto benissimo una classe GemsPair derivata da Gem con una istanza della gemma slave all'interno...
Continuando così si rende Grid troppo complicato...magari avrebbe dovuto essere il task Xmas.2.0...

Ultima modifica di cionci : 18-12-2005 alle 11:09.
cionci è offline  
Old 18-12-2005, 11:20   #20
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Quote:
Originariamente inviato da cionci
Sinceramente io avrei visto benissimo una classe GemsPair derivata da Gem con una istanza della gemma slave all'interno...
Continuando così si rende Grid troppo complicato...magari avrebbe dovuto essere il task Xmas.2.0...
Sono d'accordissimo sul GemsPair che renderebbe il tutto mooolto più facile da gestire, però non capisco perchè deve derivare da Gem...
Ufo13 è offline  
 Discussione Chiusa


HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Nuovi occhiali AI Ray-Ban Meta: focus su...
Nuovi memristori in ossido di afnio: Cam...
Attacco hacker a ITA Airways: cosa risch...
Le migliori 27 offerte Amazon, per categ...
Windows 11, Microsoft blocca l'update KB...
Guerra sui codec video: Dolby contro Sna...
Monitor gaming in offerta Amazon: da 99€...
Sony blocca le schede di memoria in Giap...
Lavatrice, asciugatrice e frigorifero: i...
Lamborghini e Moza insieme: la replica d...
Cupra aggiorna la Tavascan: nuova versio...
Commissione Europea sotto attacco: sottr...
L'AI ricostruisce le regole di un gioco ...
Arox lancia AX-HP: il microcontrollore i...
Borderlands 4, polemica su Steam: recens...
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: 10:59.


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