|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Call To Arms: oggi e domani si fa refactoring (ancora piu' del solito)
Mi giunge voce che TestGameLoop ha bisogno di una sostanziale rivisitazione.
Ci sono 4 test che falliscono (a breve i particolari). Edito il topic man mano che trovo nuove aeree in cui intervenire. Voglio vedere molta gente intervenire in questo topic durante il finesettimana, e prendersi amorevole cura del codice. E questa e' una richiesta molto gentile ![]() Basta anche che rinominiate un metodo, aggiungiate un test, semplifichiate una riga di codice, non c'e' bisogno di fare un lavoro grosso. Anche se non avete mai fatto un task e state studiando il codice (dnarod), prendete un metodo e semplificatelo, e' il modo migliore per imparare. Io e Vicius partiamo subito. Voglio vedervi seguire a ruota. Dunque: - fate update del codice - fate il refactoring (test driven) - lanciate ant - fate di nuovo update - lanciate ant di nuovo - commit
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA Ultima modifica di fek : 04-03-2006 alle 14:48. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
io volevo iniziare stamattina col refactoring..
ma mi sono ritrovato la build rotta ![]() cmq io stavo pensando a semplificare un pò testGrid che si inizia a non capirci più niente.... volevo estrarre i test specifici per warningbox e crushbox tanto per iniziare... epoi vedendo facendo ![]() appena la build è verde parto ![]()
__________________
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
volentieri
![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
![]()
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
Quote:
![]() io già scleravo quando vedevo costruttori con 4 parametri ![]() cmq ora parto col refactoring ![]() ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Finito il lavoro su GameLoop e PlayField, ora sembra decisamente piu' semplice, ma c'e' ancora molto spazio di manovra.
Ci sono alcune cose che non mi piacciono: 1) I Keymapping erano e sono tutt'ora assolutamente non testati e vanno testati. Ho aggiunto una classe KeyMappings che e' un insulto alla programmazione in Java (l'ho praticamente scritta in C++ per pigrizia): chi vuole cimentarsi in una versione piu' elegante e ben testata e' libero di farlo. Anzi, e' caldamente invitato a farlo. 2) AbstractGame, a mio avviso, cosi' com'e' ha poco senso. Sicuramente non e' un Game astratto, a occhio sembra piu' una specie di bootstrapper. Poi ha una relazione molto strana con GameFactory: secondo me GameFactory deve sparire, perche' la complessita' che aggiunge non sembra assolutamente giustificata. Inoltre sono entrambe non testate (male male male). 3) PlayFields e GameLoop hanno una relazione fin troppo intima. Ho cercato di slegarle un po'. con un minimo di successo, ma ancora non mi piace. GameLoop dovrebbe sia creare sia gestire i PlayFields a occhio. Questa parte necessita di ulteriore semplificazione. 4) GameLoop e' testata in maniera francamente imbarazzante. Diciamocelo, sembra che chi ha scritto GameLoop abbia messo quei test tanto per far vedere che qualche test c'e', ma non con lo spirito di scrivere la classe test-driven. Non mi e' piaciuto affatto. Infatti il design ne e' uscito piuttosto povero. Ci vuole una migliore copertura ed un miglior design. In generale ho notato poca attenzione alla qualita' del codice e al suo design, e la cosa ci ha portato in questa situazione in cui noto che pochi hanno voglia di mettere mano nel codice, perche' oggettivamente non e' facile da districare. Ci vuole piu' attenzione, piu' refactoring e tornare ai principi che hanno funzionato tanto bene fino a ieri: fare le cose semplici.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Ho letto ora il post.
Anch'io darò una mano come posso. Devo essere sincero...mi sono un po' perso gli utlimi passaggi e novità sul codice. Quindi ci metterò un po' di tempo a tornare sull'onda. Altra cosa...grazie fek di essere tornato a spezzarci le ditina... ![]() ![]() |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Quote:
|
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
|
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Quote:
Sono certo che bisogna aggiungere dei test da quelle parti. |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Chi si occupa del 2)?
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
![]() |
![]() |
![]() |
#12 | ||
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
GameFacotry serve a condividere il codice del bootstrap con i test altrimenti poi ci riduciamo come TestGameLoop in cui l'85% del codice è un copia e incolla da AbstractGame e GameLoop. Ora basta farsi un TestableGameFactory che crea dei MockEngine, MockKeybaord... Quote:
ciao ![]() |
||
![]() |
![]() |
![]() |
#13 | |||
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
Quote:
Quote:
![]()
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|||
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
Quote:
![]() ![]() P.S. ma siamo sincronizzati che posti sempre poco prima che io torni sul forum a vedere com'è la situazione??? o ci spii tutti??? ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
![]() ciao ![]() |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
sto cercando di sistemare la faccenda GameLoop + abstract + tutto il resto
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Ho fatto un po di ordine nei test che riguardano le griglie. C'erano una vetina di versioni uguali di insertAndUpdate, createGem e altre funzioni di aiuto. Alcune implementavano sul posto. Altre estendevano una classe astratta e altre usavano una classe esterna di aiuto. Ho messo tutto dentro a GridTestCase e fatto estendere quella classe ai vari test.
Nello smanettare pero ho incontrato 5 test che ora si rifiutano di passate. Si trovano in TestBigGemInGrid. Chi li ha scritti può guardare se ho fatto un casino che io non ci capisco niente ![]() ciao ![]() |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Ho eliminato Factory per Game... Diciamo che c'è ancora molto da fare però almeno diminuisce il codice non testato (eliminandole non ho avuto manco mezzo errore all'interno dei test).
Ora do un'occhio a quello che dice Vic ![]() |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Vic a me non da errore sui test... Mi da errore perchè GridTestCase non contiene nessun test
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
Ho eliminato in grid questa duplicazione:
Codice:
// TODO: queste due funzioni sono "quasi" identiche. private boolean hasGemMovedToNextRow(Gem gem) { final float gemNextPosition = gem.getY() + actualGravity; final float rowUpperBound = gem.getCellRow() * yStep + bounds.top(); return gemNextPosition > rowUpperBound; } private boolean hasGemMovedToRowBottom(Gem gem) { final float gemNextPosition = gem.getY(); final float rowUpperBound = gem.getCellRow() * yStep + bounds.top(); return gemNextPosition >= rowUpperBound; } Codice:
private boolean hasGemMovedToNextRow(Gem gem) { return hasGemMovedToRow(gem, actualGravity - 0.5F); } private boolean hasGemMovedToRowBottom(Gem gem) { return hasGemMovedToRow(gem, 0); } private boolean hasGemMovedToRow(Gem gem, float gravity) { final float gemNextPosition = gem.getY() + gravity; final float rowUpperBound = gem.getCellRow() * yStep + bounds.top(); return gemNextPosition >= rowUpperBound; } qualche suggerimento? ![]()
__________________
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:03.