Creare Videogiochi - Game Developer

Versione completa: Idea di progettazione...più o meno
Al momento stai visualizzando i contenuti in una versione ridotta. Visualizza la versione completa e formattata.
Salve a tutti, in breve un programma che permetter di inserire dei task (nome generico, nessuna allusione a processi o altro). Ogni task ha un orario e un argomento, ad ogni occorrenza di un qualsiasi task con l'orario di sistema allora il/i task verrà/anno segnalato/i in qualche modo da definire. Ora il loop che controlla l'occorrenza di un task mi genera un dubbio: se è un loop ma io nel frattempo voglio poter impostare un altro task o chiudere via codice (non con la x della finestra) o qualsiasi altra cosa come posso fare s'è c'è questo ciclo che si ferma sono all'occorrenza con l'orario di sistema...una lampadina (fulminata) si è accesa e mi ha detto "sei un imbecille" ehm no aspetta, mi ha detto thread...gia thread giusto. seriamente parlando, per poter fare più operazioni in parallelo e far si che questo ciclo (che poi diventeranno tanti quanti sono i task) si esegua in background mentre posso fare altro nel programma??? Servono i thread o è solo una questione di gestione con il codice (anche se lo trovo impossibile).


Infine, solo a titolo informativo è possibile creare oggetti a run time (oggetti di classi grafiche tipo Jframe ecc) non scritti direttamente nel codice (es: 3 componenti di un Jframe che però ora sono 3 ma in un altra esecuzione posso decidere siano 5
Codice:
...
JPanel one=new JPanel();
JPanel two=new JPanel();
JPanel three=new JPanel();
//non so a priori quanti sono, si usano liste dinamiche o arraylist in questo caso giusto?
) si usano liste arraylist eccetera ò è impossibile. (un pò come le sveglie su android, non sai quante ce ne sono quindi non esiste un oggetto tipo Sveglia s1=new Sveglia() per ogni speglia (o per lo meno non una riga per uno)). Ps: per ora preferirei una risposta sull'impiccio di sopra, quella della grafica è secondaria, se c'è un buon cristo che possa aiutarmi bene altrimenti mi basta risolvere il problema di sopra Grazie Big Grin
Se ho capito bene quello che hai scritto allora probabilmente stai facendo un po' di confusione tra event-driven programming e multi-threading.
Per la prima studia il manuale di un GUI toolkit, ad esempio le Qt, per il secondo mi vengono in mente un paio di libri introduttivi interessanti: The Art of Multiprocessor Programming e The Art of Concurrency: A Thread Monkey's Guide to Writing Parallel Applications.
Tra qualche anno di studio, forse, potrai iniziare a dare uno sguardo al blog di Jeff Preshing sulla lock-free programming. Big Grin
La programmazione ad eventi, è presente su vb.net e c#, ora questo programma, è come se sveglie di android. C'è una classe che rappresenta la "sveglia" (non stiamo parlando di sveglia ma la chiamo così per farmi intendere). Ora nel main il loop che verifica quando è "arrivata l'ora" di una sveglia e quest'ultima deve suonare, è una funzione con un loop che controlla ogni tot di tempo se la sveglia è "pronta" insomma. Questo ciclo non mi permette di fare altro tipo impostare altre sveglie ecc Ora mi è venuto in mente di usare i thread perchè (sicuramente sbaglio) ma voglio (a progetto finito) che ci siano tanti loop per ogni sveglia tutti in background, così posso fare altre cose. Ora mi limito a farne una per poi implementare una classe bella e pronta, il problema è tra tutte le librerie che esistono rispetto a quelle che realmente mi servono, sto cercando di capire se con i thread si può fare questo. L'idea è un thread principale che è il main e tanti thread quante sono le sveglie con il loro orario, il proprio argomento ecc ecc. così mentre le sveglie stanno in background pronte a suonare posso fare altro, sia nel programma, e poi in generale usare altri programmi nel pc senza che questo richieda input (la sveglia di android da quando è impostata a quando suona non ti chiede l'input su qualcosa, ecco così deve fare questo programma). Ma se i thread richiedono tutta questa esperianza (per non parlare di riuscire a implementare la GUI che immagino) credo sia meglio lasciar perdere. Insomma dopo l'ennesimo papiro-bomba per il lettore: encelo se il ragionamento che ho fatto è corretto e possibile bene altrimenti lascio perdere quindi dimmi cosa pensi? Cit. Boom <troll-face>
(11-01-2016, 10:52 PM)samuele55598@gmail.com Ha scritto: [ -> ]Ora nel main il loop che verifica quando è "arrivata l'ora" di una sveglia e quest'ultima deve suonare, è una funzione con un loop che controlla ogni tot di tempo se la sveglia è "pronta" insomma. Questo ciclo non mi permette di fare altro tipo impostare altre sveglie ecc
Non dovresti praticamente MAI E POI MAI fare ricorso ad un busy loop. Big Grin
Ecco perché parlavo di eventi, basta registrare la scadenza del timer e farti notificare quando essa si manifesta. Lo puoi fare tramite il GUI toolkit o direttamente tramite il sistema operativo.
Quello che stai cercando di fare tu è un polling, ovvero il controllo continuo, che è praticamente l'opposto che aspettare l'evento senza fare niente intanto.

(11-01-2016, 10:52 PM)samuele55598@gmail.com Ha scritto: [ -> ]Ora mi è venuto in mente di usare i thread perchè (sicuramente sbaglio) ma voglio (a progetto finito) che ci siano tanti loop per ogni sveglia tutti in background, così posso fare altre cose.
Scomodare i thread è eccessivo, alla luce delle considerazioni che ti ho appena fatto. Ma pur supponendo che tu voglia controllare il timer in maniera attiva mediante polling, nulla ti vieta di controllarli in sequenza e successivamente al controllo della coda degli eventi della GUI. Al massimo questo porterebbe ad un ritardo nell'ordine dei millisecondi, cosa più che trascurabile visto che i timer sono intesi per gli esseri umani. Se poi hai bisogno di contatori monotonici ad alta precisione ed accuratezza per fare del profiling, ma ne dubito fortemente Big Grin, allora i requisiti cambiano e così la soluzione al problema.

(11-01-2016, 10:52 PM)samuele55598@gmail.com Ha scritto: [ -> ]Ma se i thread richiedono tutta questa esperianza (per non parlare di riuscire a implementare la GUI che immagino) credo sia meglio lasciar perdere.
Il multi-threading è un'arte affascinante e pericolosa, per fortuna la puoi evitare in questo caso. Tongue

Ovviamente per qualsiasi altro dubbio possiamo discuterne su Discord. Wink
Diciamo che dopo di questo credo che abbandonerò il progetto....no seriamente grazie per la delucidazione, ma alla luce di questo, aldila di tutti i tutorial del cavolo che posso guardare, esistono guide che spiegano come programmare (e qui la cerco da tempo). Insomma si capisce che hai mooooolta esperienza con non si può acquisire solo e soltanto con youtube o con un misero corso di superiori quindi morale della favola, in attesa dell'università esiste una qualche guida che non spieghi come si fa un ciclo, un if o come si impara java e cos'è System.io.print() o cout<<<<endl ma qualcosa dipiù. Una qualcosa che spieghi per esempio strumenti avanzati per sviluppare i progammi più disparati ( e non parlo di una tabella che dice: per sviluppare vlc utilizza questo, per fl studio quest'altro per unity, quest'altro ancora, altrimenti i programmatori del mondo sarebbero a cavallo) ne che parli di teoria computazionale o cos'è un IA ma che non si limiti a come si fa un ciclo, che per quanto possa (forse) essere più complesso della definizione standard che tutti conoscono è pur sempre un ciclo. Io come dovrei sapere che non si utilizzano i thread ma esiste qualcos'altro? Puoi consigliarmi qualche cosa?
(13-01-2016, 08:45 PM)samuele55598@gmail.com Ha scritto: [ -> ]in attesa dell'università esiste una qualche guida che non spieghi come si fa un ciclo, un if o come si impara java e cos'è System.io.print() o cout<<<<endl ma qualcosa dipiù.
Purtroppo no, come in ogni cosa si diventa esperti... con l'esperienza, ovvero dedicando tempo allo studio ed alla pratica. Non esiste un procedimento automatico che ti rende un esperto informatico, una ricetta perfetta, un apprendimento accelerato alla Matrix.

Possono esistere consigli riguardo un percorso di studi preciso, come ad esempio questo illuminante post di Roberto Allegra, dove l'autore elenca una lista di libri fondamentali, la cui completa assimilazione passa per numerose riletture ed anni di esperimenti.
A questa lista mi sento di aggiungere anche Effective Modern C++, indispensabile per carpire l'essenza delle novità introdotte dal C++11.

Ma a mio modesto avviso un game developer non può non conoscere anche un po' di assembly, cenni di programmazione di sistema in ambito Unix, come funziona la pipeline di una GPU, come funzionano i numeri in virgola mobile, il C++ a basso livello, le basi del multi-threading, i design pattern, un DVCS come git, un secondo linguaggio per lo scripting...
Ricorda che non si smette mai di imparare e che la curiosità e la sete di conoscenza sono alla base della passione per qualcosa. Wink
Assembly???? beh IO e le mie misere conoscenze non ne troviamo il motivo, per non parlare di tutto questo basso livello, voglio dire forse tutto questo unity e unreal belli e fatti annebbiano il cervello su argomenti mooolto vasti come lo sviluppo di un game engine partendo dal motore di rendering in OpenGl/Direct3D nonostante ciò non mi aspettavo tutto questo, beh grazie di tutto a questo punto metto il progetto in "lista d'attesa" lol e cerchero su internet nuovi concetti nella speranza di imparare quanto più possibile da affiancare al corso scolastico, mi hai aperto un mondo grazie encelo
(14-01-2016, 12:52 AM)samuele55598@gmail.com Ha scritto: [ -> ]Assembly???? beh IO e le mie misere conoscenze non ne troviamo il motivo, per non parlare di tutto questo basso livello
Uno dei link che ti ho postato è la famosa serie di articoli A Low Level Curriculum for C and C++ che ti fornisce qualche motivo.
Ad ogni modo da gamplay programmer forse te la puoi cavare con qualcosa in meno. Wink
(14-01-2016, 02:21 PM)encelo Ha scritto: [ -> ]
(14-01-2016, 12:52 AM)samuele55598@gmail.com Ha scritto: [ -> ]Assembly???? beh IO e le mie misere conoscenze non ne troviamo il motivo, per non parlare di tutto questo basso livello
Uno dei link che ti ho postato è la famosa serie di articoli A Low Level Curriculum for C and C++ che ti fornisce qualche motivo.
Ad ogni modo da gamplay programmer forse te la puoi cavare con qualcosa in meno. Wink

Spero non ti butterai dal 5° piano per la seguente domanda, siamo su un forum di sviluppo videogiochi uno dei 2 e quasi più indicato e ci sono miliardi di ragioni per uno e miliardi per l'altro, ma tra i 2 leadership:
-C++ gestione memoria low level, velocità di esecuzione superiore (con le dovute ottimizzazioni), molto simbolismo, un pò complesso all'inizio, libreria standard molto nutrita ma forse non completissima(come li chiamo io poi spiego la mia differenza concettuale)
-Java gestione memoria da parte del compilatore, portabilità al 100% (android nativo), più lento in esecuzione, ma a livelli medio bassi (di esperienza del progr.) java corre come una lamborghini a quanto ho sentito, libreria standard nutritissima, GUI semplici e potenti, per non parlare di tutto il resto (io ancora non so cosa usare per reperire l'orario di sistema, voglio dire come cavolo interpreto un long??? ce ne sono forse 3/5 di classi per il tempo)
Si lo so scegliere quello più adatto in quanto non esiste uno migliore in assoluto, si in c++ puoi usare i puntatori ad esempio ma sono un problema/soluzione o come dicono alcuni manuali croce e delizia e non hanno tutti i torti, il c++ ha delle meccaniche non semplicissime a primo acchitto e questo porterebbe alla 2à scelta. Ma mettendo in conto che almeno per ora non ho intenzione di sviluppare in android (applicazioni pure sviluppate in android studio/eclipse ecc) e quindi rimarrebbe c++ totalmente game oriented, dall'altro lato java ha una libreria gui molto nutrita e semplice da quanto ho letto il che non rende il java malaccio per scrivere programmi perche comunque se non si risce a trovare sbocco nel mondo dei videogiochi si è sempre programmatori (spero) Tongue Detto ciò encelo tu cosa mi consigli? (riassumo visto che scrivo troppo):
Obiettivi:
-Giochi
-Programmi (con GUI perchè aldilà di script shell e web ogni programma che non sia di diagniostica/hacking/o simili ha una gui e mi sembra ovvio)
-Portabilità android (anche via strumenti esterni tipo framework librerie ecc ecc)
Puoi iniziare con quello che vuoi, purché ti applichi con serietà e passione.
Ad un livello base come il tuo qualsiasi considerazione su prestazioni o ambiti lavorativi è fuori luogo, inizia con quello che ti sembra più semplice e studia!
Ci sarà tempo in futuro per studiarne degli altri, o per provare altri approcci o paradigmi.
Compra un libro e fai i tuoi primi esperimenti senza farti sviare da altre tecnologie, con l'esperienza diventerai più consapevole ed indipendente sulla scelta di un percorso di apprendimento. Smile
Thanks encelo molto chiaro Smile