|
|
|
|
Strumenti |
18-03-2006, 14:01 | #1041 | |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Quote:
Flashing Gems: Innanzitutto le Flashing Gems hanno il 2% di probabilità di essere create singolarmente....e questo significa che si ha circa il 4% di possibilità di trovare almeno una Flashing Gem in una coppia di gemme. Significa che in media ogni 25 coppie di gemme una contiene una Flashing Gem....ecco perché sono molto meno rare del 2%! Impostando il config ad 1% oppure modificando il codice affinché la percentuale del 2% sia intesa "per coppia di gemme", probabilmente otterremo il risultato voluto...a meno che anche 1 Flash su 50 coppie sia troppo! Topazi rari: Inoltre, nel leggere il codice delle probabilità ho notato delle strane condizioni che rendono il topazio meno probabile delle altre gemme, circa 13.6% di probabilità contro il 16.3% delle altre gemme su un totale di 800.000 gemme. Il codice (in GemFactory) è il seguente: Codice:
public Gem createRandomGem() { int module = GEM_TYPES.length - 1; if(firstGemExtraction) { module = GEM_TYPES.length; firstGemExtraction = false; } int randomIndex = randomGenerator.extract(module); if(randomIndex >= nextToLastGemIndex) { randomIndex = (randomIndex + 1) % GEM_TYPES.length; } nextToLastGemIndex = lastGemIndex; lastGemIndex = randomIndex; resetChestExtraction(); return create(GEM_TYPES[randomIndex]); } Non ho ancora analizzato se la sua rimozione rompe qualche test.... Memory Leak: Nel fare i test sulle probabilità ho avuto occasione di creare parecchie gemme, ed ho quindi notato un consumo di circa 1 GB di RAM per creare 10.000 gemme....si tratta di ben 100kb a gemma Creavo le gemme con un questo codice: Codice:
for (int x= 0 ; x < 100000;x++) { Gem gemma = gemFactory.createRandomDroppable(); gemma.cleanup(); } Una volta raggiunto il limite della memoria RAM + swap su disco, Diamonds crashava con la finestrella di bugreport.. che appare 2 volte Ultima modifica di BlueDragon : 18-03-2006 alle 14:34. |
|
18-03-2006, 14:04 | #1042 |
Senior Member
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
|
Grandissimo, BD
Il problema della frequenza non è tanto nella percentuale, dato che a ridurla ulteriormente sarebbero TROPPO rare, quanto nel fatto che la randomizzazione dovrebbe essere controllata verso il basso (ovvero, ci vorrebbe un limite minimo per l'intervallo tra una flashing gem e l'altra). Diluire ulteriormente la sua occorrenza significa che in diverse partite potrebbe non saltare mai fuori, ed avremmo il problema opposto.
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam. |
18-03-2006, 14:33 | #1043 |
Senior Member
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
|
Molto probabilmente ho scovato un altro paio di bug.
Giocando ho preparato una crush da 4-5x ammucchiando diverse gemme e bauli. Dopo averla innescata, però, il contatore è arrivato ad un assurdo 8x (Astounding). Questo perchè molto probabilmente c'è un errore di fondo nell'implementazione del conteggio delle crush (e probabilmente è anche colpa di come abbiamo impostato storia e task): a rigor di logica, il contatore della lunghezza deve aumentare solo se l'evento scatenante di una cancellazione è stato un'altra cancellazione. Allo stato attuale, invece, il gioco considera come crush anche quando, posizionando una coppia di bauli, vengono cancellate due gemme di colore diverso già ferme. Questo non ha senso, dato che la seconda cancellazione non è conseguenza della prima. Quindi, bisogna vedere di sistemare il tutto in modo da considerare, per le crush, solo i pezzi che cadono per riempire i vuoti. Ne parlerò con Vicius, e probabilmente sarà uno dei task per il prossimo ciclo. L'altro bug fondamentale riguarda il contatore mostrato sotto l'area di gioco dell'avversario: dopo la (lunga) combo di cui sopra, il contatore in questione segnava il valore di 5. Avevo già notato delle incoerenze, e questo evento ne è stato la conferma. Direi che bisogna dare un'occhiata al suo funzionamento
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam. |
18-03-2006, 14:59 | #1044 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Topazi Rari:
Ho provato ad eliminare il codice in bold evidenziato nel mio post precedente, e l'unico test che fallisce è il seguente: Codice:
public void testRandomGemSequence() { Gem gem = factory.createRandomGem(); assertEquals("does not return Gem of type topaz", TOPAZ, gem.getType()); gem = factory.createRandomGem(); assertEquals("does not return Gem of type diamond", DIAMOND, gem .getType()); gem = factory.createRandomGem(); assertEquals("does not return Gem of type diamond", DIAMOND, gem .getType()); gem = factory.createRandomGem(); assertEquals("does not return Gem of type ruby", RUBY, gem.getType()); gem = factory.createRandomGem(); assertEquals("does not return Gem of type ruby", RUBY, gem.getType()); gem = factory.createRandomGem(); assertEquals("does not return Gem of type sapphire", SAPPHIRE, gem .getType()); }*/ Codice:
private final int randomIntArray[] = { 4, 0, 4, 0, 0, 1 }; Direi quindi che lo strano codice (forse rimasto da una precedente gestione in cui nello stesso array vi erano sia tipi di gemme che chest) può essere eliminato EDIT: Ho eliminato il codice in bold ed anche il metodo resetGemExtraction(), che in pratica non serviva più a nulla eliminato quell'if nel createRandomGem(). Committato. Ultima modifica di BlueDragon : 18-03-2006 alle 15:34. |
18-03-2006, 17:48 | #1045 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
Non ho idea di dove sia il problema, anche perché sto profiler mi è totalmente nuovo, ma a naso penso sia dovuto dalle routine di log o qualcosa che ha a che fare con le stringhe. 142000 AbstractStringBuilder, 182000 String. ciao |
|
18-03-2006, 17:49 | #1046 | |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
|
|
18-03-2006, 17:52 | #1047 | |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
le stringhe in java vengono passate per copia(l'ho scoperto meno di un mese fa, ed è da un anno che lavoro su java ) |
|
18-03-2006, 17:53 | #1048 | |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
|
|
18-03-2006, 17:58 | #1049 | |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
Codice:
public void testDoubleCrush() { //int delayCrush = config.getInteger("DelayBetweenCrushes"); insertAndUpdate(createGem(DIAMOND), 13, 1); insertAndUpdate(createGem(EMERALD), 13, 2); insertAndUpdate(createGem(DIAMOND_CHEST), 12, 1); insertAndUpdate(createGem(EMERALD_CHEST), 12, 2); insertAndStopGemsPair(); makeAllGemsFall(); controller.update(timer); assertEquals(2, grid.getNumberOfGems()); assertEquals(2, grid.getCrushedGemsCounter()); assertEquals(1, grid.getChainCounter()); } |
|
18-03-2006, 18:07 | #1050 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Trovata la magagna. Texture.cleanup non funziona.
Codice:
public void cleanup() { if(texID != 0) { final IntBuffer textures = BufferUtils.createIntBuffer(16); textures.put(texID); glDeleteTextures(textures); texID = 0; System.out.println("cancellata!"); } else { System.out.println("mierda!"); } loaded = false; } ciao |
18-03-2006, 18:11 | #1051 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12075
|
mmm..
e km mai si ritrova texid sempre a zero?
__________________
|
18-03-2006, 18:26 | #1052 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
ciao |
|
19-03-2006, 10:04 | #1053 | |
Senior Member
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
|
Quote:
Mi piace che dopo molto tempo che non hai guardato il codice ti e' stato relativamente facile andare a scovare il problema delle probabilita' dei topazi.
__________________
"We in the game industry are lucky enough to be able to create our visions" |
|
19-03-2006, 10:05 | #1054 | |
Senior Member
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" |
|
19-03-2006, 10:07 | #1055 | |
Senior Member
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
|
Quote:
Ecco cosa accade a non scrivere i test, si perde piu' tempo dopo
__________________
"We in the game industry are lucky enough to be able to create our visions" |
|
19-03-2006, 12:04 | #1056 | |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
Anche perche in quella zona ci starebbe bene un bel refactoring(fare una classe abstract Crush, e 2 implementazione, una per le crush da chest e una quelle da flash). Poi in grid si fa un metodo che itera sulla griglia, a cui si passa una di queste classi. non penso sia complicato, il piu saranno i test da modificare e aggiungere. |
|
19-03-2006, 12:20 | #1057 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
ciao |
|
19-03-2006, 12:22 | #1058 | |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Quote:
Ultima modifica di Bonfo : 19-03-2006 alle 12:26. |
|
19-03-2006, 15:27 | #1059 | |
Senior Member
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" |
|
19-03-2006, 17:04 | #1060 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
ciao |
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:23.