Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16-ak0001nl combina RTX 5080 Laptop e Ryzen AI 9 HX 375 in un desktop replacement potente e ben raffreddato, con display 240 Hz e dotazione completa. Autonomia limitata e calibrazione non perfetta frenano l'entusiasmo, ma a 2.609 euro è tra le proposte più interessanti della categoria.
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Google ha appena rinnovato la sua celebre serie A con il Pixel 10a, lo smartphone della serie più conveniente se consideriamo il rapporto tra costo e prestazioni. Con il chip Tensor G4, un design raffinato soprattutto sul retro e l'integrazione profonda di Gemini, il colosso di Mountain View promette un'esperienza premium a un prezzo accessibile. E il retro non ha nessuno scalino
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


Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso CHUWI CoreBook Air alla prova: design premium, b...
WhatsApp prepara account dedicati ai min...
Nemotron 3 Super: modello AI open da 120...
Addio caricamenti lenti? Microsoft aggio...
Valve definisce i requisiti di certifica...
Microsoft accelera l'integrazione tra Xb...
Smartphone potenti sotto i 300€: ecco i ...
iPhone 18 Pro: le ultime sulle novit&agr...
WhatsApp: sono in arrivo gli abbonamenti...
Sempre più pubblicità per ...
Robot aspirapolvere e Offerte di Primave...
Apple non realizzerà un iPhone Fl...
Un Haier QLED 4K UHD 50'' con 6 Mesi DAZ...
Spotify dà i numeri: nel 2025 l'i...
Meta accelera sui chip AI proprietari: q...
IT-Wallet diventerà sempre pi&ugr...
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:26.


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