View Full Version : Info su progetto
Il Creativo
25-07-2007, 15:11
Ciao a tutti, vorrei avere informazioni sul progetto in questione, su cos'è, di cosa/chi avete bisogno e tutte le informazioni tecniche e non che potete darmi, in moda da farmi un'idea sul fatto che io possa o meno aiutarvi(sempre che abbiate ancora bisogno di membri per il vostro team), le uniche cose che so sono che si tratta di un'avventura 2D sviluppata interamente in Java.
Grazie.
intanto qui se vuoi puoi scaricarti la First Playable Version:
http://sourceforge.net/project/showfiles.php?group_id=191341&package_id=224755
jappilas
26-07-2007, 01:38
Ciao a tutti, vorrei avere informazioni sul progetto in questione, <cut>ciao, rispondo in dettaglio più avanti :)
le uniche cose che so sono che si tratta di un'avventura 2D più che un' avventura è un casual/arcade game per due giocatori
ognuno controlla la coppia di gemme e/o bauli (e se mai si riuscirà a reintrodurre una modalità avanzata, eventuali oggetti di altro tipo) che cade nella propria griglia di gioco - le gemme base si accumulano in griglia, e vengono eliminate con i bauli dello stesso colore, un' eliminazione ( "crush" ) di almeno due gemme fa partire un attacco diretto alla griglia avversaria, sotto forma di Stones (che dopo aver occupato la griglia per alcuni turni si trasformano in gemme )
ma a parte ciò, Diamonds può essere (anzi, andrebbe) considerato una palestra, e un esempio, di sviluppo Test Driven Object Oriented (con uso abbastanza intenso di design patterns di base) Test Driven, e con il meno possibile di commenti nel codice (pressochè superflui se il codice è autoesplicativo e racchiuso in metodi di lunghezza e complessità ciclomatica ridotte)
sviluppata interamente in Java.Grazie.si era scelto Java per un paio di motivi:
Eclipse, l' IDE con i più evoluti (almeno all' avvio del progetto e tra i tool disponibili gratuitamente) strumenti di refactoring, e code assist ( almeno per java)
per l' integrazione di eclipse con l' infrastruttura di unit testing (junit, pressochè vitale per il TDD ) e tramite un plugin, con il repository subversion
di cosa/chi avete bisognoin senso lato, di qualcuno che abbia, o almeno che voglia acquisire, dimestichezza con lo sviluppo a test
nello specifico, di qualcuno che voglia darsi una letta alla code base, rendersi conto dello stato attuale della test coverage (selezionando il task cover-report nelle opzioni "Run..." della build Ant, in Eclipse) e di come affrontare alcuni problemi di lunga data (ad esempio il refactoring di BigGem, che avrebbe fatto sì che le gemme aggregate siano viste allo stesso modo delle altre Droppable, che io sappia non è più stato terminato perchè chi lo intraprendeva si scontrava con il design di quella parte di codice)
in effetti, ci sarebbero anche caratteristiche il cui studio e sviluppo potrebbe procedere a latere, come il gioco via rete ...
e tutte le informazioni tecniche e non che potete darmi, in moda da farmi un'idea sul fatto che io possa o meno aiutarvihttp://www.hwupgrade.it/forum/showthread.php?t=1019019
http://www.hwupgrade.it/forum/showthread.php?t=1017489
per quanto riguarda struttura e funzionamento del gioco, credo la risposta più coerente con lo spirito del progetto e che ti avrebbero dato i membri storici del team sia all' incirca "il codice stesso fornisce la documentazione"...
in effetti la documentazione "ufficiale" si è sempre limitata all' essenziale, a un development plan con le funzioni da implementare nella release ( ma temo non sia più stato aggiornato dall' interruzione dei lavori avvenuta l'anno scorso), perchè la codebase essendo soggetta a refactoring continuo, era troppo "volatile" per documentarla esaustivamente
ciononostante credo di poter dire che da allora si sia relativamente stabilizzata, e la struttura dei package dovrebbe aiutare nella comprensione... comunque, come punto di partenza, considera che
l' entry point è nella classe Game, la quale in sostanza istanzia un oggetto GameLoop e ne usa i (due) metodi di loop
a parte il thread della musica di sottofondo (che però gestiamo solo tramite chiamate playMusic() e stopMusic() dal gameloop alla sezione audio dell' engine, quindi non esplicitamente ) il gioco è praticamente un ciclo di polling con stati, action ed eventi
il polling itera sulle Droppable presenti in griglia chiamandone il metodo update() (gestire il comportamento delle Droppable, quindi ad es cambiare sprite, è delegato a loro stesse) con lo stato attuale del Timer come argomento (notare che il Timer in Diamonds se non ricordo male va aggiornato esplicitamente o spostato in avanti di un numero arbitrario di millisecondi, prima che una nuova chiamata a getTime() possa restituire un valore diverso dalla precedente)
gli stati sono quelli in cui si viene a trovare la Grid dopo l' inizio della partita, partendo da un oggetto GemspairOnControlState - questo stato cede il controllo a uno che non gestisce la gempair in gioco (in effetti non c'è più nessuna gempair in gioco ) nè l' input, quindi al termine della caduta della pair il gioco "si ferma" per un attimo per controllare se ci sono delle crush da eseguire (controlli ed azioni operate tramite oggetti che ereditano da AbstractGridIteration e implementati nel package it.diamonds.grid.action), dopodichè si riprende da un nuovo gempaironcontrolstate, in pratica marcando un nuovo turno
gli eventi generati dai comandi utente sono gestiti da un Input associato al playfield del singolo giocatore ( primo o secondo ) - questo fa da tramite tra un dispositivo di input "concreto" (meglio, la sua classe proxy) su cui si registra come listener, e degli event handler , inoltre traduce gli eventi provenienti dalla classe dell' input device di cui sopra, in eventi target standard (questo era stato introdotto in vista della personalizzazione dei tasti)
i test: osservando la strutturazione dei subpackage sotto it.diamonds.test.* , dovrebbe essere abbastanza chiaro a quali classi del codice vero e propri si riferiscono quali test ...
è però da tenere presente che i test case possono non essere comprensibili come forma e come requisiti del codice che testano, inoltre la copertura andrebbe migliorata (alcune classi sono scarsamente testate) - per questo motivo tempo fa avevo proposto un sub task di revisione e report dei test, su cui poi lavorare ( l' obiettivo sarebbe renderli più consoni ai canoni e allo spirito del progetto - quindi i test, oltre a coprire adeguatamente il codice avrebbero dovuto essere concisi, atomici, autoesplicativi, manutenibili)
il volonteroso redcloud aveva prodotto un documento preliminare, che chi ha iniziato a seguire ha aggiunto al repository, con l' avviso di aggiornarlo insieme ai test modificati
(sempre che abbiate ancora bisogno di membri per il vostro team), di membri, intesi come membri attivi c'è una grave penuria :(
personalmente stavo portando avanti nel tempo libero l' integrazione del Controller (aka joypad) , purtroppo sto per partire per non tornare nei pressi di una postazione internet-connessa prima di un mese, quindi non avrò modo di seguire il progetto e mi toccherà nominare un sostituto a cui fare riferimento .... chi sarebbe disponibile? Raffaele?
quindi sì, di nuovi membri ci sarebbe sempre bisogno, posto che ribadisco, siano interessati ad entrare nell' ottica ...
Il Creativo
26-07-2007, 02:52
ciao, rispondo in dettaglio più avanti :)
...
Grazie per la tua risposta che, devo dire, è stata molto chiara ed esplicativa, ti dirò quello che ho capito e quello che posso fare:
intanto ho capito che il titolo non è molto dissimile dai vari bejeweled/puzzle games(anzi, credo che l'idea vi sia venuta proprio da lì), eccetto che per alcuni particolari... dovrei avere abbastanza dimestichezza con tutti i concetti da te citati eccetto per l'uso di server proxy e l'interfacciare i client per giocare in rete(dovrebbe essere comunque abbastanza semplice in java) ma credo che l'abbiate già fatto dato che vedo anche alcuni pacchetti scaricabili, mi duole notare(senza voler offendere o mancare di rispetto ad alcuno) che, causa impegni vari di ognuno di voi, il progetto procede a rilento e comunque abbastanza male organizzato(se non è così mi sono sbagliato ma meglio così). Quello che posso fare io per il momento è portare il gioco nel pc che uso anche per programmare e studiarmi un pò il codice, anch'io uso Eclipse, comunque, anche se prendessi parte al progetto non potrei dedicarvi molto tempo dato che studio per laurearmi(in informatica) possibilmente ad Aprile, considerate che stò studiando anche d'estate, ma impiegherei volentieri quell'oretta serale che usualmente uso per videogiocare, per il progetto in questione...
redcloud
26-07-2007, 11:05
Ciao, benvenuto tra noi :D Per quanto riguarda il tempo non devi preoccuparti. Nella tornata precedente, il progetto è "fallito" perchè credo che (essenzialmente) la maggior parte dei componenti del team non ha avuto più tempo a disposizione da dedicare al progetto. In questa nuova tornata, limiti stringenti di tempo non ne abbiamo (in teoria), quindi un qualsiasi apporto, seppur discontinuo, è di sicuro giovamento!
jappilas
26-07-2007, 20:08
Grazie per la tua risposta che, devo dire, è stata molto chiara ed esplicativadi nulla, figurati
intanto ho capito che il titolo non è molto dissimile dai vari bejeweled/puzzle games(anzi, credo che l'idea vi sia venuta proprio da lì),diciamo che il nostro "customer" era un appassionato di Puzzle Fighter (http://en.wikipedia.org/wiki/Super_Puzzle_Fighter_II_Turbo_HD_Remix) :D
ah piccolo inciso - quando lo sviluppo procedeva a regime (quando potevamo dire di lavorare in extreme programming , anche se fisicamente distanti) e come ti accorgerai se esplori questa sottosezione leggendo anche i thread più vecchi di un anno, si lavorava seguendo:
un coach che faceva rispettare le coding guidelines, minacciando di "spezzare le ditine" a chi osasse committare modifiche non testate o rompere la build (build rotta se ant fallisce in uno qualunque dei suoi task, cioè l' esecuzione della batteria dei test, e il checkstyle programmato secondo criteri stretti - ma se leggendo il codice ti apparirà chiaro è merito del rispetto di quei criteri, come è colpa del suo mancato rispetto qualora non ti sembri)
e un customer ("cliente") che indirizzava lo sviluppo esponendo i "comportamenti desiderati" del gioco, dalle cui descrizioni si pianificavano i task svolti dai membri programmatori , facendo solitamente seguire ogni tornata di task da un esaustivo controllo e refactoring completando quindi un "ciclo" - in più il nostro customer era anche il reponsbile grafico, quindi... :cool:
eccetto che per alcuni particolari... dovrei avere abbastanza dimestichezza con tutti i concetti da te citati eccetto per l'uso di server proxy uhm, gestire i server proxy non dovrebbe essere necessario - io mi riferivo alle classi proxy, ad esempio la LWJGLController di cui mi sto occupando, che interfaccia il resto dell' engine con il funzionamento della libreria LWJGL per quanto riguarda i joypad (analogamente a quanto fa LWJGLKeyboard già presente) ;)
e l'interfacciare i client per giocare in rete(dovrebbe essere comunque abbastanza semplice in java)infatti, per quello che ci serve basterà molto probabilmente usare coppie Socket / ServerSocket - ma il problema non è lì
il fatto è che nel caso del gioco via rete, non è stato definito formalmente il protocollo di comunicazione ( a livello algoritmico, figurarsi binario) tra due sessioni di gioco attive ( o magari *in attesa* di connessione dell' avversario sfidante)
quindi per aggiungere la funzionalità di network gaming rispettando lo spirito del progetto si dovrebbe partire dalle basi, e procedere a piccoli passi... questo scrivendo volta per volta i requisiti funzionali in forma di test ovunque possibile ( e mockando laddove non possibile testare direttamente) e programmando nel modo e per il caso più semplice per poi eventualmente aggiungere e correggere cumulativamente
una task list esemplificativa, sicuramente passibile di raffinamenti qualora il customer passi da queste parti, potrebbe essere:
- far sì che da menu siano selezionabili le opzioni "join game" e "host game"
- far sì che selezionando join game si mandi un messaggio di "join" all' host remoto in lan indicato da OpponentAddress in GameConfig (inizialmente indirizzo statico modificabile editando il file di testo )
- far sì che selezionando host game il gioco resti in attesa del messaggio di join da parte di un avversario sulla stessa lan
- far sì che ricevuto il messaggio di "join" si invii un messaggio di conferma e inizio partita
- far sì che in entrambi i casi la seconda griglia sia associata al giocatore remoto invece che al dispositivo di input
- eccetera
mi duole notare(senza voler offendere o mancare di rispetto ad alcuno) che, causa impegni vari di ognuno di voi, il progetto procede a rilento e comunque abbastanza male organizzato(se non è così mi sono sbagliato ma meglio così). in effetti la situazione attuale del team è completamente diversa da quando il team lavorava "a regime" all' inizio ...
al tempo stesso, a un certo punto il codice e la batteria dei test hanno cominciato a diventare complessi e convoluti in più punti, rendendo impossibile procedere per Cicli > "Storie" > Task al ritmo serrato (*) iniziale :(
conta che ogni ciclo durava in media una settimana o due e comprendeva 5 -6 task , svolti ognuno in breve tempo secondo la procedura:
[analisi dei requisiti del task e stesura della Test List > scrittura dei test ( uno alla volta) > scrittura del codice più semplice che fa passare il test ]
finchè i test della test list non sono stati tutti scritti e fatti passare dal codice, (barra verde in junit, build successful in ant - > commit solo a questo punto)
per poi rifattorizzare il codice prodotto una volta finito il task con del codice semplice
Quello che posso fare io per il momento è portare il gioco nel pc che uso anche per programmare e studiarmi un pò il codice, leggendo il codice dovresti notare un certo modo di scrivere lo stesso - se non lo noti meglio ancora perchè potrebbe essere più vicino al tuo personale stile di programmazione ;)
ma siccome il senso di adottare e costringersi a seguire una coding guideline rigida come quella era avere alla fine codice di alta qualità comprensibile a tutti, compreso con un minimo sforzo anche chi non vi era mai venuto in contatto prima, laddove non sia chiaro questo obiettivo non è stato centrato
quindi se contribuissi sul forum le tue impressioni sulla code base sarebbe già un buon contributo ;)
anch'io uso Eclipse, ottimo :)
comunque, anche se prendessi parte al progetto non potrei dedicarvi molto tempo dato che studio per laurearmi(in informatica) possibilmente ad Aprile, considerate che stò studiando anche d'estate, ottimo (2)
la cosa che meno vorremmo (parlo per me ma credo gli altri direbbero lo stesso) è che qualcuno sacrifichi i propri impegni per diamonds - che è sempre stato un progetto portato avanti con serietà -finchè si poteva - ma sempre nel tempo libero...
diamonds è un progetto didattico - in questo senso è stato utile chi vi ha lavorato, può essere utile anche a chi solo legga il codice, se ne può imparare qualcosa
ma impiegherei volentieri quell'oretta serale che usualmente uso per videogiocare, per il progetto in questione...ottimo (3) :)
in diamonds un singolo lavoro non doveva prendere più di mezz' ora o un' ora alla volta, sia che si svolgesse uno dei task singoli postati nel thread di un certo ciclo sia che si prendesse una parte di un task più impegnativo ( come poteva essere ad es un refactoring coinvolgente più classi ) ... in quest' ultimo caso era anche un modo per abituarsi a "programmare" il proprio modo di lavorare ;)
Il Creativo
26-07-2007, 21:51
Bene, grazie a tutti per la disponibilità, tornerò a postare sul progetto non appena avrò le idee più chiare, probabilmente già stasera vedrò un pò il codice per iniziare a farmi un'idea, generalmente non ho grosse difficoltà nel comprendere il significato del codice anche senza commenti, ovviamente nel caso in cui questi non sia troppo intricato, quindi più avete scritto il codice in maniera modulare(spero di non trovarmi davanti a classi enormi), prima lo comprenderò...
il problema più grande, a quanto vedo, è quello che affligge ogni progetto che vuole essere programmato come si deve: il testing, questa è l'ennesima prova di quanto un team possa spendere anche più di metà del tempo e delle risorse solo per questa fase e, se ho capito bene avete preferito improntare uno sviluppo a spirale(ciclico), quindi rifattorizzando il codice alla fine di ogni ciclo(o sbaglio?), se è così, in questo momento usate ancora un tipo di sviluppo tale, congiuntamente ad extreme programming o avete preferito cambiare qualche particolare?
Un ultimo punto: come mai avete preferito XP programming? Perchè secondo voi non poteva essere possibile avere le idee chiarissime già dall'inizio? Non conveniva progettare tutto il sistema perdendo più tempo all'inizio ma avendo meno grane in seguito?
Comunque per il momento cerco di farmi un idea più chiara io stesso...
mi rifarò vivo tra alcuni giorni...;)
Il Creativo
29-07-2007, 14:06
Non riesco ad accedere al Repository... qualche suggerimento?:confused:
Non riesco ad accedere al Repository... qualche suggerimento?:confused: il repository di Diamond Crush è basato su SubVersion e vi puoi accedere in due modi:
1) interfaccia web di SourceForge; ecco il link: http://diamondcrush.svn.sourceforge.net/viewvc/diamondcrush/
2) con un client SubVersion (per esempio Subclipse, che è un plugin di Eclipse) seguendo queste istruzioni: http://sourceforge.net/svn/?group_id=191341
in particolare occhio al protocollo quando inserisci l'URL: è https, non svn.
Il Creativo
29-07-2007, 15:00
il repository di Diamond Crush è basato su SubVersion e vi puoi accedere in due modi:
1) interfaccia web di SourceForge; ecco il link: http://diamondcrush.svn.sourceforge.net/viewvc/diamondcrush/
2) con un client SubVersion (per esempio Subclipse, che è un plugin di Eclipse) seguendo queste istruzioni: http://sourceforge.net/svn/?group_id=191341
in particolare occhio al protocollo quando inserisci l'URL: è https, non svn.
Il mio problema è che nel computer che uso per programmare non ho la connessione ad Internet, quindi dovrei scaricare il source-code direttamente dal databse repository per poi trasportarlo in un secondo tempo su eclipse nell'altro pc, non posso in alcun modo importarlo direttamente su eclipse, solo che seguendo tutti i passi spiegati nella sezione Repository e cercando di caricare il codice tramite client SubVersion, già scaricato, installato e funzionante mi dà un messaggio di errore dicendomi che la locazione da me ricercata è inesistente, sia usando svn che https...:muro: , qualcuno di voi che possiede il codice aggiornato all'ultima release me lo può passare?
quale client SubVersion hai installato sul computer connesso ad Internet, Tortoise SVN?
altra domanda: come mai il client SVN ce l'hai potuto installare ed Eclipse invece no? :confused:
Il Creativo
29-07-2007, 17:07
quale client SubVersion hai installato sul computer connesso ad Internet, Tortoise SVN?
altra domanda: come mai il client SVN ce l'hai potuto installare ed Eclipse invece no? :confused:
Si, ho installato Tortoise, il motivo per cui non ho eclipse qui è che il pc è poco potente, incasinatissimo già di suo e usato prettamente per navigare e utilizzato da tutta la famiglia, mentre il pc mio è senza internet in quanto ho preferito avere un sistema a parte sempre pulitissimo e velocissimo(infatti non lo formatto da quasi 2 anni)... comunque il problema principale è che quando cerchi di accedere al repository tramite tortoise vengono generati questi errori:
Error: PROPFIND request failed on '/diamondcrush'
Error: PROPFIND of '/diamondcrush': Could not resolve hostname `diamondcrush.svn.sourceforge...t': Il nome richiesto è valido e presente nel database ma non possiede i dati associati corretti per la risoluzione. (https://diamondcrush.svn.sourceforge...t)
a parte il fatto che non concordo molto con la tua scelta di isolare il PC da development (cosa ti credi che io abbia mai formattato negli ultimi 2 anni? :D è sufficiente avere un po' di senno), comunque a me Tortoise con questo URL funziona regolarmente, fa tutto il checkout (provato ora):
https://diamondcrush.svn.sourceforge.net/svnroot/diamondcrush/trunk
nota che alla fine dell'URL ho messo trunk perché tutto quello che sta fuori da trunk occupa una marea di spazio e probabilmente non ti interessa; il progetto fondamentalmente sta tutto in trunk. ma in realtà avrebbe dovuto funzionare anche se avessi voluto fare il checkout di tutto quanto... controlla giusto che Tortoise non aggiunga un numero di porta alla fine dell'URL (FireFox me lo faceva perché si confondeva sul fatto che il protocollo fosse https anziché svn, non si sa mai).
Il Creativo
29-07-2007, 19:09
a parte il fatto che non concordo molto con la tua scelta di isolare il PC da development (cosa ti credi che io abbia mai formattato negli ultimi 2 anni? :D è sufficiente avere un po' di senno), comunque a me Tortoise con questo URL funziona regolarmente, fa tutto il checkout (provato ora):
https://diamondcrush.svn.sourceforge.net/svnroot/diamondcrush/trunk
nota che alla fine dell'URL ho messo trunk perché tutto quello che sta fuori da trunk occupa una marea di spazio e probabilmente non ti interessa; il progetto fondamentalmente sta tutto in trunk. ma in realtà avrebbe dovuto funzionare anche se avessi voluto fare il checkout di tutto quanto... controlla giusto che Tortoise non aggiunga un numero di porta alla fine dell'URL (FireFox me lo faceva perché si confondeva sul fatto che il protocollo fosse https anziché svn, non si sa mai).
Magari hai ragione, ma ho preferito delegare i 2 computer a funzioni diverse... prima o poi acquisterò un notebook e lo collegherò alla wireless eliminando stò casino...:D
comunque ti ringrazio dato che il link che mi hai dato ora funziona, attualmente stà scaricando il codice su una cartella in questo pc... io avevo usato i vari link postati nella sezione repository, ma non ne funzionava nemmeno uno:confused: ... vediamo se finalmente posso caricare su eclipse una versione modificabile con tanto di file .java e non soltanto col bytecode precompilato.
^TiGeRShArK^
30-07-2007, 10:57
Magari hai ragione, ma ho preferito delegare i 2 computer a funzioni diverse... prima o poi acquisterò un notebook e lo collegherò alla wireless eliminando stò casino...:D
comunque ti ringrazio dato che il link che mi hai dato ora funziona, attualmente stà scaricando il codice su una cartella in questo pc... io avevo usato i vari link postati nella sezione repository, ma non ne funzionava nemmeno uno:confused: ... vediamo se finalmente posso caricare su eclipse una versione modificabile con tanto di file .java e non soltanto col bytecode precompilato.
e non fai prima a comprare un pennino usb wifi che ormai lo trovi pure nei pacchetti delle patatine quasi quasi? :stordita:
Il Creativo
30-07-2007, 15:07
e non fai prima a comprare un pennino usb wifi che ormai lo trovi pure nei pacchetti delle patatine quasi quasi? :stordita:
può essere, ma ti ripeto, è una mia fissa quella di tenere il pc in sign pulitissimo e con meno programmi in background possibili:cool: ...
p.s. è troppo forte la tua firma, ogni volta che la leggo mi fa morire dal ridere
personalmente stavo portando avanti nel tempo libero l' integrazione del Controller (aka joypad) , purtroppo sto per partire per non tornare nei pressi di una postazione internet-connessa prima di un mese, quindi non avrò modo di seguire il progetto e mi toccherà nominare un sostituto a cui fare riferimento .... chi sarebbe disponibile? Raffaele?
Ehi jappi guarda che io questo mese praticamente non sarò quasi mai online causa vacanza. Riguardo lo sviluppo riprenderò sicuramente le attività appena rientro :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.