• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 2 voto(i) - 4.5 media
  • 1
  • 2
  • 3
  • 4
  • 5
come lo strutturo un programma OO
#1
Come lo strutturo un gioco/programma orientato agli oggetti con darkGDK??
 
Rispondi
#2
Anzitutto devi scaricare la versione object oriented di darkgdk (url)
La struttura la fai come ti trovi meglio in base al progetto che stai facendo, è abbastanza relativa la scelta.
 
Rispondi
#3
cioe mi potresti spiegare meglio e poi cosa cambio quando installo quella versione???
 
Rispondi
#4
Quella versione è darkgdk scritto in oop.

ad esempio

dbMakeObjectCube( obj, size );
dbPositionObject( obj, x, y, z );

diventa

OOGDK::Object::Cube MyCube( size_optional );
MyCube.Position( x, y, z );


Non è indispensabile averla per scirvere un gioco con darkgdk in stile object oriented, però ti semplifica la vita.


Per qualche informazione sui vantaggi della programmazione orientata ad oggetti guarda qui.
Non è semplice da spiegare... strutturare un programma in oop non è facile, però ti garantisco che quando il programma diventa complesso se sei riuscito a strutturarlo bene in partenza diventa più facile programmarlo.
 
Rispondi
#5
...... me sa proprio continuero come sto facendo ora......
anzi e se facessi così:
nel main richiamo tutti i metodi e le classi degli altri file .h in modo da formare il gioco?
sarebbe giusto??
 
Rispondi
#6
Ammazza! Ammetto che sono un pò sgomentato da quei codici! Sono diversissimi dal DBPro, eddire che è un derivato del C++
 
Rispondi
#7
si ma sse noti sono derivati dal c++ le funzioni
 
Rispondi
#8
(26-11-2010, 09:57 PM)zapetino Ha scritto: ...... me sa proprio continuero come sto facendo ora......
anzi e se facessi così:
nel main richiamo tutti i metodi e le classi degli altri file .h in modo da formare il gioco?
sarebbe giusto??

Non ho capito benissimo.
Comunque solitamente si crea almeno un file .h per classe (uno .h e uno .cpp se la classe è un pò complessa e non la si vuole dichiarare inline).
Poi nel main file includi tutte le classi e nella main function crei le istanze delle classi.
Ha poco senso richiamare i metodi solo nella funzione main(), a stò punto sarebbe quasi uguale alla programmazione strutturata.


(26-11-2010, 10:02 PM)Jonathan Archer Ha scritto: Ammazza! Ammetto che sono un pò sgomentato da quei codici! Sono diversissimi dal DBPro, eddire che è un derivato del C++

Che dbMakeObjectCube( obj, size ); sia simile a MAKE OBJECT CUBE obj,size è chiaramente visibile, poi basta conoscere il c++ per capire che OOGDK::Object::Cube MyCube( size ); è molto simile a dbMakeObjectCube( obj, size );
Certo che paragonando OOGDK::Object::Cube MyCube( size_optional ); a MAKE OBJECT CUBE obj,size sembrano 2 cose completamente diverse.

Comunque darkbasic direi che è derivato dal basic, di nome e di fatto xD
 
Rispondi
#9
q8 completamente comunque ho capito
 
Rispondi
#10
Citazione:Comunque darkbasic direi che è derivato dal basic, di nome e di fatto xD

Prima di tutto del C++ anche perchè il Basic è il primo linguaggio ad essere nato quindi è come dire che mio nonno fa parte della mia famiglia (Capitan Ovvio xD)
 
Rispondi
#11
E capitan ovvio si sbaglia...

Il C++ è venuto dopo il basic, ma non deriva da esso (deriva dal C, e nemmeno quello deriva dal basic).

Il basic non è il primo linguaggio ad essere nato.

Questo è un esempio di codice in c++
Codice:
#include <iostream>
int main()
{
std::cout << "ciao"
return 0;
}
questo è un esempio di codice in basic
Codice:
print "ciao"
questo è un esempio di codice in darkbasic
Codice:
print "ciao"
il primo è completamente diverso dagli altri due eppure fa la stessa cosa XD
è probabile che le funzioni in darkbasic (penso che siano in formato dll) siano state scritte in c++, ma direi che la sintassi ha ben poco a che fare con il c++
 
Rispondi
#12
scusa steve ma non ho ancora capito se ne hai voglia potresti farmi un'introduzione basilare all oop e gdk??
su wikipedia non ho capito nulla XD
 
Rispondi
#13
Ecco quello che dice sul sito:
DarkBASIC Professional is the most advanced games development package built on the BASIC language currently available. No other package out there makes it as easy to incorporate all of the special features and effects you see in todays games and no other package natively offers the benefits of Microsofts DirectX 9 technology.

Quindi non dite che è stato fatto in C++! A parte che si capisce dal nome!
 
Rispondi
#14
ma cosa stai dicendo ma lo hai letto il titolo della discussione???
non ti mettere in mezzo se non sai neanche di cosa stiamo parlando poi è ovvio che darkbasic si basa sul basic -.-"
 
Rispondi
#15
certo che l'ho letto, ma ho visto che discutevate su cos'era basato darkbasic -.-""
 
Rispondi
#16
e invece no! la discussione parla di come strutturare un programma oop con darkgdk.....
anzi steve se non lo hai letto :

(27-11-2010, 06:51 PM)zapetino Ha scritto: scusa steve ma non ho ancora capito se ne hai voglia potresti farmi un'introduzione basilare all oop e gdk??
su wikipedia non ho capito nulla XD
 
Rispondi
#17
È un po' complicato da spiegare, comunque il meccanismo è abbastanza semplice... devi dividere il programma in sottoprogrammi (è un po' azzardato come termine) indipendenti tra loro.
La OOP è un metodo di affrontare il problema, puoi usarla sia con darkgdk per fare un gioco complesso che con solo c++ per fare una semplice calcolatrice o un hello world.

Immaginiamo parte di un gioco di navi spaziali. Abbiamo una navetta player e varie navette enemy.
In comune hanno: la possibilità di morire, la possibilità di cambiare velocità, la possibilità di sparare, ecc...
La navetta player ha: i comandi (sterzo, attacco, ecc...) gestiti dall'utente, un dato numero di vite, un punteggio, ecc...
Le navette enemy hanno: i comandi gestiti dall'AI, un dato numero di navette (il player è perforza uno), ecc...

Quindi si può strutturare in questo modo:

Classe = "navetta"
Attributi = "int velocità", "bool morte", ecc...
Metodi = "cambiaVelocità(int numero)", "controllaMorte(void)", "spara(void)" ecc...

Classe = "player" figlia di classe navetta (la classe player fa tutte le cose di navetta oltre le sue, questa cosa si chiama ereditarietà tra classi)
Attributi = "vite", "punteggio", ecc...
Metodi = "aggiungi_sottrai_Vita(int numero)", "gestisciControlli(void)", "aggiungi_sottrai_Punti(int numero)", ecc...

Classe = "enemy" figlia di classe navetta (anche qui il meccanismo di eredità, visto che anche i nemici sono navette spaziali)
Attributi = "numeroNemici", ecc...
Metodi = "comandiAI(void)", ecc...


Se io adesso dovessi perfezionare il gioco aggiungendo l'armatura alle navette ci metterei un secondo. Mi basterebbe aggiungere un attributo alla classe navetta e modificare leggermente il metodo "controllaMorte(void)".
Oppure se volessi mettere oltre ai normali nemici un boss mi basterebbe creare una classe figlia di "enemy" chiamata "boss". Così oltre a fare tutto ciò che fa "navetta" e "enemy" fa anche delle cose tutte sue (stessa cosa se volessi creare diversi tipi di nemici, ognuno con caratteristiche diverse dagli altri).

In questo modo creo delle classi, se volessi creare il giocatore e i vari nemici mi basta fare questo (posso farlo nel main oppure dentro altre classi):
player Giocatore1; //istanzio la classe player
enemy Nemico1;
enemy Nemico2;
enemy Nemico3;

Voglio far sparare il giocatore? Nel metodo "gestisciControlli()" metto:
if(premutoIlTastoSpazio = true) this.spara(); //notare che spara() si trova nella classe navetta, però essendo player figlia di navetta può farlo anche lei

Voglio far sparare il giocatore richiamando spara() dalla funzione main? Semplice:
Giocatore1.spara();




Mi rendo conto che è un po' difficile capire come funziona, al massimo fai qualche ricerca in internet riguardo la OOP perché faccio fatica a spiegarla... fai conto che questo è un piccolo esempio delle molte cose che si possono fare con questo metodo di programmazione.
Però ti assicuro che una volta che ti trovi dentro un programma strutturato in OOP ti viene sicuramente più facile modificarlo e trovare gli errori.
Tuttavia può essere difficile dividere in modo opportuno le varie classi, quindi se ancora non sei molto pratico con la programmazione strutturata direi che ti conviene approfondire meglio quella.

Se hai difficoltà a capire fammi sapere.
 
Rispondi
#18
Scusate se mi sono lasciato trasportare, giustamente mi limito ad aiutare zape nel miglior modo possibile avendo fatto un pochino di C++

Allora secondo le mie conoscenze con il DB il termine più giusto sarebbe integrare al progetto principale dei sottoprogetti, che per l'appunto hanno funzioni comuni

Immaginiamo appunto parte di un gioco di navi spaziali. Abbiamo una navetta player e varie navette enemy.
In comune hanno: la possibilità di morire, la possibilità di cambiare velocità, la possibilità di sparare, ecc...
La navetta player ha: i comandi (sterzo, attacco, ecc...) gestiti dall'utente, un dato numero di vite, un punteggio, ecc...
Le navette enemy hanno: i comandi gestiti dall'AI, un dato numero di navette (il player è perforza uno), ecc...

Quindi si può strutturare in questo modo:

DIM ClasseAmica$(10) : REM Di cui la prima array sei tu e le altre i tuoi amici (IA)
DIM TipoMotore$(10) : REM Combustione, Impulso etc etc

ClasseAmica$(1) = "Navetta"
TipoMotore$(1)= "Impulso"
VelocitaAttuale(1)=1

REM CONTROLLI
If Inkey$()="+"
If TipoMotore$="Impulso"=1 and VelocitaAttuale<5
Inc VelocitaAttuale
Endif
Endif
Metodi = "cambiaVelocità(int numero)", "controllaMorte(void)", "spara(void)" ecc...

Questa parte non l'ho capita benissimo:
Classe = "player" figlia di classe navetta (la classe player fa tutte le cose di navetta oltre le sue, questa cosa si chiama ereditarietà tra classi)
Attributi = "vite", "punteggio", ecc...
Metodi = "aggiungi_sottrai_Vita(int numero)", "gestisciControlli(void)", "aggiungi_sottrai_Punti(int numero)", ecc...
Comunque si può riprodure con un etichetta Aggiungi_Sottrai_Vita: insieme a Goto/Gosub oppure con una funzione

Quindi ricapitolando, se vogliamo strutturare graficamente "Classe" per una migliore lettura:
-ClasseAmica$(1) = "Navetta"
|---TipoMotore$(1)= "Impulso"
|---VelocitaAttuale(1)=1

Spero di essermi reso utile
 
Rispondi
#19
grazie! mi hai schiarito le idee ora mi esercito con l0oop
 
Rispondi
#20
zapetino per usare l'oop del C++ con darkgdk, perché non ti basta una spiegazione di due righe, io lo studiato un po' su un libro, e ci sono molte cose da sapere, e non per nulla facile, devi sbatterti un bel po', e poi non serve nemmeno con darkgdk, ti torturi solo.
 
Rispondi
#21
si allora per fare un gioco scrivo 10000 righe su un "foglio" solo???
 
Rispondi
#22
Crei più file .cpp nello stesso progetto e puoi creare anche dei file .h i quali conterranno le: classi, strutture, funzioni, etc... e anche delle dll xD, cosi ti basta sapere le basi del c++ e non tutto il c++ perché poi i comandi etc.. sono tutti di DarkGDK, e il c++ la non c'entra poco e nulla, e le basi credo che già le hai. E poi se usi DrakGDK oop, cambieranno molte cose nel codice secondo me, e poi sul forum della TGC non credo che ti sapranno aiutare, perché nessuno lo usa, e tra l'altro, l'ultimo aggiornamento di DarkGDK oop risale al: May 2008.

Poi se vuoi usare darkgdk oop, ti conviene prendere un libro sul C++ che tratta l'oop e studiarlo per bene.
 
Rispondi
#23
@Jonathan Archer :
Immagina di creare una variabile di tipo enemy ( dim nemico1 as enemy ) e di definire a tua scelta quello che è e quello che può fare. Questo è parte di ciò che ci permette di fare la programmazione orientata agli oggetti.
esempio:
dim nemico1 as enemy
dim nemico2 as enemy
nemico1.sposta x,y,z
nemico2.spara

Ora ammettiamo che mi accorgo che è brutto un gioco con un solo tipo di nemico, voglio il nemico "caccia cover" oppure il nemico "caccia speeder". Creando una classe figlia di enemy mi basta aggiungere quelle 2 o 3 caratteristiche che diversificano un "caccia cover" da un nemico normale e basta, dopo potrò definire nemico 1 come cacciaCover (dim nemico1 as cacciaCover).
Molto comoda come cosa! Mettendo queste classi in un file a parte le posso usare anche in altri progetti (sempre se le ho scritte come si deve).

Ma questo con il darkbasic pro non posso farlo, perché non è un linguaggio di programmazione orientato agli oggetti.

Pensa che la variabile "string" in c++ non è una vera e propria variabile (come int, float, char, ecc...), è una classe.


@Zapetino:
OOGDK è solo un wrapper per darkgdk non è indispensabile per fare un gioco strutturato OOP, però può tornare utile.
Come ti ha consigliato Kira ti consiglio anche io... se non sei molto pratico di c++ vai di programmazione strutturata, se sei già abbastanza pratico prova pure la OOP (ma prima leggiti bene qualche guida perché io ti ho detto giusto quattro cose, c'è molto di più).
 
Rispondi
#24
Però Steve... mi stupisci veramente, finalmente qualcuno con cui parlare seriamente xD (Senza offesa per gli altri ovviamente) Comunque continuerò a seguire il topic e risponderò quando potrò essere utile Smile
 
Rispondi
#25
steve il c++ un po lo so devo "solo" studiarmi l'oop ..ora mi cerco qualche libro e vedo che riesco a fare
 
Rispondi
#26
Si... era solo per sottolineare che l'oop non è poca roba.
Con devo solo studiarmi l'oop me la sminuisci alquanto XD
 
Rispondi
#27
si vabe solo per modo di dire XD
spero solo do trovare tempo dopo la scuola per studiarlo!
 
Rispondi
#28
scusate il doppio post ma tanto qui modero io XD ...
no a parte gli scherzi:
@kira io non voglio usare il gdk oop ma la versione "normale" ma "orientandola" agli ogetti
perche non credo (visto quello che voglio imparare) mi serva molto usare la programmazione strutturale
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
Question Programma free Zettamax 3 1,745 20-12-2011, 06:37 PM
Ultimo messaggio: Zettamax

Vai al forum:


Browsing: 2 Ospite(i)