PDA

View Full Version : Thread dei Problemi


Pagine : 1 2 [3] 4 5 6 7

71104
31-12-2005, 14:01
Comunque non so se ve ne siete accorti, ma le gemme una volta che hanno colliso reagisconoa cnora all'input !!! :D ehm, hai fatto il mio task... -__-''

71104
31-12-2005, 14:02
Corretto... Credo inoltre che quando una gemma collide l'altra debba scendere accelerata...magari potrebbe fare parte di un nuovo task... eh già... *tap tap taratap*

cionci
31-12-2005, 14:48
ehm, hai fatto il mio task... -__-''
Azz...scusa...credevo fosse parte del task di DanieleC88 :D :stordita: :muro:

DanieleC88
31-12-2005, 14:53
La build machine sembra non dare segni di vita. Oggi pomeriggio la prendo a calci e vi dico qualcosa.
:rotfl:
ehm, hai fatto il mio task... -__-''
:rotfl: :rotfl: :rotfl: :rotfl: :rotfl:

71104
01-01-2006, 09:15
cionci, spero almeno che tu lo abbia fatto test driven e non come semplice refactoring... :Prrr:

71104
01-01-2006, 09:26
altro bug; guardate lo screenshot: le due gemme che ho cerchiato in rosso stavano cadendo in coppia, e quella più in alto ha colliso per prima; ma perché si è illuminata? :confused:
credo di aver capito l'errore, proverò ad evidenziarlo con un test e a correggerlo...

edit: lo stesso bug l'avevo notato anche prima, solo che prima mi era capitato che la gemma caduta più in basso era lecito che si fosse illuminata; invece stavolta non si sarebbe dovuta illuminare nessuna delle due...

71104
01-01-2006, 09:47
et voilà:

public void testAffinityCheckWithNonDroppedGem()
{
grid.insertGem(3, 3, gem1);
grid.insertGem(4, 3, gem2);
gem1.dropGem();
assertFalse(grid.isGemOfSameType(gem1, 1, 0));
}


:|

71104
01-01-2006, 09:49
et voilà:

public boolean isGemOfSameType(Gem gem, int rowOffset, int columnOffset)
{
int otherColumn = gem.getCellColumn() + columnOffset;
int otherRow = gem.getCellRow() + rowOffset;

if(!isValidCell(otherRow, otherColumn))
{
return false;
}

if(!isGemAt(otherRow, otherColumn))
{
return false;
}

Gem otherGem = getGemAt(otherRow, otherColumn);
if(otherGem.isFalling())
{
return false;
}

if(gem.isSameType(otherGem))
{
return true;
}

return false;
}


:|

peccato che ora quel test passa ma altri 5 ne falliscono :|

71104
01-01-2006, 09:55
commit, verde :)

(ultimamente sto diventando molto sintetico :p)

DanieleC88
01-01-2006, 12:28
(ultimamente sto diventando molto sintetico :p)
Come i capelli di Mike Buongiorno. :D :asd:

cionci
01-01-2006, 13:14
cionci, spero almeno che tu lo abbia fatto test driven e non come semplice refactoring... :Prrr:
Secondo te ? Kent Beck mi fa un baffo :D Tra l'altro sto leggendo il suo libro, notevole ;)

cionci
02-01-2006, 09:35
A voi funziona bene ilr epository ? A me va spesso in timeout !!! :(

thebol
02-01-2006, 10:47
A voi funziona bene ilr epository ? A me va spesso in timeout !!! :(

me too :(

fek
02-01-2006, 13:18
Sto finendo di prendere a calci la build machine proprio adesso e fra poco torna su.
Per il repository aspettiamo anta.

fek
02-01-2006, 16:13
... ancora un paio di calcioni ben assestati e arriva...

cionci
02-01-2006, 16:27
fek: ti piace se faccio diventare le funzioni di rotazione così ?

private void rotateSlaveGem(SlaveRotation rotation)
{
if ((pivotGem == null) || (slaveGem == null))
{
return;
}

moveSlaveGem(rotation.getFirstMoveDirection(slavePosition),
rotation.getSecondMoveDirection(slavePosition));

computeSlavePosition();
}



public void mirrorSlaveGem()
{
rotateSlaveGem(mirrorRotation);
}

public void rotateClockwise()
{
rotateSlaveGem(clockwiseRotation);
}

public void rotateCounterclockwise()
{
rotateSlaveGem(counterclockwiseRotation);
}

Tutti quegli if mi davano uggia :)

cionci
02-01-2006, 16:34
Ora che ci penso così come ho modificato il sorgente per ci vuole 2 secondi per fare in modo che la slave si posizioni nella prima cella disponibile fra quelle relative a quel tipo di rotazione !!! :D

fek
02-01-2006, 16:40
Vai pure, mi piace :)

La build machine e' tornata.

cionci
02-01-2006, 16:45
C'è un solo vincolo... Ora non si può mettere una slaveGem prima di aver messo una pivotGem...da un punto di vista logico mi sembra anche giusto...metto una gemam slave di cosa ? Di niente ?

fek
02-01-2006, 16:53
Hai carta bianca, io devo ancora leggere quella parte di codice.

VICIUS
02-01-2006, 18:29
fek: ti piace se faccio diventare le funzioni di rotazione così ?

private void rotateSlaveGem(SlaveRotation rotation)
{
if ((pivotGem == null) || (slaveGem == null))
{
return;
}

moveSlaveGem(rotation.getFirstMoveDirection(slavePosition),
rotation.getSecondMoveDirection(slavePosition));

computeSlavePosition();
}



public void mirrorSlaveGem()
{
rotateSlaveGem(mirrorRotation);
}

public void rotateClockwise()
{
rotateSlaveGem(clockwiseRotation);
}

public void rotateCounterclockwise()
{
rotateSlaveGem(counterclockwiseRotation);
}

Tutti quegli if mi davano uggia :)
Ho guardato il codice ma no mi piace. Secondo me era più chiaro prima con gli if che ora con HashMap.

ciao ;)

VICIUS
02-01-2006, 18:58
Piuttosto dobbiamo sistemare moveLeft/Right. Queste due funzioni sono un casino perché per ora grid può muovere una sola gemma alla volta e quindi ci sono problemi con le collisioni. Secondo me ci conviene aggiungere una funzione analoga ma in grado di spostare un GemsPair.

ciao ;)

cionci
02-01-2006, 19:16
Ho guardato il codice ma no mi piace. Secondo me era più chiaro prima con gli if che ora con HashMap.

Considera che se si va a fare quello che chiedeva Jocchan (ovvero di continuare a ruotare fino a quando non si trova una posizione libera con gli if diventa un macello)...

71104
02-01-2006, 19:57
anche io disapprovo gli if maniacali :p

thebol
02-01-2006, 21:02
approvo l'idea dell'hashmap(l'avevo avuta pure io oggi pome).


Non si potrebbe aggiungere in Movement anche la posizione di destinazione?
L'inizializzazione dei movement diventerebbe un po piu lunga, ma si risparmierebbe la computeSlavePosition(), a ogni rotaizione.

Questa ora sarebbe utilizzata solo da setSlaveGem(gem).
Spostando l'inserimento di gemspair (GridControl.insertNewGemsPair()) in gemsPair si potrebbe settare fissa la posizione Up e togliere del tutto la computeSlavePosition (o addirittura usarla come debug o test tramutandola in checkSlavePosition).

cionci
02-01-2006, 23:16
In prima istanza avevo messo la destinazione...ma se il movimento non può avvenire è chiaro che la posizione di destinazione non è quella giusta...quindi bisogna comunque rifare un check per vedere dove si trova la gemma slave...

La posizione di destinazione si potrebbe comunque mettere per verificare che lo spostamento sia avvenuto...e gestire quei casi in cui si vuole ciclare fino a quando non si trova una posizione ammissibile (oppure si sta fermi)...

Pensavo che magari a questo punto si ptorebbe estrarre la move con due direzioni da Grid e portarla in GemsPair...in tal caso si ptorebbe aggiornare coerentemente la posizione della gemma slave e non si dovrebbe richiamare computeSlavePosition... Anzi pensandoci bene mi sembra un'ottima soluzione...

VICIUS
03-01-2006, 01:08
Considera che se si va a fare quello che chiedeva Jocchan (ovvero di continuare a ruotare fino a quando non si trova una posizione libera con gli if diventa un macello)...
Non ci avevo pensato :muro:
Ok per le hashmap allora.

ciao ;)

fek
03-01-2006, 10:31
La build machine ha salutato di nuovo.

Ragazzi, per le prossime due o tre settimane dovete portare un po' di pazienza, perche' sto cambiando casa. Oltre allo spostare tutto, devo farmi riallacciare internet e rimontare la rete. Ci vorra' un po'.

Scusate per il disagio.

71104
03-01-2006, 15:03
fek, se vuoi quando hai tempo puoi provare a contattare antares e a chiedergli di uppare la build machine su Spartacus che sta (quasi :D) sempre up; questa idea me l'ha proposta lui stesso ieri e mi sembra buona no? :)

cover
04-01-2006, 03:04
Se serve anche io ho un pc sempre collegato (non penso che una build machine "mangi" molto di banda), più che altro è per non caricare ancora spartacus, che se non sbaglio già con subversion mangia un pò ^^

Antares88
04-01-2006, 13:07
Spartacus si è liberato da un paio di shard di ultima online, quindi non ci dovrebbero essere problemi a mettere li la build machine. Inoltre ci stanno per arrivare dei nuovi servers con i quali avremo banda illimitata ;)

Ci può pensare nsn3 anche stavolta quindi ;)

Nei prossimi giorni dovrei esserci abbastanza spesso su msn, messaggiate anche se mi vedete away cosi ci attrezziamo.

cover
04-01-2006, 16:28
Ok ;)

cionci
04-01-2006, 17:34
Si è rifatta viva la build machine !!! :D

fek
04-01-2006, 17:37
Si è rifatta viva la build machine !!! :D


*pant* *pant* e' stata una dura lotta... c'e' un perche' se ho fatto il programmatore e non l'esperto di rete... grrr

La buona notizia e' che dovrebbe stare su fino al 20, poi solo il Grande Budino Primordiale sa che cosa accadra'.

cionci
04-01-2006, 17:38
Cosa era successo ?

fek
04-01-2006, 17:40
Spartacus si è liberato da un paio di shard di ultima online, quindi non ci dovrebbero essere problemi a mettere li la build machine. Inoltre ci stanno per arrivare dei nuovi servers con i quali avremo banda illimitata ;)

Ci può pensare nsn3 anche stavolta quindi ;)

Nei prossimi giorni dovrei esserci abbastanza spesso su msn, messaggiate anche se mi vedete away cosi ci attrezziamo.

Grazie anta, ma preferirei avere la build machine sotto controllo per poterci giocare e modificare gli script di cruisecontrol senza aver paura di distruggere nsn3 :D

Subversion invece e' piu' critico perche' deve stare sempre su, quindi va benissimo da te. A questo proposito, parliamo una volta dei backup automatici di svn? Vorrei impacchettare ogni notte il tutto e magari spedirlo (via ftp o mail) al mio server, cosi' abbiamo sempre due copie.
A meno che Vicius non ci trovi un sistema automatico per replicare un repository di SVN e risolviamo il problema cosi'.

fek
04-01-2006, 17:42
Cosa era successo ?

Allora, e' successo che per qualche motivo e' andata giu' durante le mie vacanze e non e' tornata su. L'ho ripristinata ma poi il mio ancora per poco coinquilino mi ha chiesto la scheda di rete indietro. Allora ho installato la nuova scheda di rete wireless e ne ho approfittato per installare anche il nuovo router. Poi ho perso due giorni a configurare il router, le regole del nat per redirigere il traffico verso il server e imparare la differenza fra un gateway, la subnet mask e ipforwarding. Tradotto: altri due giorni a tirare opzioni a caso fino a che non si e' messa a funzionare. Non so il perche' e non voglio saperlo, odio le reti...

L'altro problema e' che sto cambiando casa (ho comprato casetta nella ridente Guildford! :D) e non so se e quando mi attivano internet nella nuova casa, quindi la buildmachine andra' giu' per un periodo indeterminato.

cionci
04-01-2006, 17:50
L'altro problema e' che sto cambiando casa (ho comprato casetta nella ridente Guildford! :D) e non so se e quando mi attivano internet nella nuova casa, quindi la buildmachine andra' giu' per un periodo indeterminato.
Azz...per allora dovremmo trovare una soluzione...

fek
04-01-2006, 18:03
Azz...per allora dovremmo trovare una soluzione...

CruiseControl non ha bisogno di installazione, posso semplicemente zippare e copiare tutto il folder. Magari per qualche settimana possiamo spostare tutto da Anta se vuole. E poi riporto la build machine qui quando ho risolto il trasloco. Che ne dite?

Jocchan
04-01-2006, 18:08
Se Anta è d'accordo credo sia la cosa migliore :)

cdimauro
05-01-2006, 07:08
Allora, e' successo che per qualche motivo e' andata giu' durante le mie vacanze e non e' tornata su. L'ho ripristinata ma poi il mio ancora per poco coinquilino mi ha chiesto la scheda di rete indietro. Allora ho installato la nuova scheda di rete wireless e ne ho approfittato per installare anche il nuovo router. Poi ho perso due giorni a configurare il router, le regole del nat per redirigere il traffico verso il server e imparare la differenza fra un gateway, la subnet mask e ipforwarding. Tradotto: altri due giorni a tirare opzioni a caso fino a che non si e' messa a funzionare. Non so il perche' e non voglio saperlo, odio le reti...

L'altro problema e' che sto cambiando casa (ho comprato casetta nella ridente Guildford! :D) e non so se e quando mi attivano internet nella nuova casa, quindi la buildmachine andra' giu' per un periodo indeterminato.
Mumble mumble. Guildford. Qualcosa mi dice che avrai un nuovo coinquilino che non ti farà scherzi del genere... :D

cionci
05-01-2006, 07:25
Mumble mumble. Guildford. Qualcosa mi dice che avrai un nuovo coinquilino che non ti farà scherzi del genere... :D
E mo so cazzi... :D

Gica78R
05-01-2006, 13:08
Ciao.

Sto cercando di fare il check-out ex novo di tutto il progetto, ma svn mi da un errore di connessione rifiutata :( Ci sono problemi o forse e' cambiato l'indirizzo del repository?

Grazie

fek
05-01-2006, 13:11
Ciao.

Sto cercando di fare il check-out ex novo di tutto il progetto, ma svn mi da un errore di connessione rifiutata :( Ci sono problemi o forse e' cambiato l'indirizzo del repository?

Grazie

Il server di Subversion e' giu'. A questo proposito, ho fatto un refactoring relativamente pesante di Input, Keyboard e test relativi: non toccate quel codice fino a che non faccio il commit altrimenti il merge non sara' banale.

Gica78R
05-01-2006, 13:17
...non toccate quel codice fino a che non faccio il commit altrimenti il merge non sara' banale.

Beh, io non tocco niente di sicuro! :D

Jocchan
05-01-2006, 13:18
SVN è di nuovo up ;)

71104
05-01-2006, 13:51
Gica78R!! quanto tempo!! :D
betornato tra noi!!
hai visto che figata che sta venendo il giochino?? :D

btw, ho notato che qualcuno ha impostato la ripetizione dei tasti a un valore troppo lento... andava meglio prima secondo me.

cionci
05-01-2006, 14:48
btw, ho notato che qualcuno ha impostato la ripetizione dei tasti a un valore troppo lento... andava meglio prima secondo me.
L'ha scelta Jocchan...questo perchè le rotazioni avvenivano troppo velocemente...
Ha detto che al limite decideremo dopo di impostare una ripetizione diversa per le rotazioni...

cionci
05-01-2006, 14:50
Il server di Subversion e' giu'. A questo proposito, ho fatto un refactoring relativamente pesante di Input, Keyboard e test relativi: non toccate quel codice fino a che non faccio il commit altrimenti il merge non sara' banale.
Non l'avevi già fatto un refactoring molto pesante di Input e Keyboard ?!?!?

Gica78R
05-01-2006, 15:33
Gica78R!! quanto tempo!! :D
betornato tra noi!!


Grazie! Ero impegnato a prendere 18 a Linguaggi e sistemi formali... :O
Ora sto lavorando per prendere un altro 18 a Teoria dei sistemi, e poi mi son tolto dalle palle gli esami noiosi... (non che LSF fosse noioso, ma...)

hai visto che figata che sta venendo il giochino?? :D

Non ho mai avuto modo di vederlo in esecuzione... Su Mac non funza, e su Linux non avevo il DRI abilitato. Ora ho risolto...
Appena lo scarico ti fo sapere che ne penso :) (e magari guardo che c'e' scritto nei sorgenti, se ci capiso qualcosa... :bimbo: )

fek
05-01-2006, 16:45
Non l'avevi già fatto un refactoring molto pesante di Input e Keyboard ?!?!?

Ne ho fatto un altro :P

^TiGeRShArK^
05-01-2006, 18:06
Mumble mumble. Guildford. Qualcosa mi dice che avrai un nuovo coinquilino che non ti farà scherzi del genere... :D
:rotfl:
lo bastonerà direttamente quando si avvicina al pc al di fuori delle ore di lavoro :D

Gica78R
05-01-2006, 23:36
Finalmente anche da me funziona qualcosa: si apre una finestra nera :( (comunque meglio di niente)
E' un problema gia' accaduto; come lo avete risolto?


org.lwjgl.opengl.OpenGLException: Invalid value (1281)
at org.lwjgl.opengl.Util.checkGLError(Util.java:56)
at org.lwjgl.opengl.Display.update(Display.java:567)
at it.diamonds.engine.video.DisplayImplementation.update(DisplayImplementation.java:71)
at it.diamonds.engine.Engine.updateDisplay(Engine.java:71)
at it.diamonds.Game.render(Game.java:218)
at it.diamonds.Game.gameLoop(Game.java:95)
at it.diamonds.Game.main(Game.java:77)


'notte!

fek
06-01-2006, 12:35
La build e' rotta:

junit.framework.AssertionFailedError: expected:<32> but was:<32.0>
at it.diamonds.tests.TestGem.testGetGemSize(TestGem.java:26)

Consiglio di modificare getGemSize() di modo da tornare un int e non un float.

fek
06-01-2006, 12:50
Fixed. Grazie :)

fek
06-01-2006, 12:54
public void move(Direction direction)
{

switch (direction)
{
case Up:
moveByRow(-1);
break;

case Down:
moveByRow(+1);
break;

case Left:
moveByColumn(-1);
break;

case Right:
moveByColumn(+1);
break;

default: // codice irraggiungibile ma checkstyle � cocciuto
throw new RuntimeException();
}
}



E che cos'e' questo commento in italiano e l'eccezione non coperta da alcun test? :p

(Vi tengo ancora piu' d'occhio ora)

cionci
06-01-2006, 13:00
L'eccezione non è testabile... E' checkstyle che vuole ad ogni costo il default case...
PS: non sono stato io :)

fek
06-01-2006, 13:04
L'eccezione non è testabile... E' checkstyle che vuole ad ogni costo il default case...
PS: non sono stato io :)

Hmmm... cerchiamo una strada alternativa?

cionci
06-01-2006, 13:05
Tipo ? Gli if ?

VICIUS
06-01-2006, 13:27
Hmmm... cerchiamo una strada alternativa?
Che ne dite di disabilitare questo assurdo controllo in checkstyle? Nei miei refactoring ne ho dovuti inserire tre di questi "default". Nel nostro caso ha poco senso visto che il compilatore java ci forza ad usare solo valori presenti nella enum e quindi non è neanche possibile testarla.

ciao ;)

fek
06-01-2006, 13:40
Che ne dite di disabilitare questo assurdo controllo in checkstyle? Nei miei refactoring ne ho dovuti inserire tre di questi "default". Nel nostro caso ha poco senso visto che il compilatore java ci forza ad usare solo valori presenti nella enum e quindi non è neanche possibile testarla.

ciao ;)

Ok, disabilitalo.

VICIUS
06-01-2006, 13:44
Ok, disabilitalo.
Controllo disabilitato. E le eccezioni cancellate.

ciao ;)

thebol
06-01-2006, 14:13
cosa ne dite di
public void moveLeft()
{
move(Direction.Left);
}


public void moveRight()
{
move(Direction.Right);
}


private void move(Direction dir)
{
if(pivotGem == null)
{
return;
}

if(slaveGem == null)
{
grid.moveGem(pivotGem, dir);
return;
}

boolean pivotCanMove = grid.gemCanMove(pivotGem, dir);
boolean slaveCanMove = grid.gemCanMove(slaveGem, dir);

if (slaveCanMove && pivotCanMove)
{
grid.moveGem(slaveGem, dir);
grid.moveGem(pivotGem, dir);
}
else if (isOrizontal())
{
if (slaveCanMove)
{
grid.moveGem(slaveGem, dir);
grid.moveGem(pivotGem, dir);
}
else if (pivotCanMove)
{
grid.moveGem(pivotGem, dir);
grid.moveGem(slaveGem, dir);
}
}
}


private boolean isOrizontal()
{
return slavePosition != Position.Up && slavePosition != Position.Down;
}


al posto dei molto simili moveLeft() e moveRight() attuali(in gemspair) ?

thebol
06-01-2006, 14:14
isOrizontal l'ho creato perche se no la complessita ciclotomatica era 9(e tutt'ora rimane 8)

fek
06-01-2006, 14:23
isOrizontal l'ho creato perche se no la complessita ciclotomatica era 9(e tutt'ora rimane 8)

Troppo alta, quella catena di if non mi piace proprio.

cionci
06-01-2006, 14:23
Prova a vedere se basta solo questo:

private void move(Direction dir)
{
if(pivotGem == null)
{
return;
}

if(slaveGem == null)
{
grid.moveGem(pivotGem, dir);
return;
}

boolean pivotCanMove = grid.gemCanMove(pivotGem, dir);
boolean slaveCanMove = grid.gemCanMove(slaveGem, dir);

if (slaveCanMove)
{
grid.moveGem(slaveGem, dir);
grid.moveGem(pivotGem, dir);
}
else if (pivotCanMove)
{
grid.moveGem(pivotGem, dir);
grid.moveGem(slaveGem, dir);
}
}

cionci
06-01-2006, 16:00
Il meglio che sono riuscito a fare è questo:

private boolean gemsAreHorizontal()
{
return slavePosition != Position.Left && slavePosition != Position.Right;
}


private void move(Direction direction)
{
if(pivotGem == null)
{
return;
}

if(slaveGem == null)
{
grid.moveGem(pivotGem, direction);
return;
}

boolean slaveCanMove = grid.gemCanMove(slaveGem, direction);
boolean pivotCanMove = grid.gemCanMove(pivotGem, direction);

if(gemsAreHorizontal() && !(slaveCanMove && pivotCanMove))
{
return;
}

if(slaveCanMove)
{
grid.moveGem(slaveGem, direction);
grid.moveGem(pivotGem, direction);
}
else if(pivotCanMove)
{
grid.moveGem(pivotGem, direction);
grid.moveGem(slaveGem, direction);
}
}


public void moveRight()
{
move(Direction.Right);
}


public void moveLeft()
{
move(Direction.Left);
}

cionci
06-01-2006, 16:30
Facendo una piccola modifica a Grid.gemCanMove (vi pare lecita ? Una gemma null non può essere mossa):

public boolean gemCanMove(Gem gem, Direction direction)
{
if(gem == null)
{
return false;
}

switch (direction)
{
case Up:
return gemCanMoveTo(gem.getCellRow() - 1, gem.getCellColumn());

case Down:
return gemCanMoveTo(gem.getCellRow() + 1, gem.getCellColumn());

case Left:
return gemCanMoveTo(gem.getCellRow(), gem.getCellColumn() - 1);

case Right:
return gemCanMoveTo(gem.getCellRow(), gem.getCellColumn() + 1);
}

return false;
}

Ottengo questa situazione:

private boolean gemsAreHorizontal()
{
return slavePosition == Position.Left || slavePosition == Position.Right;
}


private void move(Direction direction)
{
if(grid.gemCanMove(pivotGem, direction))
{
grid.moveGem(pivotGem, direction);
grid.moveGem(slaveGem, direction);
}
else if(grid.gemCanMove(slaveGem, direction) && gemsAreHorizontal())
{
grid.moveGem(slaveGem, direction);
grid.moveGem(pivotGem, direction);
}
}


Che ne pensate ?

fek
06-01-2006, 17:03
A occhio secondo me la logica di gemCanMove() puo' essere spostata dentro Gem o una classe simile. Tutti quegli if mi sanno tanto di polimorfismo.
Mi puzza un po', ma al momento non saprei dare una soluzione piu' semplice e elegante.

71104
06-01-2006, 18:41
polimorfismo? mumble... :mbe:
magari si potrebbero derivare due classi da Gem: PivotGem e SalveGem, con relativi metodi virtuali canMove che implementano il metodo astratto Gem.canMove...

Gica78R
06-01-2006, 18:46
Di nuovo problemi con svn??? Stavo facendo un update... il download si e' fermato e non ne vuole piu' sapere. Che fo? Chiudo tutto e chissene?

thebol
06-01-2006, 19:45
polimorfismo? mumble... :mbe:
magari si potrebbero derivare due classi da Gem: PivotGem e SalveGem, con relativi metodi virtuali canMove che implementano il metodo astratto Gem.canMove...

oppure invece di usare come Direction degli enum, si creano 4 classi con getXdelta e getYdelta

71104
06-01-2006, 19:55
oppure invece di usare come Direction degli enum, si creano 4 classi con getXdelta e getYdelta oppure ancora al posto di una enum si usano due interi, delta x e delta y appunto; unico problema: il dominio della funzione si allarga (diventa possibile specificare delta diversi da +-1), ma se noi non chiamiamo mai quella funzione con delta diversi da +-1 la funzione non darà mai comportamenti strani...

thebol
06-01-2006, 19:56
private boolean gemsAreHorizontal()
{
return slavePosition == Position.Left || slavePosition == Position.Right;
}


private void move(Direction direction)
{
if(grid.gemCanMove(pivotGem, direction))
{
grid.moveGem(pivotGem, direction);
grid.moveGem(slaveGem, direction);
}
else if(grid.gemCanMove(slaveGem, direction) && gemsAreHorizontal())
{
grid.moveGem(slaveGem, direction);
grid.moveGem(pivotGem, direction);
}
}


Che ne pensate ?

in teoria questo codice non dovrebbes splittare le gemme se la slave e in posizione DOWN e spostiamo a sinistra?E possibile che la pivot si possa muovere mentre la slave sia bloccata.

Se hai fatto girare i test con sto codice e ti ha dato verde mi sa che ce da aggiungere un test.

thebol
06-01-2006, 20:16
oppure ancora al posto di una enum si usano due interi, delta x e delta y appunto; unico problema: il dominio della funzione si allarga (diventa possibile specificare delta diversi da +-1), ma se noi non chiamiamo mai quella funzione con delta diversi da +-1 la funzione non darà mai comportamenti strani...

possibile, raddoppierebbero i parametri da passare, ma penso sia accettabile

fek
06-01-2006, 22:43
oppure invece di usare come Direction degli enum, si creano 4 classi con getXdelta e getYdelta

Si' stavamo pensando ad un approccio simile. Invece di quattro classi, trasformiamo Direction in una classe e la istanziamo quattro volte con le quattro direzioni.

DanieleC88
07-01-2006, 11:25
private boolean isOrizontal()
E la H? :D

Jocchan
07-01-2006, 12:54
E la H? :D

Dettagli, dettagli :Prrr:
I bug elencati prima (gemme che restano immobili anche se non c'era nulla sotto, etc.) sono stati tutti risolti?

thebol
07-01-2006, 23:12
Dettagli, dettagli :Prrr:
I bug elencati prima (gemme che restano immobili anche se non c'era nulla sotto, etc.) sono stati tutti risolti?
confermo il bug sengalato prima:
se metti la slave in posizione down le 2 gemme si splittano.

ora sono un po troppo suglio per scrivere il test che fallisce e sistemare il codice :\

cionci
07-01-2006, 23:45
Ho visto...purtroppo è mancato il test per quella situazione... Io non ci posso pensare...lascio a voi ;)

thebol
08-01-2006, 09:29
Ho visto...purtroppo è mancato il test per quella situazione... Io non ci posso pensare...lascio a voi ;)

sistemato.
io ho sul mio pc la build rotta per sto errore
BUILD FAILED
F:\workspace_Crystal\Diamonds\build.xml:76: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK

il checkstyle l'ha passato prima, e junit l'ho testato con eclipse percui su svn la build non dovrebbe essere rotta

fek
08-01-2006, 11:35
thebol, metti il tuo nome quando fai un commit.

Jocchan
08-01-2006, 11:49
Che diavolo? L'ultima build mi dà subito exception e si chiude..

fek
08-01-2006, 13:02
Che diavolo? L'ultima build mi dà subito exception e si chiude..

Puoi lanciarla da un command prompt e dirci l'eccezione?

Piccola nota: in futuro avremo bisogno anche di un rudimentale catcher di eccezioni che salvi le informazioni almeno su un file di testo.

DanieleC88
08-01-2006, 15:33
Piccola nota: in futuro avremo bisogno anche di un rudimentale catcher di eccezioni che salvi le informazioni almeno su un file di testo.
Non dovrebbe essere troppo difficile, o sbaglio?

71104
08-01-2006, 16:45
Non dovrebbe essere troppo difficile, o sbaglio? se si avvia il programma eseguibile basta usare l'operatore > della shell (c'è sia su Windows che su Linux); se invece si avvia dal bat basta modificare il bat e aggiungere PAUSE alla fine :p
piuttosto quello che dovremmo fare è catturare a monte (cioè nel main) qualsiasi eccezione altrimenti non gestita, e gestirla con una piccola interfaccia tipo "invio segnalazione errori" che spedisce a staff(at)diamondcrush(dot)net una mail contenente il nome esatto del modello di scheda grafica (casomai lo ricaviamo da una libreria esterna tramite JNI), il sistema operativo in uso, il nome dell'eccezione e il dump del call stack.

VICIUS
08-01-2006, 18:00
se si avvia il programma eseguibile basta usare l'operatore > della shell (c'è sia su Windows che su Linux); se invece si avvia dal bat basta modificare il bat e aggiungere PAUSE alla fine :p
piuttosto quello che dovremmo fare è catturare a monte (cioè nel main) qualsiasi eccezione altrimenti non gestita, e gestirla con una piccola interfaccia tipo "invio segnalazione errori" che spedisce a staff(at)diamondcrush(dot)net una mail contenente il nome esatto del modello di scheda grafica (casomai lo ricaviamo da una libreria esterna tramite JNI), il sistema operativo in uso, il nome dell'eccezione e il dump del call stack.
C'è già una finestrella che fa il catch di tutte le eccezioni e mostra un messaggio. Ora scrivo pure il codice per creare il file da mandare.

ciao ;)

71104
08-01-2006, 18:16
il tasto Esc non funziona più :|
l'avete tolto apposta o è un problema?

Jocchan
08-01-2006, 18:42
il tasto Esc non funziona più :|
l'avete tolto apposta o è un problema?
Non so se era stato tolto apposta, ma non è un problema (lo useremo per altro ;) )

VICIUS
08-01-2006, 18:48
il tasto Esc non funziona più :|
l'avete tolto apposta o è un problema?
Game.java ha urgente bisogno di un bel refactoring e qualche test. Queste sono cose che non dovrebbero succedere :(

ciao ;)

fek
08-01-2006, 18:52
il tasto Esc non funziona più :|
l'avete tolto apposta o è un problema?

Tolto io di proposito durante il refactoring di Input. Dovrebbe essere gestito via CommandHandler. Ho dimenticato di comunicarlo, scusatemi. Poi credo di aver creato io il casino di Jocchan con la versione release di Diamonds. Lo risolvo adesso.

Comunque abbiamo bisogno di testare la classe Game e direi che sara' una Storia del prossimo Ciclo.

fek
08-01-2006, 19:34
La build machine e' definitivamente defunta. RIP>

VICIUS
08-01-2006, 19:46
C'è già una finestrella che fa il catch di tutte le eccezioni e mostra un messaggio. Ora scrivo pure il codice per creare il file da mandare.

ciao ;)
Committato.
Funziona tutto tranne lo stacktrace. Purtroppo non ho trovato un modo decente per stamparlo sul file.

ciao ;)

fek
08-01-2006, 20:51
import java.io.*;

public class TestStack2String {
public static void main(String s[]){
try {
// force an exception for demonstration purpose
Class.forName("unknown").newInstance();
// or this could be changed to:
// throw new Exception();

}
catch (Exception e) {
System.out.println(stack2string(e));
}
}

static public String stack2string(Exception e) {
try {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
return "------\r\n" + sw.toString() + "------\r\n";
}
catch(Exception e2) {
return "bad stack2string";
}
}
}

Ha senso questa roba?

71104
08-01-2006, 21:56
VICIUS, ho letto la funzione writeBugReport, ma una cosa importante che manca e che secondo me sarebbe molto utile per eventuali diagnostiche sarebbe il nome della scheda grafica (mi riferisco al nome come appare nell'elenco delle periferiche accessibile dal pannello di controllo di win).
non so come fare per fetcharlo, ma per quanto riguarda Windows posso provare ad informarmi, per in Linux invece non so...
che ne pensi?

VICIUS
08-01-2006, 22:50
VICIUS, ho letto la funzione writeBugReport, ma una cosa importante che manca e che secondo me sarebbe molto utile per eventuali diagnostiche sarebbe il nome della scheda grafica (mi riferisco al nome come appare nell'elenco delle periferiche accessibile dal pannello di controllo di win).
non so come fare per fetcharlo, ma per quanto riguarda Windows posso provare ad informarmi, per in Linux invece non so...
che ne pensi?
Sarebbe interessante differenziare il tipo di informazioni a seconda del sistema operativo. Ad esempio avere l'output di glxinfo sarebbe utilissimo. E sapere cosa ritorna ldd lib/linux/*.so visto che le lib sono la causa del 90% dei problemi per ora. Come anche l'elenco delle risoluzioni possibili che viene stampato durante l'avvio. Tutte cose che non ho la più pallida idea di come ottenere :muro:

ciao ;)

cionci
08-01-2006, 23:00
Vi va bene questo come output ?

Display Adapter Driver: ati2dvag 6.14.10.6553

cionci
08-01-2006, 23:01
out.write("Display Adapter Driver: " + org.lwjgl.opengl.Display.getAdapter()
+ " " + org.lwjgl.opengl.Display.getVersion() + "\n\n");

cionci
08-01-2006, 23:11
Avete provato il gioco in full screen ?!?!? E' una figata :D

DanieleC88
09-01-2006, 13:04
Avete provato il gioco in full screen ?!?!? E' una figata :D
:eekk: :eekk:
COME?
:eekk: :eekk:

DanieleC88
09-01-2006, 13:05
piuttosto quello che dovremmo fare è catturare a monte (cioè nel main) qualsiasi eccezione altrimenti non gestita.
Io intendevo quello. :D

cionci
09-01-2006, 13:10
:eekk: :eekk:
COME?
:eekk: :eekk:
Vai in DiplayImplementation.initDisplay e modifica a true il parametro passato a setFullScreen...

DanieleC88
09-01-2006, 14:57
Vai in DiplayImplementation.initDisplay e modifica a true il parametro passato a setFullScreen...
Ah, ecco... pensavo fosse stata inserita un'apposita scorciatoia nel gioco. ;)

Bonfo
09-01-2006, 21:36
Diamonds\src\it\diamonds\Game.java:139:12: 'private' modifier out of order with the JLS suggestions.

cionci
09-01-2006, 21:57
Corretto ;)

fek
10-01-2006, 16:49
Appena riesco a recuperare un monitor in ufficio rimetto a posto la build machine. Che brutta la vita senza :(

cionci
10-01-2006, 21:13
Non la gestisci da remoto con VNC la macchina ?!?!?

fek
10-01-2006, 21:23
Non la gestisci da remoto con VNC la macchina ?!?!?

Si', ma la maledetta ha deciso che non vede piu' la rete. Quella vive di vita propria.

Ufo13
12-01-2006, 18:49
Lancio ant e mi da:

instrument:

BUILD FAILED
java.lang.NoClassDefFoundError: org/apache/log4j/Category

thebol
12-01-2006, 20:27
Lancio ant e mi da:

instrument:

BUILD FAILED
java.lang.NoClassDefFoundError: org/apache/log4j/Category

log4j :love:
direi che manca il jar del log4j, potresti scaricarlo dal sito, oppure aspettare che qualcuno lo uppi)
mo faccio sync e vedo

fek
12-01-2006, 21:13
Lo avevo uppato io come parte di cobertura, non l'ho mai installato esplicitamente. Infatti con la build machine (RIP) aveva funzionato al primo colpo. Ci deve essere un altro problema.

thebol
12-01-2006, 22:01
io ho fatto sync, ma devo tirare giu l'sdk di java5 per fare girare ant, e con 56k finiro tardi...

fek
13-01-2006, 19:12
E' tornata la build machine.

fek
13-01-2006, 21:05
Sono malato. Porto a casa la macchina con l'R580 nuovo di pacca e che ci lancio? 3DMark2005? Naaaaah. BW2? Naaaaah.... Diamonds! E ci gira bene :D

Jocchan
13-01-2006, 21:31
E' tornata la build machine.

Olèèèèèèèèèèèèèèèèèèèèèèè :sofico:

Bonfo
13-01-2006, 22:16
Ahia!!!!

TestGemPair : 1 Failure, 3 Errors !!! :muro: :muro:

Aggiornato dal repository.

fek
13-01-2006, 22:36
Tutto pulito qui e la build machine e' verde. C'e' qualcosa di strano, quale test ti fallisce?

Ufo13
14-01-2006, 09:48
Io continuo ad avere quel problema con ANT... Sono l'unico?

fek
14-01-2006, 10:39
Io continuo ad avere quel problema con ANT... Sono l'unico?

Prova a riscaricare trunk dal server.

Ufo13
14-01-2006, 11:22
nada...

fek
14-01-2006, 11:29
guarda se in lib/cobertura/lib hai una directory log4j

DanieleC88
14-01-2006, 12:50
Sono malato. Porto a casa la macchina con l'R580 nuovo di pacca e che ci lancio? 3DMark2005? Naaaaah. BW2? Naaaaah.... Diamonds! E ci gira bene :D
Questa è una bella notizia (non che sei malato, ma che Diamonds gira bene :D)! ;)

Ufo13
14-01-2006, 13:10
fek: ce l'ho....

io ant lo lancio con "ant dist" se può essere utile

fek
14-01-2006, 13:13
fek: ce l'ho....

io ant lo lancio con "ant dist" se può essere utile

Lancia semplicemente 'ant' per ora. Non ti serve generare la copertura. Poi troviamo la soluzione ma almeno puoi lavorare.

cisc
14-01-2006, 22:20
Ragazzi, non so più che pesci pigliare:



OS: Linux
Version: 2.6.14.3
Architecture: amd64

VM Vendor: Sun Microsystems Inc.
Version: 1.5.0_06

Class Path: /home/dany/javaprojects/Diamonds/bin:/home/dany/javaprojects
/Diamonds/lib/junit.jar:/home/dany/javaprojects/Diamonds/lib/easymock.jar:/home/dany/javaprojects
/LWJGL/libs/lwjgl_util.jar:/home/dany/javaprojects/LWJGL/libs/lwjgl.jar:/home/dany/javaprojects/LWJGL/libs/lwjgl_devil.jar
JNI Library Path: /home/dany/javaprojects/LWJGL/libs/linux

Exception: class it.diamonds.engine.video.TextureNotFoundException
Message: Unable to find the texture data/gfx/common/score_16x24.png
Display Adapter Driver: null null

Stacktrace:
it.diamonds.engine.video.TextureNotFoundException: Unable to find the texture data/gfx/common/score_16x24.png
at it.diamonds.engine.video.Texture.loadTextureFromFile(Texture.java:106)
at it.diamonds.engine.video.Texture.<init>(Texture.java:79)
at it.diamonds.engine.video.Number.<init>(Number.java:28)
at it.diamonds.engine.video.Number.create16x24(Number.java:63)
at it.diamonds.Game.createScore(Game.java:213)
at it.diamonds.Game.main(Game.java:73)



mi sono ricompilato lwjgl per amd64, ho compilato anche devil, ho verificato tutte le dipendenze, installato tutte le librerie possibili con la parola png compresa, non so più cosa fare, con le jpg non ho nessun problema, qualcuno ha qualche suggerimento?

DanieleC88
15-01-2006, 09:13
http://www.phdcomics.com/comics/archive/phd011406s.gif

mi sono ricompilato lwjgl per amd64, ho compilato anche devil, ho verificato tutte le dipendenze, installato tutte le librerie possibili con la parola png compresa, non so più cosa fare, con le jpg non ho nessun problema, qualcuno ha qualche suggerimento?
Ah, alla fine ce l'hai fatta! Uhm. È strano che dica "TextureNotFound", come se non trovasse proprio il file... non mi viene in mente niente se non un errore nel percorso (cosa abbastanza improbabile, comunque). :(

Bonfo
15-01-2006, 15:43
[junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0,015 sec
[junit] Testcase: testAddGemWithBonus(it.diamonds.tests.gems.TestBagOfGems): Caused an ERROR
[junit] it.diamonds.gems.BagOfGems: method <init>()V not found
[junit] java.lang.NoSuchMethodError: it.diamonds.gems.BagOfGems: method <init>()V not found
[junit] at it.diamonds.tests.gems.TestBagOfGems.testAddGemWithBonus(TestBagOfGems.java:12)

BUILD FAILED
D:\Valerio\workspace\Diamonds\build.xml:100: Tests failed

fek
15-01-2006, 15:47
La build machine e' pulita e sulla mia macchina la build e' pulita. Puoi controllare se e' un problema locale?

Bonfo
15-01-2006, 16:06
Sto uscendo...
...farò un replace del progetto epoi ti so dire ;)
CIAO

^TiGeRShArK^
15-01-2006, 16:28
mmmmmmmm...
anche a me sembra un problema di percorso..
sicuro di avere impostato in maniera corretta il classpath?
a me lo stesso problema lo dava quando avevo il classpath incasinato....oddio...dire incasinato è un eufemismo.... avevo una decina di righe nel classpath! :D

cisc
15-01-2006, 16:52
non è un problema di percorso, anche perchè l'unica jpg (back000.jpg) la carica, sulle png ho il problema, adesso sono passato anche a x.org, ma resta il problema:(

Bonfo
15-01-2006, 23:15
Build ok.
Ho fatto il replace e tutto ok...chissa che gli era preso ?? :what:

cionci
16-01-2006, 00:05
Sono malato. Porto a casa la macchina con l'R580 nuovo di pacca e che ci lancio? 3DMark2005? Naaaaah. BW2? Naaaaah.... Diamonds! E ci gira bene :D
Se non sai che farci passalo a me :D

thebol
16-01-2006, 07:21
ps.

se avete problemi strani, provate come ultima chance rebuild all o clean all di eclipse. a me ieri non mi trovava piu nessuna classe del progetto(tutto rosso), con un clean ho rimesso a posto tutto :)

fek
17-01-2006, 09:21
ps.

se avete problemi strani, provate come ultima chance rebuild all o clean all di eclipse. a me ieri non mi trovava piu nessuna classe del progetto(tutto rosso), con un clean ho rimesso a posto tutto :)

Ma pensa che stupido, io facevo un check out completo del progetto tutte le volte. :doh:

Grazie della soluzione.

cionci
17-01-2006, 11:25
Stavo facendo un veloce refactoring dei KeyHandler e ho notato che mettendo volntariamente un errore l'errore non veniva rilevato dai test ed anche il report di copertura diceva che il codice era tutto coperto...addirittura ho aggiunto un nuovo metodo a AbstractKeyEventHandler e risultava coperto, nonostante il metodo fosse nuovo :confused:

fek
17-01-2006, 11:44
Stavo facendo un veloce refactoring dei KeyHandler e ho notato che mettendo volntariamente un errore l'errore non veniva rilevato dai test ed anche il report di copertura diceva che il codice era tutto coperto...addirittura ho aggiunto un nuovo metodo a AbstractKeyEventHandler e risultava coperto, nonostante il metodo fosse nuovo :confused:

E' possibile che sia un bug del tool di coverage. Puoi aggiungere un test che copra il bug che hai introdotto volontariamente?

Scusa se non ti ho risposto, ma stavo assaporando la gioia di lavorare senza unit test perdendo due ore per fixare un bug che sarebbe stato trovato in due secondi netti avendo i test :)

cionci
17-01-2006, 12:20
Fatto ;)

Ho aggiunto questi test a TestGridReactionToInput:



public void testCurrentRepeatDelayInitialValue()
{
AbstractKeyEventHandler handler = inputReactor.getKeyHandler(KeyEvent.LEFT);

handler.setNormalRepeatDelay(1500);

assertEquals(1500, handler.getCurrentRepeatDelay());
}


public void testCurrentRepeatDelayAfterFirstCommand()
{
AbstractKeyEventHandler handler = inputReactor.getKeyHandler(KeyEvent.LEFT);

handler.setFastRepeatDelay(1000);
handler.setNormalRepeatDelay(1500);

generateKeyPressed(KeyEvent.LEFT);

assertEquals(1500, handler.getCurrentRepeatDelay());
}


public void testCurrentRepeatDelayAfterSecondCommandRepeat()
{
AbstractKeyEventHandler handler = inputReactor.getKeyHandler(KeyEvent.LEFT);

handler.setFastRepeatDelay(1000);
handler.setNormalRepeatDelay(1500);

generateKeyPressed(KeyEvent.LEFT);
inputReactor.reactToInput(timer);

timer.advance(handler.getCurrentRepeatDelay() + 1);

inputReactor.reactToInput(timer);

assertEquals(1000, handler.getCurrentRepeatDelay());
}

Il terzo test era l'errore che avevo messo volontariamente...
Ora è la AbstractKeyEventHandler stessa a settare autonomamente il modo di ripetizione attuale...prima era InputReactor, ma non aveva senso secondo me... Così ho anche semplificato InputReactor.handleKeyRepetition ;)
Ho eliminato la duplicazine fra repeated e fastRepetitionMode...e tolto un po' di metodi a questo punto inutili da AbstractKeyEventHandler...
Ah, ho elimnato l'interfaccia KeyEventHandler...secondo me inutile a questo punto (visto che è AbstractKeyEventHandler a fare da interfaccia per gli handler)...poi se la volete ripristinare per me va bene...

fek
17-01-2006, 12:25
Ottimo.

AbstractEventHandler e' un'interfaccia pura o una classe?
Nel primo caso va bene cosi', altrimenti preferisco reintrodurre l'interfaccia.

cionci
17-01-2006, 12:28
E' una classe astratta... Secondo me è meglio così...l'interfaccia in questo caso serviva a poco...anzi è la classe astratta stessa (con metodi astratti) che obbligava gli handlers a implementare un data interfaccia...

fek
17-01-2006, 12:39
Voglio comunque avere un'interfaccia :)

Puoi ripristinarla per favore?

Ufo13
17-01-2006, 12:59
perchè vuoi l'interfaccia? Chiedo per sapere :)

fek
17-01-2006, 13:10
perchè vuoi l'interfaccia? Chiedo per sapere :)

Perche' stiamo programmando molto Interface-based: quasi ogni sistema che abbiamo viene visto all'esterno come un'interfaccia pura. Semplifica di molto il testing e anche lo sviluppo.

cionci
17-01-2006, 13:40
Perche' stiamo programmando molto Interface-based: quasi ogni sistema che abbiamo viene visto all'esterno come un'interfaccia pura. Semplifica di molto il testing e anche lo sviluppo.
Non lo so, non mi convince ancora....comunque la ripristino... Ad esempio perchè c'è bisogno dell'interfaccia lì, ma non c'è interfaccia, che so, su Sprite ?

^TiGeRShArK^
17-01-2006, 13:43
Ma pensa che stupido, io facevo un check out completo del progetto tutte le volte. :doh:

Grazie della soluzione.
:eek:
com'erano quelle regole?:asd:

- Evitiamo di complicarci la vita, esiste di certo una soluzione più semplice di quella che abbiamo pensato di implementare
- Comunichiamo il più possibile, se qualcosa non è chiaro discutiamone tutti i dettagli fino ad eliminare ogni dubbio, anche il più insignificante

ti saresti risparmiato un pò di mal di testa se l'avessi chiesto! :D
io non ho mai pensato che non lo sapeste perchè mi sembrava ovvio che la prima cosa da fare era un clean all.... :mbe:

^TiGeRShArK^
17-01-2006, 13:46
Il terzo test era l'errore che avevo messo volontariamente...
Ora è la AbstractKeyEventHandler stessa a settare autonomamente il modo di ripetizione attuale...prima era InputReactor, ma non aveva senso secondo me... Così ho anche semplificato InputReactor.handleKeyRepetition ;)
Ho eliminato la duplicazine fra repeated e fastRepetitionMode...e tolto un po' di metodi a questo punto inutili da AbstractKeyEventHandler...
Ah, ho elimnato l'interfaccia KeyEventHandler...secondo me inutile a questo punto (visto che è AbstractKeyEventHandler a fare da interfaccia per gli handler)...poi se la volete ripristinare per me va bene...
:fiufiu:
mi sa che avrei dovuto pensarci io a queste cose nel mio task...
ma come ho già detto non avevo capito moltissimo degli input....:muro:

cionci
17-01-2006, 13:51
Nono...andava bene... L'unica cosa è che era ancora InputReactor a mettere il fastmode...poi mettendo l'attivazione in AbstractKeyEventHandler è venuto tutto il resto ;)

^TiGeRShArK^
17-01-2006, 16:08
Nono...andava bene... L'unica cosa è che era ancora InputReactor a mettere il fastmode...poi mettendo l'attivazione in AbstractKeyEventHandler è venuto tutto il resto ;)
:fiufiu:
ah ecco..
siccome prima era settato in quel posto pensavo si dovesse lasciare lì...:fagiano:
ho capito.. mi devo mettere quando ho un pò di tempo a studiare x bene quello che facciamo per gestire gli input! :D

Ufo13
17-01-2006, 17:19
Perche' stiamo programmando molto Interface-based: quasi ogni sistema che abbiamo viene visto all'esterno come un'interfaccia pura. Semplifica di molto il testing e anche lo sviluppo.

Design by contracts o cosa? Non sono manco io troppo convinto della cosa...

cdimauro
17-01-2006, 18:02
Ho un serio problema: non mi funziona ant. Se vado su build.xml e seleziono "Run As" e poi "Ant Build", il processo parte, ma poi va in errore.
Riporto tutto il log della console:

Buildfile: D:\Workspace\Diamonds\build.xml
init:
[delete] Deleting directory D:\Workspace\Diamonds\reports
[mkdir] Created dir: D:\Workspace\Diamonds\reports
[mkdir] Created dir: D:\Workspace\Diamonds\reports\html
checkstyle:
[checkstyle] Running Checkstyle 4.1 on 103 files
compile-debug:
[javac] Compiling 103 source files to D:\Workspace\Diamonds\bin\debug

BUILD FAILED
D:\Workspace\Diamonds\build.xml:76: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK

Total time: 6 seconds
Ho provato anche ad eseguire il checkout completo del progetto, ma non è cambiato niente.

Non so che altro fare. :muro:

Dimenticavo. Lanciando javac da command line, ottengo questo:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac/Main

cionci
17-01-2006, 18:07
Cesare hai messo JAVA_HOME ? Hai la directory con javac nel path ?

cdimauro
17-01-2006, 18:17
JAVA_HOME non c'è (ma non c'era definita nemmeno prima, quando funziona).

javac non c'è nel path: ho dovuto mettere un link in C:\Windows\System32 per far vedere javac.exe. :(

maxithron
17-01-2006, 18:27
JAVA_HOME non c'è (ma non c'era definita nemmeno prima, quando funziona).

javac non c'è nel path: ho dovuto mettere un link in C:\Windows\System32 per far vedere javac.exe. :(

Mi intrometto perchè ho cominciato ad interessarmi anche io a diamonds. E su linux ho avuto anche io questo problema pur avendo definito in /.eclipse/eclipserc la mia `JAVA_HOME`. Alla fine ho risolto in un modo simile a quello di cdimauro, anche se il problema a me nasceva solo se compilavo da riga di comando e non runnandolo direttamente da eclipse.

Ho risolto cmq così:


-<maxithron@maxmobile:/dev/pts/2>--<1928:mar,17 gen 06>--<...axithron/.eclipse>-
-<Yes Master?>-\~$ cat eclipserc

JAVA_HOME=/usr/lib/j2sdk1.5-sun/

cdimauro
17-01-2006, 19:11
Niente da fare. Inserendo c:\programmi\java\jdk1.5.0_06\bin nella variabile d'ambiente PATH, finalmente da command line funziona javac, ma Eclipse non ne vuole sapere con Ant Build.

Anche settando JAVA_HOME a c:\programmi\java\jdk1.5.0_06\bin o c:\programmi\java\jdk1.5.0_06, non è cambiato nulla. :cry:

fek
17-01-2006, 19:30
Mi intrometto perchè ho cominciato ad interessarmi anche io a diamonds.

Abile e arruolato!

fek
17-01-2006, 19:31
Niente da fare. Inserendo c:\programmi\java\jdk1.5.0_06\bin nella variabile d'ambiente PATH, finalmente da command line funziona javac, ma Eclipse non ne vuole sapere con Ant Build.

Anche settando JAVA_HOME a c:\programmi\java\jdk1.5.0_06\bin o c:\programmi\java\jdk1.5.0_06, non è cambiato nulla. :cry:

A meno che non ne puoi fare assolutamente a meno, ignora pure l'ant build da dentro Eclipse, io l'avro' usato si' e no due volte. l'importante e' che tu possa lanciare i test da JUnit da dentro Eclipse mentre scrivi il codice e poi possa lanciare da linea di comando prima del commit.

maxithron
17-01-2006, 19:32
Niente da fare. Inserendo c:\programmi\java\jdk1.5.0_06\bin nella variabile d'ambiente PATH, finalmente da command line funziona javac, ma Eclipse non ne vuole sapere con Ant Build.

Anche settando JAVA_HOME a c:\programmi\java\jdk1.5.0_06\bin o c:\programmi\java\jdk1.5.0_06, non è cambiato nulla. :cry:

era lo stesso maledetto identico problema che avevo dando:

ant cover-report

Per caso, ti ritrovi un'installazione separata della JRE?

thebol
17-01-2006, 19:38
Niente da fare. Inserendo c:\programmi\java\jdk1.5.0_06\bin nella variabile d'ambiente PATH, finalmente da command line funziona javac, ma Eclipse non ne vuole sapere con Ant Build.

Anche settando JAVA_HOME a c:\programmi\java\jdk1.5.0_06\bin o c:\programmi\java\jdk1.5.0_06, non è cambiato nulla. :cry:

ci sono cozzato anche io...
windows->preferences->ant->runtime->Classpath->global entries->add External Jar->c:\programmi\java\jdk1.5.0_06\lib\tools.jar

google r0x

thebol
17-01-2006, 19:40
ps. usando eclipse 3.2 a lavoro questo settaggio me lo sono trovato gratis... :rolleyes:

fek
17-01-2006, 19:47
ps. usando eclipse 3.2 a lavoro questo settaggio me lo sono trovato gratis... :rolleyes:

E' uscito???? Volo...

Ufo13
17-01-2006, 19:53
cambia molto? :p

thebol
17-01-2006, 19:57
E' uscito???? Volo...
non so, me l'ha passato il mio "compagno" di banco a lavoro.

cmq se non sbaglio era una M percui non era stable(ma quando mai eclipse è stabile :asd: )

cdimauro
17-01-2006, 19:59
Abile e arruolato!
Avvoltoio! :D

cdimauro
17-01-2006, 20:00
A meno che non ne puoi fare assolutamente a meno, ignora pure l'ant build da dentro Eclipse, io l'avro' usato si' e no due volte. l'importante e' che tu possa lanciare i test da JUnit da dentro Eclipse mentre scrivi il codice e poi possa lanciare da linea di comando prima del commit.
Da dentro Eclipse è comodissimo però. :)

Comunque ho risolto grazie all'indicazione di thebol. :D

cdimauro
17-01-2006, 20:00
era lo stesso maledetto identico problema che avevo dando:

ant cover-report

Per caso, ti ritrovi un'installazione separata della JRE?
Esattamente! :muro:

cdimauro
17-01-2006, 20:01
ci sono cozzato anche io...
windows->preferences->ant->runtime->Classpath->global entries->add External Jar->c:\programmi\java\jdk1.5.0_06\lib\tools.jar

google r0x
FUNZIONA!!!! Grazieeeee!!! :cry: :) :mano: :smack:

^TiGeRShArK^
17-01-2006, 21:43
A meno che non ne puoi fare assolutamente a meno, ignora pure l'ant build da dentro Eclipse, io l'avro' usato si' e no due volte. l'importante e' che tu possa lanciare i test da JUnit da dentro Eclipse mentre scrivi il codice e poi possa lanciare da linea di comando prima del commit.
tanto per seguire la stessa regola di cui sopra riguardo la comunicazione...
come si lanciano i test da eclipse???
io riesco a scegliere solo una testsuite...
se ad esempio metto il package it.diamonds.test mi esegue solo quelli in quel package, mentre mi ignora quelli negli altri packages....come devo fare per eseguirli TUTTI da eclipse???:mbe:

^TiGeRShArK^
17-01-2006, 21:45
ci sono cozzato anche io...
windows->preferences->ant->runtime->Classpath->global entries->add External Jar->c:\programmi\java\jdk1.5.0_06\lib\tools.jar

google r0x
:mbe:
ma eclipse non imposta già tutte le librerie di Java 5 quando si imposta java 5 come JDK di defaul???:mbe:
a me ha sempre importato tutte le librerie correttamente in quel modo... :confused:

fek
17-01-2006, 21:51
tanto per seguire la stessa regola di cui sopra riguardo la comunicazione...
come si lanciano i test da eclipse???
io riesco a scegliere solo una testsuite...
se ad esempio metto il package it.diamonds.test mi esegue solo quelli in quel package, mentre mi ignora quelli negli altri packages....come devo fare per eseguirli TUTTI da eclipse???:mbe:

Strano perche' se io lancio .test me li esegue tutti.

^TiGeRShArK^
17-01-2006, 22:00
Strano perche' se io lancio .test me li esegue tutti.
:mbe:
boh... a me da eclipse ne esegue solo 146... e in particolare quelli di quel package....
da ant invece mi esegue tutti i test...:mbe:
ma come li fai partire da eclipse???
io mi sono creato una configurazione per i test e gli ho detto di eseguire tutti i test nel pachage/source/project it.diamonds.test.....
c'è pure qualche altro modo per lanciarli??? :fagiano:

dnarod
17-01-2006, 22:28
non so se il mio si possa considerare un problema da trattare in questa sede...mi sto sforzando di capire anche solo a grandi linee il progetto, ma credetemi, non mi avvicino nemmeno lontanamente a intravedere anche solo il 5% del tutto...tipo leggo i 3d di pair programming e sinceramente non comprendo i passaggi ne perche vengono fatti in quel modo, non so neanche valutarne la complessita....come posso uscire da questa dimensione di mediocrita? sto cercando di studiare un po almeno la terminologia che si usa qui dentro (la filosofia test driven per esempio, o come si usa eclipse), ma la vedo assai grigia, qui siete tutti decisamente anni luce avanti al mio livello...il vecchio me si sarebbe gia nascosto per la paura, ora invece chiedo che iter potrei seguire per skillarmi...ad ogni modo non demordo, come ho capito cos è una variabile quando non sapevo nemmeno che cosa fosse un computer, si puo capire ogni cosa, right?

maxithron
17-01-2006, 22:35
Abile e arruolato!

ehm.... veramente, con "mi sto interessando a.." intendevo che prima che capisco cosa stiate facendo, probabilmente avrete già finito ! :)

cionci
17-01-2006, 22:51
:mbe:
boh... a me da eclipse ne esegue solo 146... e in particolare quelli di quel package....
Io seleziono src e poi clicko Run as -> Junit Test e me li esegue tutti...

^TiGeRShArK^
17-01-2006, 23:27
non so se il mio si possa considerare un problema da trattare in questa sede...mi sto sforzando di capire anche solo a grandi linee il progetto, ma credetemi, non mi avvicino nemmeno lontanamente a intravedere anche solo il 5% del tutto...tipo leggo i 3d di pair programming e sinceramente non comprendo i passaggi ne perche vengono fatti in quel modo, non so neanche valutarne la complessita....come posso uscire da questa dimensione di mediocrita? sto cercando di studiare un po almeno la terminologia che si usa qui dentro (la filosofia test driven per esempio, o come si usa eclipse), ma la vedo assai grigia, qui siete tutti decisamente anni luce avanti al mio livello...il vecchio me si sarebbe gia nascosto per la paura, ora invece chiedo che iter potrei seguire per skillarmi...ad ogni modo non demordo, come ho capito cos è una variabile quando non sapevo nemmeno che cosa fosse un computer, si puo capire ogni cosa, right?
leggi magari i primi thread dedicati al pair programming.....
inizialmente sbagliavamo anche noi e quindi puoi capire meglio secondo me il giusto processo guardando sia gli errori che la correzione successiva ;)

^TiGeRShArK^
17-01-2006, 23:29
ehm.... veramente, con "mi sto interessando a.." intendevo che prima che capisco cosa stiate facendo, probabilmente avrete già finito ! :)
mmmmmmmmmm.....
proprio oggi stavo pensando a questo....
inserire i commenti per generare il javadoc non sarebbe utile per chi si sta avvicinando oggi al progetto????
sarebbe lavoro in piu' per noi e inoltre quando facciamo qualche refactoring andrebbero riscritti anche i commenti...
però altrimenti non mi viene in mente di piu' semplice per fare entrare nell'ottica del progetto anche altre persone.....
avete idee migliori voi???:fagiano:

^TiGeRShArK^
17-01-2006, 23:31
Io seleziono src e poi clicko Run as -> Junit Test e me li esegue tutti...
ho provato e in quel modo li esegue tutti, TNX ;)
ma comunque, perchè configurandolo dal menu di configurazione run non funge? :fagiano:

thebol
18-01-2006, 06:39
Run->Run..->Junit(dovresta averlo di default)->tasto new->checkare run all test etc... fate searche e selezionate diamonds.
poi andate in arguments e in VM arg mettete il solito -Djava.library.path=lib/win32

io ho configurato un applicazione junit in questa maniera e mifa girare tutti i test.

^TiGeRShArK^
18-01-2006, 08:38
tnx, stasera provo ;)

Bonfo
18-01-2006, 08:45
Javadoc....?? :mbe:

Bhè...se leggo uno dei primi thread che ho postato è stata la prima cosa che ho chiesto :D :D , ma la risposta fu implacabile: qui siamo agili ed è il codice la nostra documentazione.
La mia prima pensata è stata "sono pazzi questi romani" (Obleix docet),ma la seconda è stata "sono tropppppo avanti"!!!

Ammetto che non sono ancora al 100% nel progetto..ma leggendo i thread sul Ciclo7 e le storie relative ho incominciato a capire. Poi leggendo i thread in giro e spulciando il codice...mi sono lanciato nel primo task, per fortuna in Pair Programming (Programmazione di Coppia ;) ) e ho praticamente, grazie a Cdimauro, finito il mio primo task !!!! :winner:
Pratiamente ora conosco così così 3 classi: Gem, GemsPair e Sprite ...dnarod non ti preoccupare!

Quindi alla fine non è impossibile entrare in Diamonds....pur rimanendo fedeli al NO JAVADOC. :sofico:

Forse sarebbe untile un thread con i primi passi:
-spiegare cos'è il TDD oltre a dare i link
-come è organizzato il repository e la gerarchia delle classi (dicendo che parte tutto da game)
- ...

E poi il coraggio di lanciarsi !!!

P.S.: comunque come si modifica il codice pian piano si potrebbero modificare i commenti per il javadoc pian piano... :flower:

cionci
18-01-2006, 08:57
P.S.: comunque come si modifica il codice pian piano si potrebbero modificare i commenti per il javadoc pian piano... :flower:
IMHO non ci devono essere commenti nel codice per come è stato intrapreso questo esperimento... Credo che la cosa che più potrebbe essere utile sia un generatore class diagram UML a partire dal codice...anche aggiornato una volta al mese, per avere una visione di insieme del progetto...

fek
18-01-2006, 09:13
non so se il mio si possa considerare un problema da trattare in questa sede...mi sto sforzando di capire anche solo a grandi linee il progetto, ma credetemi, non mi avvicino nemmeno lontanamente a intravedere anche solo il 5% del tutto...tipo leggo i 3d di pair programming e sinceramente non comprendo i passaggi ne perche vengono fatti in quel modo, non so neanche valutarne la complessita....come posso uscire da questa dimensione di mediocrita? sto cercando di studiare un po almeno la terminologia che si usa qui dentro (la filosofia test driven per esempio, o come si usa eclipse), ma la vedo assai grigia, qui siete tutti decisamente anni luce avanti al mio livello...il vecchio me si sarebbe gia nascosto per la paura, ora invece chiedo che iter potrei seguire per skillarmi...ad ogni modo non demordo, come ho capito cos è una variabile quando non sapevo nemmeno che cosa fosse un computer, si puo capire ogni cosa, right?

Qui c'e' tutto quello che ti serve per avere un'idea della metodologia che stiamo usando e delle pratiche di testing:
http://www.hwupgrade.it/forum/showthread.php?t=1019019

Poi ti basta solo fare un task in Pair Programming con qualcuno e sei al pari di tutti gl'altri. Dopo un paio di orette di Pair Programming, si sono tutti messi in pari.

Ed infine, quando non ti e' chiaro un passaggio in un topic in Pair Programming, domanda, qui fanno a pugni per risponderti.

fek
18-01-2006, 09:14
ehm.... veramente, con "mi sto interessando a.." intendevo che prima che capisco cosa stiate facendo, probabilmente avrete già finito ! :)

Poche scuse, abile e arruolato :D

^TiGeRShArK^
18-01-2006, 11:11
IMHO non ci devono essere commenti nel codice per come è stato intrapreso questo esperimento... Credo che la cosa che più potrebbe essere utile sia un generatore class diagram UML a partire dal codice...anche aggiornato una volta al mese, per avere una visione di insieme del progetto...
Ecco...
questa sarebbe già una cosa buona :D

cionci
18-01-2006, 11:32
Se avete voglia di provarci c'è questo: http://www.jgrasp.org/index.html
http://www.jgrasp.org/tutorials18/05_UML.pdf

dnarod
18-01-2006, 11:44
azzo ma sto eclipse è gigantico...io son sempre stato abituato a programmare usando textpad come editor, avevo dato una sguardata a jcreator e mi era piaciuto...certo che i prof universitari potrebbero insistere un po sull ambiente di sviluppo; sto eclipse è totale, nel senso che ci sto giocando un po ed è granitico...il probl è che non riesco nemmeno a runnare un esempio di rendering di quadrato lol....

cmq qui faccio un fioretto nel fioretto, momento solenne: chi mi conosce un po qui forse sa che io ero un netgamer (era la cosa che sapevo fare meglio nella vita lol) incallito da molti anni (quake is the way!); ma dal 20/11/2005, per via del fatto che voglio finire l uni, che per troppi anni i games sono stati la mia droga (, eccetera), io non tocco piu neanche il solitario di windows, nemmeno lo snake del cellulare! è stato un fioretto che mi affatica terribilmente (la notte sogno un giorno si e uno no di pownare qualcuno a quake, deprimente...) anche perche, specialmente per i netgamer incalliti si tratta di droga, ne piu ne meno...pero ci sto riuscendo e ora riesco a dedicare tutto il tempo che prima sprecavo nel gaming per lo studio (uni, chitarra, cose genuine insomma)....l idea quindi era di chiudere il capitolo della mia vita insiemei ai games, ma c' e sempre uno scheletro nell armadio con cui devo bene o male fare i conti: dal 1992 circa penso che il mio sogno è quello di programmare e programmare games (effetto doom)....

che c' entra tutto questo col fioretto nel fioretto? beh diciamo che sto dimostrando che posso non farmi prendere come un ragazzino dal gioco (nel senso di giocare)...diciamo che ora qui mi si da la possibilita di "partecipare" a qualcosa che per me altrimenti sarebbe inarrivabile se affrontata da solo...diciamo che quant e vero il sole ci butto anima e corpo dentro, perche alla fine ho deciso che finiro l uni e mi piacerebbe fare il programmatore (ora ne sono veramente convinto, ma non perche ho scoperto diamonds e seguo la scia dell entusiarmo lol, aleggiava nell aria da un po di tempo, e il fatto che sia arrivato qui è solo una conseguenza della mia decisione)....
diciamo dunque che il fioretto è il seguente: "saro di nuovo abile a toccare un fps quando avro fatto qualcosa di serio per un fps...riformulato? il mio prossimo frag avverra fra molto piu dei 6 mesi di stop che mi ero prefisso, almeno credo...e avverra se e solo se avro programmato da solo o con altri un qualcosa per un fps". Detto in parole povere, da adesso fino a quando non saro riuscito a dare una dimensione accettabile ai videogiochi (cosa che non sono mai riuscito a fare --> se dovevo studiare e sul monitor vedevo l icona delle dispense e a fianco l icona di quake, beh vi lascio immaginare) li programmero soltanto...in fondo era quello che volevo da molto tempo, ma non avevo le palle per mettermi sotto a studiare (ero un perdente nella testa)

quindi thanks di tutto...neanche tanto per avermi accolto (cmq thanks anche per quello owwio), quanto per il fatto di aver pensato e tirato su un progetto come questo, che da la possibilita a chi si vuole togliere dal fango (come me) di imparare e skillarsi su qualcosa che gli piace...

chiudo qui il comunicato, non so perche ma il forum ormai mi sta facendo diventare annunciofobico...appena riesco a farmi entrare in testa qualcosa di solido mi riterro pronto per accaparrarmi il primo task!

fek
18-01-2006, 11:50
azzo ma sto eclipse è gigantico... [snip]

Smetti di scrivere post chilometrici e scrivi codice!! :D

cionci
18-01-2006, 12:20
Non è il massimo, ma guardate qui:

http://utenti.lycos.it/ci0nci/DiamondsUMLDiagram.png

fek
18-01-2006, 12:25
Non è il massimo, ma guardate qui:

http://utenti.lycos.it/ci0nci/DiamondsUMLDiagram.png

E' ottimo. E' possibile produrlo da un batch file senza lanciare la GUI? Se si', lo butto sulla build machine in un attimo.

L'ideale sarebbe poter produrre una png per ogni package.

VICIUS
18-01-2006, 12:25
Non è il massimo, ma guardate qui:

http://utenti.lycos.it/ci0nci/DiamondsUMLDiagram.png
Interessante. Lo si può generare in automatico anche sulla build machine con un task di ant ?

ciao ;)

jappilas
18-01-2006, 12:27
Smetti di scrivere post chilometrici e scrivi codice!! :D
quoto :D

io prendo un task appena ho finito di rifattorizzare del codice c++, ma rod, tu che puoi fallo subito :D
Non è il massimo, ma guardate qui:

http://utenti.lycos.it/ci0nci/DiamondsUMLDiagram.png
alla faccia del "non e' il massimo" O_o
e' bellissimo e chiarissimo ... quasi quasi me lo stampo e lo metto in camera come poster :)

dnarod
18-01-2006, 12:48
caspio mi rompono le uova nel paniere...ho appena visto l uni e mi hanno assegnato un es di lab!! forza4 con gui lol....mi sa che ne avro per un paio di giorni uffa!! cmq sto leggendo il libro di beck sul test driven develpopement, gia quello mi sta aiutando un macello!!! è ufficiale, capisco gia qualcosa di piu!

^TiGeRShArK^
18-01-2006, 13:06
Smetti di scrivere post chilometrici e scrivi codice!! :D
e soprattutto visto ke 6 di torino si può organizzare una sessione di pair-programming a casa mia :D
Sarebbe il primo pair-programming fatto dal vivo piuttosto che in rete :D

jappilas
18-01-2006, 13:07
:idea:... qualcun altro e' di Genova? :D

^TiGeRShArK^
18-01-2006, 13:07
Non è il massimo, ma guardate qui:

http://utenti.lycos.it/ci0nci/DiamondsUMLDiagram.png
:eek:
Spettacolo! :D
e così abbiamo pure risolto il problema dell'UML! :sofico:

^TiGeRShArK^
18-01-2006, 13:08
:idea:... qualcun altro e' di Genova? :D
Non mi copiare l'idea, elfone! :O

:D

jappilas
18-01-2006, 13:10
Non mi copiare l'idea, elfone! :O

:D
siamo nel mondo del riuso :O
quindi se un' idea e' valida, viene riusata tanto quanto il codice :D

Bonfo
18-01-2006, 13:16
cmq sto leggendo il libro di beck sul test driven develpopement, gia quello mi sta aiutando un macello!!! è ufficiale, capisco gia qualcosa di piu!
w BECK !!!! :cincin:


E' ottimo. E' possibile produrlo da un batch file senza lanciare la GUI? Se si', lo butto sulla build machine in un attimo.
Fantastico!!!!
...comunque in un altro thread era stato nominato OMONDO...che è stato vednuto come compatibile con Eclipse e quindi, supppongo, con ant.
http://www.omondo.com/

...mai guardato

Bonfo
18-01-2006, 13:17
Comunque in rete se ne trovano una marea...ce ne sarà qualcuno che può essere uutomatizzato...no :mc:

cionci
18-01-2006, 13:36
Comunque in rete se ne trovano una marea...ce ne sarà qualcuno che può essere uutomatizzato...no :mc:
Quello che ho messo sopra non è automatizzabile... L'ho fatto con la demo di Code Visual for Java...

cionci
18-01-2006, 13:40
...comunque in un altro thread era stato nominato OMONDO...che è stato vednuto come compatibile con Eclipse e quindi, supppongo, con ant.
http://www.omondo.com/
L'ho guardato, ma se non sbaglio la generazione dei diagrammi a partire dal codice è solo per la versione a pagamento...

cionci
18-01-2006, 13:43
L'ho guardato, ma se non sbaglio la generazione dei diagrammi a partire dal codice è solo per la versione a pagamento...
Ah no...mi sono sbagliato... Non gira con su un progetto SVN...

Bonfo
20-01-2006, 00:13
Più che un problema è un dubbio..o meglio una informazione.

Io sono abituato a non mettere mai un campo pubblico, ma casomai fornire i due metodi di set e get....

private int value;

public void setValue(int value)
{
this.value=value;
}

public int getValue()
{
return this.value;
}


Ho visto in it.diamonds.gems.Cell i due campi dichiarati pubblici

public int row;
public int column;


E' voluto o è meglio cambiare??

cionci
20-01-2006, 08:01
Pubblici !??!??! Solo le costanti possono essere dichiarate pubbliche...strano il checkstyle doveva intervenire !!! :eek:

cionci
20-01-2006, 08:10
Due click di Eclipse e via !!! Che bello !!! :D

Bonfo
20-01-2006, 10:14
Allora ci avevo visto giusto!!! :sofico:
Perfetto...ora che so che siamo sulla stessa linea la prossima volta li cambio da solo ;)

Ufo13
20-01-2006, 14:33
Io ho ancora quel problema con log4j... Non posso fare il test coverage...

Ufo13
20-01-2006, 23:49
Ho trovato un bug...

mettiamo di avere la seguente configurazione:

XX
XX

Ovvero un agglomerato... Nel momento in cui arriva una gemma sempre di tipo X nella configurazione seguente

X
XX
XX

Avviene un crash. Perchè? Perchè l'ultima gemma viene segnata come se appartenesse al gruppo di gemme sottostanti! Scrivo un test..

cionci
21-01-2006, 00:02
Può essere che sia lo stesso bug che ho avuto io:

X
X
XX

Da questa situazione ho aggiunto un gemma X alla colonna di destra e non è stata visualizzato l'agglomerato, ma le 4 gemme dell'agglomerato sono sparite...

cionci
21-01-2006, 00:03
Mi correggo, a me non visualizza proprio gli agglomerati... Non so...forse un problema di texture ?!?!?

Bonfo
21-01-2006, 00:14
Anche a me succedeva come a cionci....ma ora gli agglomerati si vedono!! :boh:
Prova ad aggiornare da repository e a ricompilare...non si sa mai.

Il bug a me si presenta anche così:

X
XX

Che non ancora un agglomerato, a così:

X
XX
XX

cionci
21-01-2006, 00:17
Oh...ora si vedono...eppure l'update l'avevo fatto :confused:

Ufo13
21-01-2006, 00:21
non so se avete capito bene il mio problema :p

la gemma viene segnata come appartenente al gruppo (mentre in realtà è solo candidata).

Questo fa generare nullpointerexception nella draw di gemgroup...

Ufo13
21-01-2006, 00:27
Anche a me succedeva come a cionci....ma ora gli agglomerati si vedono!! :boh:
Prova ad aggiornare da repository e a ricompilare...non si sa mai.

Il bug a me si presenta anche così:

X
XX

Che non ancora un agglomerato, a così:

X
XX
XX

Non ho capito :p

Ufo13
21-01-2006, 00:35
public void testCandidateGemIsNotInGroupYet()
{
gem9 = Gem.create(gem3.getType(), 3500);
gem10 = Gem.create(gem3.getType(), 3500);
gem11 = Gem.create(gem3.getType(), 3500);
gem12 = Gem.create(gem3.getType(), 3500);

fillGroup();

insertAndUpdate(gem12, 10, 1);

assertNull("gem12 must be not in a group", gem12.getGroup());
}


Io ho pensato a questo...

Bonfo
21-01-2006, 00:35
Ho capito quale è il problema...o almeno mi sembra di averlo capito :p
Ho elencato un altro caso in cui si verifica il bug.

poichè le gemme scendo a coppie, ho avuto la fortuna di beccare una coppia di gemme uguali, chiamiamola OO del tipo X, passando dalla configurazione

X
XX

alla configurazione

O
OX
XX

si presenta il baco.

Caso in cui non si è presentato e invece me lo aspettavo è stato (O.tipo!=X.tipo)
DA

XX
OXX

A

XXX
OXX

cionci
21-01-2006, 00:38
Altro bug...probabilmente lo stesso, ma magari aiuta a capire meglio coem si presenta:

X
XXO

Si pianta in aggiungendo queste gemme:

XXX
XXO

Bonfo
21-01-2006, 00:39
Sono talmente cotto che non ho capito niente del codice Ufo...sorry.
Notte a tutti! :ronf:

Ultima cosa: :asd:
At revision 1108

[junit] Tests run: 8, Failures: 0, Errors: 2, Time elapsed: 1,703 sec
[junit] Testcase: testCorrectGemsPositions(it.diamonds.tests.ignore.TestGemGroup): Caused an ERROR
[junit] it.diamonds.gems.GemGroup.getPositionType(Lit/diamonds/gems/Gem;)Ljava/lang/Object;
[junit] java.lang.NoSuchMethodError: it.diamonds.gems.GemGroup.getPositionType(Lit/diamonds/gems/Gem;)Ljava/lang/Object;
[junit] at it.diamonds.tests.ignore.TestGemGroup.testCorrectGemsPositions(TestGemGroup.java:180)
[junit] Testcase: testCorrectTileDraw(it.diamonds.tests.ignore.TestGemGroup): Caused an ERROR
[junit] it.diamonds.gems.GemGroup.draw(Lit/diamonds/gems/GemGroup$PositionType;Lit/diamonds/engine/EngineInterface;)V
[junit] java.lang.NoSuchMethodError: it.diamonds.gems.GemGroup.draw(Lit/diamonds/gems/GemGroup$PositionType;Lit/diamonds/engine/EngineInterface;)V
[junit] at it.diamonds.tests.ignore.TestGemGroup.testCorrectTileDraw(TestGemGroup.java:211)

cionci
21-01-2006, 00:40
poichè le gemme scendo a coppie, ho avuto la fortuna di beccare una coppia di gemme uguali,
Anche io ho trovato la stessa situazione... Fate l'update...ho fatto qualche modifica ai nomi... Controllate se vi va bene...

cionci
21-01-2006, 00:42
Sono talmente cotto che non ho capito niente del codice Ufo...sorry.
Notte a tutti! :ronf:
Boh...a me funziona...però sono alla 1109...

Ufo13
21-01-2006, 00:42
Sei sicuro che non sia qualcosa di tuo? La build machine non da problemi

Ufo13
21-01-2006, 00:47
cionci visto che ora sono mezzo fulminato non è che riesci a scrivere un test che fa fallire la situazione descritta? (vanno bene sia il mio caso che il tuo).

Non ho idea di come scrivere un test che fallisca se viene lanciata NullPointer :p

cionci
21-01-2006, 00:54
Non ho idea di come scrivere un test che fallisca se viene lanciata NullPointer :p
Un test fallisce comunque se viene lanciata un'eccezione ;)

Ufo13
21-01-2006, 00:56
sì ma termina con error e non fail... cambia niente? :p

cionci
21-01-2006, 01:02
Non cambia niente...tanto il tuo scopo è quello di far ritornare la build verde ;)

cionci
21-01-2006, 01:03
Comunque non sto riuscendo a replicare il bug con i test...

Ufo13
21-01-2006, 01:13
public void testCandidateGemNotCrashes()
{
MockEngine engine = MockEngine.createForTesting(800, 600);

gem9 = Gem.create(gem3.getType(), 3500);
gem10 = Gem.create(gem3.getType(), 3500);
gem11 = Gem.create(gem3.getType(), 3500);

fillGroup();

Gem gem12 = Gem.create(gem3.getType(), 3500);

insertAndUpdate(gem12, 10, 1);

grid.draw(engine);
}

Ufo13
21-01-2006, 01:18
Build verde di nuovo... Ringrazio Vifani per l'aiuto :p

cionci
21-01-2006, 01:19
Ottimo :) Ci stavo arrivando... Certo è scomodo che quando viene generata un'eccezione non gestita venga salvata nel file di testo, ma non venga visualizzata nella console di eclipse..

Ufo13
21-01-2006, 01:23
sarebbe meglio farli printare entrambi :p

cionci
21-01-2006, 01:25
Ora però ce n'è un altro:

OO
OO

O = gemme che fanno parte del gruppo...

Faccio scendere altre due gemme (non nella stessa coppia) dello stesso tipo di O...

OO
OO
OO

Le due gemme sopra non vengono integrate nel gruppo... E' normale ? Magari fa parte di un altro task...

Ufo13
21-01-2006, 01:26
non è normale... ora ti posto uno screen interessante :D

cionci
21-01-2006, 01:27
Azz...ora non mi si è ripresentato... Cerco di chiarire emglio la situazione...

Ufo13
21-01-2006, 01:34
Azz...ora non mi si è ripresentato... Cerco di chiarire emglio la situazione...

ti credo perchè è successo anche a me prima :)


ora ti propongo questo:

http://img229.imageshack.us/my.php?image=diamondsbug8ix.jpg

Bonfo
21-01-2006, 01:34
Stavo andando a letto quando ho visto Berlusconi e Rutelli in TV...
...mi son fatto 2 risate mentre sostituivo il progetto :asd: :asd:

Sì...gli errori erano miei.
Mi è capitata la stessa cosa di cionci...però è sucesso anche questo :cry:
DA

XXX
XXX

A

XX
XXX
XXX

Ufo13
21-01-2006, 01:37
sì il problema credo che sia che fonde agglomerati anche quando non deve...

Vifani
21-01-2006, 01:49
Io avevo impedito di creare gruppi se le gemme adiacenti facevano già parte di un gruppo. Questa condizione è stata cambiata e il risultato è quello che vedete. Bisogna fare in modo che non solo le gemme circostanti devono essere dello stesso tipo, ma, se sono parte di un gruppo, devono essere candidated. Se fanno parte di un gruppo e non sono candidated, allora vuol dire che si è creato un agglomerato e non possono essere usate per creare nuovi gruppi. Infine bisognerebbe che tutte le gemme facenti parte di un gruppo dove non sono + candidated (cioè fanno parte di un agglomerato), vengano eliminate da tutti gli altri gruppi in cui stanno.

Ufo13
21-01-2006, 01:55
Curioso... Questo non fallisce... Mi pare di averlo riprodotto corretamente no?


public void testGroupNotStealingGemsFromOtherGroup()
{
gem9 = Gem.create(gem3.getType(), 3500);

insertAndUpdate(gem3, 13, 5);
insertAndUpdate(gem4, 13, 6);
insertAndUpdate(gem5, 12, 5);
insertAndUpdate(gem6, 12, 6);

insertAndUpdate(gem7, 12, 4);
insertAndUpdate(gem8, 11, 4);
insertAndUpdate(gem9, 11, 5);

assertFalse("One group must not steal gems from other groups", gem7.isInAGroup());
}

cionci
21-01-2006, 08:50
Io avevo impedito di creare gruppi se le gemme adiacenti facevano già parte di un gruppo. Questa condizione è stata cambiata e il risultato è quello che vedete.
Probabilmente mancava un test, altrimenti il test avrebbe bloccato la modifica ;)

thebol
21-01-2006, 10:01
Io avevo impedito di creare gruppi se le gemme adiacenti facevano già parte di un gruppo. Questa condizione è stata cambiata e il risultato è quello che vedete. Bisogna fare in modo che non solo le gemme circostanti devono essere dello stesso tipo, ma, se sono parte di un gruppo, devono essere candidated. Se fanno parte di un gruppo e non sono candidated, allora vuol dire che si è creato un agglomerato e non possono essere usate per creare nuovi gruppi.

la modifica era mia e in "teoria" doveva fare proprio questo...



Infine bisognerebbe che tutte le gemme facenti parte di un gruppo dove non sono + candidated (cioè fanno parte di un agglomerato), vengano eliminate da tutti gli altri gruppi in cui stanno.

questo invece non è stato fatto...

Ufo13
21-01-2006, 10:13
ragazzi siete riusciti a fare un test per questa roba?

cionci
21-01-2006, 10:15
ragazzi siete riusciti a fare un test per questa roba?
No :cry:

Ufo13
21-01-2006, 10:26
public void testGroupNotStealingGemsFromOtherGroup()
{
gem9 = Gem.create(gem3.getType(), 3500);

insertAndUpdate(gem3, 13, 5);
insertAndUpdate(gem4, 13, 6);
insertAndUpdate(gem5, 12, 5);
insertAndUpdate(gem6, 12, 6);

insertAndUpdate(gem7, 12, 4);
insertAndUpdate(gem8, 11, 4);
insertAndUpdate(gem9, 11, 5);

assertFalse("One group must not steal gems from other groups", gem7.isInAGroup());
}


Adesso provo con un foglio di carta ma non dovrebbe essere la situazione modellata correttamente?

71104
21-01-2006, 10:35
complimenti a thebol e ufo13 per il task che hanno fatto al posto mio ^^
il gioco è veramente bello :)
comunque ho da evidenziare un problema, non so se ve ne siete accorti anche voi (vedere screenshot)

per ottenere quel risultato ho dovuto fare la seguente sequenza di mosse:

O
O O
OOO

OO
OOO
OOO

cioè prima ho dovuto formare quella specie di U incompleta, e poi ho dovuto aspettare che arrivassero due gemme dello stesso colore.

Ufo13
21-01-2006, 10:36
son 10 post che parliamo di quello :D

71104
21-01-2006, 10:37
son 10 post che parliamo di quello :D scusate ^^

Ufo13
21-01-2006, 10:38
scusate ^^

ma di che hai fatto benissimo a postare :)

non è che riesci a trovare il test per il caso che hai postato tu?

Ufo13
21-01-2006, 10:51
E come per magia stavolta il bug non si è presentato :p

Ufo13
21-01-2006, 10:56
Finalmente il test che fallisce! :)

grazie thebol :D


public void testGroupNotStealingGemsFromOtherGroup()
{
gem9 = Gem.create(gem3.getType(), 3500);

insertAndUpdate(gem3, 13, 6);
insertAndUpdate(gem4, 13, 7);
insertAndUpdate(gem5, 12, 6);
insertAndUpdate(gem6, 12, 7);

insertAndUpdate(gem10, 13, 5);

insertAndUpdate(gem7, 12, 5);
insertAndUpdate(gem8, 11, 6);
insertAndUpdate(gem9, 11, 5);

assertFalse("One group must not steal gems from other groups", gem7.isInAGroup());
}

Elentari
21-01-2006, 12:26
Ciao ragazzi!
Stamattina stavo testando Diamonds e ho notato che dopo aver creato un cubo da 4 gemme gialle, se ne metto sopra altre 2 gialle non si crea il gemmone da 2X3, ma resta il cubo con sopra le 2 gemme gialle.
Provando con le altre gemme invece funziona.

Ufo13
21-01-2006, 12:39
non credo sia possibile dipenda dal colore... penso dipenda dall'ordine di inserimento