|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
[BUG #6] Gemma Solitaria
A volte è possibile ottenere e muovere una gemma solitaria:
Quote:
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;
}
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. |
|
|
|
|
|
#2 |
|
Senior Member
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();
}
|
|
|
|
|
#3 |
|
Senior Member
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();
}
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Riesci a scrivere un test che esercita il bug?
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
#5 |
|
Senior Member
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 |
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Quote:
Quote:
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. |
||
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Quote:
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();
}
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();
}
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;
}
Lanciamo la build....funziona tutto |
|
|
|
|
|
#8 |
|
Senior Member
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. |
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Ma sei stato bravissimo BD
Anche questo e' andato. Aggiorniamo la bug list.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Bug Closed.
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:27.


















