Newsgroup: it.comp.lang.c++
Titolo: UML e progettazione PRE sviluppo

Non ci riesco, non c'e' nulla da fare
non riesco a sedermi a tavolino (a pc spento) e decidere cosa e come sviluppare
ho provato a fare i diagrammi, i piu' importanti mi sembrano quello delle classi e il diagramma di sequenza (che se non ci sono thread di mezzo mi sembra + che utile)
ho provato a prendere per spunto questo progetto
http://www.ninjacross.it/pagina63.htm
e questo diagramma
http://www.3000web.it/Utenti/11103/Diagramma_NinjaEyes.gif
ma non combino nulla (sara' penso la differenza tra programmatore e ingegnere a fregarmi!)
Insomma, l'idea e' di creare un motore 3d (lo so, lo so...) e un giochetto di poche pagine per provarne il funzionamento (magari facendolo diviso fra client e server... mah per ora siamo a carissimo amico)
Dicevo, lo so, penserete eccone un altro che si crede mandrake, ma in verita' lo scopo e' soltanto imparare, e magari dopo trovare un gruppo di progetto con cui combinare qualcosa di serio (magari!), ho combinato qualcosa, tipo visualizzare a schermo un oggetto 3ds textures e luci (+ o), incapsulando le procedure in classi cosi' come mi venivano, ma piu' vado avanti piu' non riesco a collegare i pezzi, a ricodrarmi come e cosa ho scritto, cambio spesso la struttura del tutto e idiozie simili...
Insomma, vorrei capire come progettare un giocattolino del genere, niente di eccezionale, e' solo a scopo didattico, per imparare a sviluppare qualcosa di un po' + complesso delle solite simulazioni di ascensori o simili (ho studiato per l'uni sui Deitel&Deitel, e il progetto dell'ascensore in questione e decisamente semplice...)

 approcciarti alla progettazione
i consigli cerco ;)
si', c'e' pure sul libro: definisci il problema, recupera i nomi dal testo esclusi gli inutili e fanne delle classi...
solo che non mi e' uscito granche': cosa si potrebbe richiedere piu' che al gioco al motore grafico?
l'audio lo escluderei: non c'entra, son con linux e dovrei usare le sdl: verrebbe portabile ma si allungherebbe la questione;
direi che dovrebbe caricare da una serie di files una scena composta da + oggetti 3d, creare un'interfaccia grafica 2d sopra la scena e gestire l'input dell'utente (mouse e tastiera...)
fatto cio' mi dichiarerei + che soddisfatto: il problema e' pensare a una serie di classi e rispettive competenze e a come farle interagire
che altro consigli ?

 che altro consigli ?
Di fare un ulteriore giro e scomporre le funzionalita' che hai elencato
in passi/elementi/classi piu' semplici necessari alla loro
realizzazione. L'ottimo sarebbe che per il momento riuscissi a pensare
in termini di problemi da risolvere e solo in un secondo tempo a come
risolverli. Ad esempio:
- Come trovi e apri i file?
- Come sono strutturati i file?
- Quali sono gli oggetti da rappresentare?
e cosi' via.
Ciao,
Nicola

 ha scritto nel messaggio
news:20051013000730...@nomail.org...


Concordo con Pibru. Prima di tutto devi capire che cosa fa un motore
grafico, e questo è fondamentale per poter decidere che cosa deve essere
sviluppato.
Ad esempio.
1) E' necessario che un motore grafico gestica l'input da utente ? Se si
(anche se io penso di no, nel senso che questa non il suo core, ma un
accessorio ). Allora devi capire che cosa vuol dire poter prendere dati da
tastiera piuttosto che da mouse, piuttosto che da joystick, che sono di
diversi tipi. tutti questi avranno sicuramente delle parti in comune, ovvero
da un lato avrai la parte specializzata, una per ogni periferica, nel caso
più brutto, per leggere i dati che arrivano da una data periferica, mentre
ci sarà una parte comune a tutte che è quella che manda i dati alla motore.
2) Caricare dati da files. Questo significa anadare a leggere dati su
harddisk o su un altro dispositivo (che in futuro potrebbe essere la rete)
quindi modulo per poter eseguire I/O su diversi dispositivi.
3) Domanda. Il punto 2 non potrebbe essere, come dire, il lato server del
punto 1 ?
4) un motore grafico deve gestire la matematica. -> Creare modulo che mette
a disposizione funzioni matematiche complesse, tipo matrici. oppure cercaer
un rete una libreria GPL che lo fa per te.
5) un motore grafico deve poter gestire il "mondo". Quindi, modulo per la
gestione delle coordinate tridimensionali vari calcoli per lo spostamento di
un punto. E qui dovresti porre la domanda di cosa succede se due punti si
incontrano, ovvero la gestione delle collisioni.
Ovvero il motore deve poter gestire la goemetria.
6) un motore grafico deve poter gestire la visualizzazione delle texture,
quindi poterle applicare ad una geometria, poterle caricare da disco, etc.
Come vedi, non ho parlato di codice, ma ho cercato di pormi delle domande.
Nel momento in cui trovi le risposte incominci ad avere un quadro di quello
che il motore deve fare, e di conseguienza, puoi incominciare a buttare giù
un primo disegno delle classi di cui hai bisogno.
Ciao,
Maurizio.

 
Hai ragione, e ti ringrazio prima di tutto per la loquacita'
prima di tutto una dimenticanza: quello che ho fatto l'ho fatto con le opengl, che gestiscono anche l'input da tastiera...
Ma non dovendo (assolutamente) pensare al codice, ma progettare le classi da usare e come devono interagire tra loro, direi che bisognerebbe separare le diverse funzionalita (anche se poi nell'implementazione si possono usare le opengl sia per il 3d che per l'input che per la gui in 2d...)
dovendo definire il progetto direi:
sviluppare un motore grafico adatto per la rappresentazione di ambienti tridimensionali (e' la definizione + vaga che potevo trovare ;) )
l'obbiettivo e' rappresentare su uno schermo una scena tridimensionale caricando da file oggetti 3d gia' preparati e dando loro delle caratteristiche reali (pensavo a una persona in movimento, degli oggetti che si spostano e/o rotolano e/o cadono se urtati...)
(...percio') gestione delle collisioni fra oggetti in movimento e oggetti immobili o spostabili
interfaccia grafica che permetta tramite il mouse di interagire con l'utente (che so selezione di un oggetto e spostamento o rotazione {spingere una palla su un biliardo, cose cosi'}
(...percio') gestione dell'input dell'utente tramite tastiera e mouse
cercherei insomma di abbracciare le problematiche + interessanti, applicandole a un progetto e tirandone fuori qualcosa di non complicato ma di usabile
scrivendo quei punti ho pensato proprio al gioco del biliardo sarebbe un buon progetto che copre tutti i punti (scena 3d precaricata [biliardo e stanza circostante] collisioni[tra stecca e palle e bordi], input dall'utente, interfaccia 2d per spostare la visualizzazione attorno al biliardo [che so anche solo 4 frecce cliccabili col mouse]...
mi sembra una buona idea, che ne dici?

 ha scritto nel messaggio 
news:20051013184607...@nomail.org...



Deciso che mi servono quelle informazioni, e deciso il tipo di progetto da sviluppare (la sala biliardo mi pare adatta), che faccio?
ps: non sara' un progetto semplice, ma visto che e' a scopo didattico, posso evitare un po' di fronzoli e dedicarmi alla progettazione dell'insieme...

 in passi/elementi/classi piu' semplici necessari alla loro
Bueno, rimaniamo alla progettazione;
una serie di classi basi
game video scene gui input collision
dovrebbe essere scontata (o no?), il brutto viene nel come farle comunicare fra loro (e le varie sottoclassi)
in pratica come iniziereste il diagramma delle classi?
       game
       # # #
       |   |   |
input   |   scene ----->video
   ^      |                        ^
    |---gui--------------------|
game direi che e' la classe di partenza, composta da un'interfaccia grafica, la scena 3d e la partita vera e propria
mi sono gia' perso ...

mi sembra una buona idea, che ne dici?
Ogni idea è in se buona e cattiva. L'importante e che ti possa insegnare
qualcosa.
comunque mi sa che se vuoi rimanere al livello di progettazione del tuo
gioco, questo non è il ng più adatto.
Ciao,
Maurizio.

>scrivendo quei punti ho pensato proprio al gioco del biliardo sarebbe un
si è un ambiente piuttosto adatto, dato che le condizioni di 
urto sono elementari e anche la geometria la più semplice 
possibile. Già un po' più si complicano se inserisci le 
rotazioni, coefficienti di attrito negli urti tra biglie e con 
la sponda, e cominci a inserire condizioni (tipo al 
conservazione di momento angolare oltre alla quantità di moto 
normale etc etc).
Un po' di anni fa avevo fatto un biliardo a forma di cerchio 
(più semplice). Ma con gli effetti continuavo a sbagliare 
qualcosa, perché le traiettorie non erano sempre realistiche (e 
in caso di differenze percettibili purtroppo il programma è 
sbagliato e la realtà ha ragione, eh he he he).
Ma era porcheria scritta in C priva di design, che anzi scriveva 
direttamente nel frame buffer video, quindi portabilità zero, 
funzionava solo nell'unico misero modo grafico che mappava 
l'intero schermo nei 64 KB dell'allora frame buffer residente in 
RAM, e quindi non mi ero proprio posto il problema di un motore 
grafico vero e proprio : vedevo ed usavo lo screen come un 
grosso array (il cui indirizzo era fisso e mi veniva restituito 
dal bios quando selezionavo la modalità grafica adatta.
Già a risoluzioni superiori il frame buffer conteneva solo 
porzioni dello schermo, e non sono mai riuscito a dire al bios 
di fare lo shuffle dei vari segmenti mappati come serviva a me, 
tanto per capire il livello misero)
Cmq, ti prendi una gran bella gatta da pelare ! Buona fortuna
ciao
CCCP++Mario


 gioco, questo non è il ng più adatto.
Daccordo, Maurizio, il gioco non e' importante: se credi consigliami un altro
progetto, per me l'importante e' imparare a usare utilmente la oop
ps: grazie della pazienza

 CCCP++Mario
Grazie Mario, ma non mi mollerai qua con la patata bollente no ?

 Grazie Mario, ma non mi mollerai qua con la patata bollente no ?
uhm, in realtà evitando di esprimermi sto facendoti un favore 
.... non ho MAI steso uno schema preliminare UML in vita mia ! 
Sono forse le mie basi adeguate ad esprimere pareri nel merito ? 
Sarei sadico a sviarti con consigli abborracciati di qualcosa 
che non so nemmeno usare !
Sorry
Ciao
Soviet_Mario

 Sorry
urka...
ahem ma quando devi progettare qualcosa di complicato da dove cominci ?


Hai provato a partire da qualcosa di più semplice?
Un engine 3d non è assolutamente banale...
se hai problemi di design magari potresti pensare a quacosa che 
gestisca, per esempio, i mattoncini del tetris, piuttosto che fare un 
engine cross platform, che utilizza il multitexturing, animazioni, ecc, 
ecc...
Procedi per piccoli passi.
Io sto provando a fare un engine 2D e già mi sono reso conto di aver 
commesso degli errori di design!
Il segreto però è andare avanti... è inutie azzerare di nuovo il 
progetto e rifarne un altro; così non riuscirai mai a finire il motore.
Si procede anche con gli errori, secondo me, e poi alla release 1.1 si 
vedrà di aggiustare. Se gli errori sono tanti, farai una versione 2.0, 
magari riscrivendola da zero, ma con l'esperienza della versione 1.0!
Pensa a qualcosa da realizzare che sia sempice, pensa di *riutilizzare* 
quelle semplici cose in futuro per farne di più complesse.
Acquisendo esperienza ti sarà più facile avere una migliore visione 
d'insieme.
Diego

 d'insieme.
e' che da autodidatta se fai un errore (logico che sia) te ne accorgi
pure, ma se fai una caxxata come a organizzazione non ti corregge mica
nessuno...
Ps: ho fatto un diagramma di sequenza: su carta funge bene, infatti ero
tutto soddisfatto, solo che poi arrivato fra il gioco e il video,
modificando quanto fatto, mi son reso conto che visto che opengl ha un
foxxuto main_loop, il diagramma che ho fatto e' sballato:
se metto il loop in Game, dove ne ho previsto uno mio, vuol dire che
game deve conoscere le opengl, cosa assurda se dovevo organizzare le
classi per compiti; se metto il glutMainLoop in video, non ho + il
controllo nel loop principale di game...
insomma una tristezza ...

 
Ti premetto che non ho mai sviluppato un motore 3d, se vuoi però, posso 
dare un'occhiata al diagramma. Magari 2 teste sono meglio di una!
Mandamelo per posta.
Ciao!
Diego

progetto, per me l'importante e' imparare a usare utilmente la oop
intendevo che questo è un ng che parla di c++ non di progettazione o di uml,
quindi ti stavo consigliando di cercare un ng più adatto alle tue esigenze.
Ciao,
Maurizio.

 Mandamelo per posta.
ah ma la parte 3d ancora non c'e' (mi soddisfo con poco)
mi piaceva la logica semplice con cui l'ho fatto, solo che le opengl
usano un loro loop e mi hanno fregato!!!
Se vuoi (e' a matita su un foglio) lo passo sotto scanner e te lo mando
per posta (ho il 56k percio' e' mio interesse non intasarti la posta )
mandami l'indirizzo
Ciao a te e grazie


Ero convinto fosse adatto, tu quale mi consigli ?
(non te ne uscire con giochi.sviluppo pero' :P)

Ero convinto fosse adatto, tu quale mi consigli ?
E' adatto nel momento in cui stai scrivendo il tuo codice in C++ ed hai
problema su quello. Al momento, almeno in questa fase, il tuo è più un
problema di design che non di codice. Quindi dovresti postare il tuo
problema su un ng che si occupa di design/uml. Dove troverai più persone
interessate ad approfondire la questione.
Ciao,
Maurizio.