Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Tutti gli articoli Tutte le news

Vai al Forum
Discussione Chiusa
 
Strumenti
Old 13-12-2005, 12: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 21:20.
Jocchan è offline  
Old 13-12-2005, 21: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, 12: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 12:28.
VICIUS è offline  
Old 16-12-2005, 13: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, 17: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, 18: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, 21: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, 22: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, 23: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 17-12-2005, 00: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 : 17-12-2005 alle 00:24.
thebol è offline  
Old 17-12-2005, 00: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, 01: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 01:06.
thebol è offline  
Old 17-12-2005, 01: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, 01: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, 21: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, 23: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, 23: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, 12: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, 12: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 12:09.
cionci è offline  
Old 18-12-2005, 12: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


Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
Funzionalità top a un prezzo acce...
Lo strumento per gli aggiornamenti autom...
Imperdibile sconto sul roborock Saros Z7...
Google Pixel 10, altri 100€ di sconto su...
Chip sotto i 2 nanometri, l'Europa alza ...
La smart meno smart di tutte: #6 in azio...
Red Hat Enterprise Linux sbarca su AWS E...
Addio alle migliaia di cicli e anni di t...
Colpo di STMicroelectronics, un'intesa d...
La Ferrari elettrica si chiama Luce: ecc...
Proseguono le riparazioni in vista del l...
Cinema domestico low cost: proiettore Fu...
Sharp porta a ISE 2026 i nuovi display i...
Casa più sicura senza lavori: Arl...
Batterie esauste, l'Italia raccoglie sol...
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: 06:10.


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