Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Star Wars Zero Company è l'erede di XCOM 2
Star Wars Zero Company è l'erede di XCOM 2
Bit Reactor porta nell’universo di Star Wars una struttura tattica che richiama apertamente XCOM 2, ma la arricchisce con legami tra i personaggi, progressione ruolistica, gestione della base e un sistema di combattimento costruito attorno a tre Punti Azione e alle risorse condivise della squadra
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
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


Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Google Foto, grave bug blocca modifica e...
Apple aggiornerà il suo iPad: chi...
God of War Laufey svela il Serpent Bow d...
Amazon sconta centinaia dei suoi disposi...
Intergalactic, Naughty Dog conferma che ...
Non solo Pro: è in arrivo anche l...
Apple lavora a un nuovo Vision Pro: potr...
Offerte Prime anticipate, robot aspirapo...
ChromeOS non è (ancora) morto: Google fi...
HONOR Magic 9 Pro Max, il nuovo top di g...
Un mini PC totalmente passivo in oro 24 ...
Nothing Headphone (1) Pro ufficiali: tri...
JBL lancia le nuove soundbar Cinema SB p...
Inizia il Prime Day in anticipo Amazon: ...
Quando l'agente IA fa tutto da solo: ven...
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: 09:29.


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