Newsgroup: it.comp.lang.c++
Titolo: Organizzazione delle classi in un mini motore grafico

Ciao e rieccomi di nuovo
ho semi abbandonato l'uml e mi sono rimesso a codare
(a proposito mi sapete consigliare un ''disegnatore'' di grafici uml
libero per linux?)
ho aggirato il loop forzato di glut in opengl usando glx, il che
limita ai sistemi X window il (unix like) il risultato di tanto sudore
ma non e' grave, sto preparandomi le classi basi per fare qualcosa di
simile con windows e le directX (che ancora non conosco)
Se ricordate il progetto del biliardo di cui ho parlato qualche giorno
fa, ho preparato la parte 3d che chiamo scena e quella 2d che chiamo
gui (la storia sta diventando moolto lunga, ma divertente)
e sto cercando di organizzare gli eventi da associare a delle azioni
In pratica sto ancora al menu ;)
e volevo un parere sulla logica che sto usando, quale dovrei usare ecc.
allora la logica e' questa
dentro la classe Game avro' un qualcosa tipo start() (avvio del gioco,
non della partita) che chiamera' qualcosa tipo intro() e subito dopo
main_menu() (fin qua la logica e' semplice)
In main_menu() ci sara' qualcosa che carica i dati del menu del gioco
da un file (da fare, per ora li metto a manina) dopodiche' un loop del
tipo
while (non e' richiesta l'uscita) {
  interfaccia.disegna()
  // gia' pronta, disegna prima il 3d e poi la gui
  while (event.finche'_recuperi_un_evento() ) {
    switch(event.tipo)
    case: TIPOFINESTRA
      azione_assegnata();
    case MOUSE
      passa i dati all'interfaccia
    case TASTIERA
      comesopra
  }
}
 
dopodiche' interfaccia controlla che so, se e' un click del topo, se ha
preso la gui e se ha beccato un bottone allora esegui l'azione, se sta
sopra un bottone ma niente click evidenzialo, se non ha preso la gui
controlla cosa ha preso nella scena 3d (che so l'utente vuole
selezionare una stecca del biliardo, dare una legnata all'altro
giocatore ecc ;) )
su carta il discorso sembra funzionare,
in pratica ho un po' di problemi a organizzare le classi per
collaborare tra loro, molti dei quali riguardano la collocazione fisica
delle classi e cose come quale fra due classi che devono collaborare
deve compiere l'azione
Il mio dubbio e' che se le cose si complicano cosi' solo per un menu',
quando staro' nel metodo avvia partita mi ricovereranno alla neuro
Sapete consigliarmi una logica + semplice, o magari solo + logica su
come organizzare il tutto ?
Un grazie anticipato a tutti coloro sono arrivati a leggere fin qua :)

 come organizzare il tutto ?
Razionalizza su carta i tuoi obbiettivi, i tuoi use-case, le tue
classi... non è un lavoro da cinque minuti.
Ho provato anche io a scrivere una piccola engine per adventure games,
andando più o meno "a casaccio", e comunque non rispettando i principi
della SWE. Risultato: ho provato a riscriverla da zero due volte, e poi
ho abbandonato.
Per ogni progetto di discrete dimensioni, che voglia essere estendibile,
e che debba iteragire con molte tecnologie/persone esterne, un buono
studio preliminare è d'obbligo, pena buttare via il proprio tempo.
Okay, poi esistono i geni (uno su un miliardo), ma almeno per quanto mi
riguarda non mi inserisco certo nella categoria.
Ciao,
- --
Matteo Settenvini
FSF Associated Member
Email : 
mat...@member.fsf.org
- -----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d--(-) s+:- a-- C++ UL+++
P?>++ L+++>$ E+>+++ W+++ N++ o?
w--- O- M++ PS++ PE- Y+>++
PGP+++ t+ 5 X- R tv-- b+++ DI+
D++ G++ e h+ r-- y?
- ------END GEEK CODE BLOCK------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - 
http://enigmail.mozdev.org
iD8DBQFDZ1gJUDehq0srSdYRAoTwAKCpQYWDODi26wC8NN4FsC1omXBekQCeI61a
9p9oler7QL/0KMpjwiGwz60=
=vUHA
-----END PGP SIGNATURE-----

 riguarda non mi inserisco certo nella categoria.
sicuro neanch'io, pero' mi appassiona e il tempo, a patto di ottenere
anche piccoli passi avanti, glielo dedico volentieri...
Comunque per quanto riguarda la logica che ho usato, mi pare di capire
che non e' adatta a un progetto decente,
ne hai un'altra da indicarmi ?

 ne hai un'altra da indicarmi ?
non fare le cose da solo è un'altro consiglio che mi passa per il
cervello in questo momento. anche le cose più difficili, se portate
avanti da più persone, diventano affrontabili (con disciplina e
ricordando che troppi cuochi rovinano la cucina).
inoltre quella che tu hai presentato così a grandi linee non è una
logica; è semplicemente un particolare implementativo di una minuscola
parte di un sistema. Progettando di solito si inizia con un approccio
top-down, mentre programmando si fa il viceversa per ovvie esigenze.
Forse quella è la cosa alla quale stare attenti e che viene naturale al
programmatore invertire.
- --
Matteo Settenvini
FSF Associated Member
Email : 
mat...@member.fsf.org
- -----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d--(-) s+:- a-- C++ UL+++
P?>++ L+++>$ E+>+++ W+++ N++ o?
w--- O- M++ PS++ PE- Y+>++
PGP+++ t+ 5 X- R tv-- b+++ DI+
D++ G++ e h+ r-- y?
- ------END GEEK CODE BLOCK------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - 
http://enigmail.mozdev.org
iD8DBQFDa5l1UDehq0srSdYRAv+BAJ95ICmxrloyTG1wkNSfSbO+T2+CwwCgiAVp
adhI5HbvB9hTmrMIsG0Hh7I=
=Khhv
-----END PGP SIGNATURE-----