Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Abbiamo potuto mettere le mani in anteprima sul nuovo monitor MSI dedicato ai giocatori: un mostro che adotta un pannello QD-OLED da 26,5 pollici con risoluzione 2560 x 1440 pixel, frequenza di aggiornamento fino a 500 Hz e tempo di risposta di 0,03 ms GtG
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI aggiorna la sua linea di droni ultraleggeri con Neo 2, un quadricottero da 160 grammi che mantiene la compattezza del predecessore ma introduce una stabilizzazione meccanica a due assi, sensori omnidirezionali e un sistema LiDAR
Tutti gli articoli Tutte le news

Vai al Forum
Discussione Chiusa
 
Strumenti
Old 28-04-2006, 22:25   #1
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
[BUG #6] Gemma Solitaria

A volte è possibile ottenere e muovere una gemma solitaria:
Quote:
Originariamente inviato da Manp
mi sono accorto di una cosa

faccio un esempio... mettiamo caso che escano 2 gemme, una rossa e, quella inferiore (che ne sò) di colore verde
la pila esattamente sotto a dove escono è alta 2 righe meno del massimo (del game over) e come primo elemento in alto ha un box verde

di solito capita che la gemma inferiore della coppia e il box che si trova in cima alla pila (dello stesso colore) spariscono immediatamente (questo perchè a quanto vedo la coppia entra direttamente nelle prime due righe della griglia, non parte da "fuori" dalla griglia, vale a dire dall'imbutino che si vede in alto)... mentre la seconda (quella in alto) gemma della coppia uscita (che è rimasta da sola essendo sparita l'altra assieme al primo elemento della pila) cade ad una velocità un po' superiore al normale verso la pila e qui si ferma

e fin qui credo che sia giusto, insomma che sia il comportamento corretto

una (sola) volta però mi è capitato di riuscire a spostare la gemma "supersite" della coppia verso destra...
in poche parole avevo una sola gemma che cadeva e che potevo controllare spostando a dx o sx come volevo (non ho provato a ruotarla per vedere cosa succedeva purtroppo)

ecco, in questo caso non so se il comportamento sia corretto

spero di essere riuscito a spiegarmi
Direi che il seguente codice in GridController ha buone possibilità di esserne la causa...che ne dite?
Codice:
    public void insertNewGemsPair()
    {
        Droppable gem;

        if(!grid.isGemAt(1, 4))
        {
            gem = gemGenerator.extract();
            grid.insertGem(1, 4, gem);
            gemsPair.setPivotGem(gem);

            gem = gemGenerator.extract();
            grid.insertGem(0, 4, gem);
            gemsPair.setSlaveGem(gem);
        }
        else
        {
            gem = gemGenerator.extract();
            grid.insertGem(0, 4, gem);
            gemsPair.setPivotGem(gem);
            gemsPair.setNoSlaveGem();
        }

        ++numberOfPairInserted;
    }
Il codice permette l'inserimento di una gemma solitaria, poi sfruttando il lasso di tempo che intercorre tra la creazione della gemma solitaria ed il riconoscimento del GameOver, un giocatore molto rapido (o con delle mosse già bufferizzate dalla tastiera) potrebbe muovere via la gemma....regge come ipotesi?

Ho anche appena riprodotto il baco..è bastato impilare tutte le gemme lasciando solo 1 riga libera in alto e tenendo premuto sinistra non appena l'ultima gemspair regolare si è posata.
EDIT: Ho anche riprovato e non ci sono riuscito...ora tocca trovare perché riesce solo a volte

Ultima modifica di BlueDragon : 28-04-2006 alle 22:38.
BlueDragon è offline  
Old 28-04-2006, 22:44   #2
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
Per riprodurre in scioltezza il baco, basta inserire un Thread.sleep(3000)
nel ramo che produce la gemma singola, così avete tutto il tempo di premere il tasto per spostarla

Es:
Codice:
        else
        {
            System.out.println("Creata gemma unica!");
            try
            {
                Thread.sleep(3000);
            }
            catch(InterruptedException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            gem = gemGenerator.extract();
            grid.insertGem(0, 4, gem);
            gemsPair.setPivotGem(gem);
            gemsPair.setNoSlaveGem();
        }
BlueDragon è offline  
Old 28-04-2006, 22:50   #3
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
Un possibile fix è stabilire che quando viene inserita una sola gemma, essa viene messa subito messa in stato dropped.
Codice:
        else
        {
            gem = gemGenerator.extract();
            grid.insertGem(0, 4, gem);
            gemsPair.setPivotGem(gem);
            gemsPair.setNoSlaveGem();
            gem.drop();
        }
Vi piace?
BlueDragon è offline  
Old 28-04-2006, 23:09   #4
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Riesci a scrivere un test che esercita il bug?
fek è offline  
Old 28-04-2006, 23:25   #5
Manp
Senior Member
 
L'Avatar di Manp
 
Iscritto dal: Oct 2001
Città: Brescia
Messaggi: 13830
ehi, sembra che per una volta sia stato utile nel trovare un baco così imboscato

__________________
Xbox Live!: Manp
PSN: Manp

Manp è offline  
Old 28-04-2006, 23:51   #6
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
Quote:
Originariamente inviato da Manp
ehi, sembra che per una volta sia stato utile nel trovare un baco così imboscato
Decisamente

Quote:
Originariamente inviato da fek
Riesci a scrivere un test che esercita il bug?
In TestGemsPair esiste testInsertionOnFullColumn() che testa che in una colonna in cui rimane vuota solo la prima casella, venga inserita una sola gemma nella cella 0,4 senza dare errore.
Ci potrei aggiungere:
assertFalse("gemspair shouldn't be able to move",gemsPair.canReactToInput());
in modo da dichiarare che la gemma solitaria deve essere inserita bloccata e non può essere portata in giro.
BlueDragon è offline  
Old 29-04-2006, 19:33   #7
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
Quote:
Originariamente inviato da BlueDragon
assertFalse("gemspair shouldn't be able to move",gemsPair.canReactToInput());
in modo da dichiarare che la gemma solitaria deve essere inserita bloccata e non può essere portata in giro.
Ok, aggiungo il test quotato sopra.
Lancio Ant, fallisce. Bene, cerchiamo la via più semplice.
Andiamo a gemsPair.canReactToInput.
Codice:
public boolean canReactToInput()
    {
        if(slaveGem == null)
        {
            return null != pivotGem;
        }
        return slaveGem.isFalling() && pivotGem.isFalling();
    }
Ok, l'ultimo return è molto chiaro: la gemPair si può muovere se tutte e due le gemme stanno cadendo. Se una delle due non sta cadendo, significa che si sono divise e non si può controllare la rimanente, mi sembra giusto.

Il return sopra invece dice: se la slaveGem non esiste, allora il poter muovere o meno la gemsPair dipende dall'esistenza della gemma Pivot. Se esiste almeno la gemma Pivot, puoi muovere, altrimenti se è null anch'essa, non puoi muovere.
La cosa mi lascia un po' perplesso...in che occasione dovrei poter muovere la gemma Pivot senza la gemma Slave?
Io metterei piuttosto un if (pivotGem == null || slaveGem == null) return false.
Ossia, se una delle due non c'è, non puoi muovere il paio.

Proviamo...lancio il test, fallisce. Perché? Ci sono dei test di Grid che usano una gemma sola in griglia e che si aspettano che venga mossa dagli handler, che però considerano sempre GemsPair.canReactToInput.
Uhm...se pensiamo a Grid fuori dal contesto del gioco come una griglia in cui muovere le gemme, è vero che potrebbe muoversi una gemma da sola.
Confesso che mi lascia qualche dubbio ma andiamo avanti.

Allora diciamo che è possibile muovere una gemma da sola, però direi di applicargli comunque la condizione "isFalling()".
Se non sta cadendo, cioè si è fermata, non dovrebbe essere possibile muoverla, anche se è da sola.

Modifichiamo quindi il metodo canReactToInput per farlo diventare così:
Codice:
    public boolean canReactToInput()
    {
        if(slaveGem == null)
        {
            return null != pivotGem && pivotGem.isFalling();
        }
        return slaveGem.isFalling() && pivotGem.isFalling();
    }
Lanciamo la build, i test di Grid passano ma fallisce il nostro test per tenere ferma la gemma solitaria.
Infatti la gemma solitaria che viene inserita in testa alla colonna è in stato falling = true quando viene inserita.
Quello che vogliamo ottenere non è che la gemma sia in caduta ma che sia semplicemente inserita per riempire l'ultima cella disponibile e poi mostrare gameover. Se non c'entra l'intera gemspair, la singola gemma inserita va appoggiata ferma sulla colonna piena.
Modifichiamo l'inserimento della singola gemma da parte del GridController, aggiungendo il drop:
Codice:
    public void insertNewGemsPair()
    {
        Droppable gem;

        if(!grid.isGemAt(1, 4))
        {
            gem = gemGenerator.extract();
            grid.insertGem(1, 4, gem);
            gemsPair.setPivotGem(gem);

            gem = gemGenerator.extract();
            grid.insertGem(0, 4, gem);
            gemsPair.setSlaveGem(gem);
        }
        else
        {
            gem = gemGenerator.extract();
            grid.insertGem(0, 4, gem);
            gem.drop();
            gemsPair.setPivotGem(gem);
            gemsPair.setNoSlaveGem();
        }

        ++numberOfPairInserted;
    }
Ok, così la gemma è droppata ferma sulla colonna piena.
Lanciamo la build....funziona tutto
BlueDragon è offline  
Old 29-04-2006, 19:42   #8
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
Dopo un'ultimo controllo lanciando il gioco, committato il tutto sul repository

EDIT:Build successfull

Ultima modifica di BlueDragon : 29-04-2006 alle 19:55.
BlueDragon è offline  
Old 29-04-2006, 20:10   #9
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
__________________
Software engineer
Bonfo's Blog
Bonfo è offline  
Old 30-04-2006, 11:15   #10
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Ma sei stato bravissimo BD

Anche questo e' andato. Aggiorniamo la bug list.
fek è offline  
Old 01-05-2006, 01:43   #11
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Bug Closed.
VICIUS è offline  
 Discussione Chiusa


OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone L'IA "seria" di Appian è divers...
Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
BYD domina il mercato NEV cinese: nessun...
Hong Kong sempre più aperta alle ...
E-Bike e Cyber Monday, non si scherza: s...
Un supervulcano potrebbe cambiare il fut...
Questa scheda video cinese non ha una GP...
Com'è fatto il cloud... di person...
Windows 11, l'icona per la password non ...
Stabilimento Beko di Siena: fine delle a...
Gillette City Winter Edition: la nuova m...
Ultimo giorno di Black Friday: ecco le o...
Le pubblicità stanno arrivando su...
Ultimo giorno di Black Friday: droni DJI...
Elon Musk: 'AI e robotica sono la chiave...
Wi-Fi superveloce anche in giardino? FRI...
Ogni richiesta a ChatGPT consuma quanto ...
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: 15:27.


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