Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
HONOR Magic V6 è arrivato in Italia a 2.299,90 euro con una promessa precisa: unire 4 mm di spessore da aperto (8,75 mm chiuso nel modello White, 9 mm negli altri colori) a una batteria da 6.660 mAh, la più capiente mai vista su un pieghevole. Lo abbiamo usato per oltre una settimana in versione Red 16/512 GB per capire se lo Snapdragon 8 Elite Gen 5 tiene testa alla concorrenza anche fuori dai benchmark ufficiali
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Tutti gli articoli Tutte le news

Vai al Forum
Discussione Chiusa
 
Strumenti
Old 28-04-2006, 21: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 21:38.
BlueDragon è offline  
Old 28-04-2006, 21: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, 21: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, 22: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, 22: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, 22: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, 18: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, 18: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 18:55.
BlueDragon è offline  
Old 29-04-2006, 19: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, 10: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, 00:43   #11
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Bug Closed.
VICIUS è offline  
 Discussione Chiusa


Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere? Recensione HONOR Magic V6: spessore record e sup...
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Il Garante privacy italiano multa Charac...
Microsoft stacca la spina a OWA Light do...
Call of Duty: Black Ops e Black Ops 2 ar...
Meta vuole dipendere meno da NVIDIA e ac...
id Software è stata quasi azzerat...
Un chip AMD Zen 6 appare su Geekbench e ...
ChatGPT Atlas ha floppato: stop allo svi...
TOP 10 offerte Amazon, aggiornata: 5 son...
Celle solari in perovskite: l'architettu...
Ricoh celebra 30 anni di GR: una GR IV s...
Character.AI lancia i suoi primi microdr...
Microsoft potenzia la sicurezza di Windo...
Speciale "mai più senza"...
La Cina ha lanciato con successo il razz...
Micron porta a oltre 250 miliardi di dol...
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: 11:59.


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