PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wie entwickel ich eine spiel...



TheKingGoku
05.01.2003, 16:43
...so wie das spiel "Kaiser" ich denke ich brauche ein programm dazu also bitte auch(wenn man es brauch) den Link posten

maxim
05.01.2003, 18:14
heh, stell dir das nich so einfach vor^^

also du bist ganz bestimmt noch nicht so weit dafür...

also als erstes brauchst du seehr gute C++ kenntnisse, so leicht is das ja nich;)

und spiele kannst du dann z.b. mit direct x sdk programmieren, und auch das ist nicht so einfach;)

geh einfach mal auf google.de und gib directx sdk udn c++ oder programmieren ein.

ich kenn "Kaiser" zwar nicht, aber ich glaub du meinst allgemein spiele programmieren/entwickeln

sonst könntest du auch mit macromedia flash spiele machen, jedoch ist das programm ziemlich teuer

Klopfer
05.01.2003, 18:24
Ich kenne "Kaiser" (hab's ganz ganz früher ziemlich oft gespielt), und ich würd sagen, dass das schon eine ziemliche Arbeit ist, das neu zu programmieren (insbesondere der Kriegsmodus, der Rest ist noch relativ simpel). Wenn du allein in deiner Freizeit arbeitest, würd ich (unter der Annahme, dass du schon gut programmieren könntest) von einem Zeitaufwand nicht unter 6 Monaten ausgehen, bis alles gut funktioniert.

Programmieren kann man's wohl am besten mit C++ (wegen der relativ unkomplizierten Benutzung von DirectX).
Flash ist für sowas wie "Kaiser" eher ungeeignet.

maxim
05.01.2003, 18:37
ja, aber für kleinere vorallem spiele auf pages, ist flash geeignet

ich glaub kaum dass er c++ kann und wenn, mit direct x spiele zu machen muss man auch lernen und das geht auch ne weile, oder?

kannst du spiele programmieren/machen(oder hast du scon) @klopfer

Kei-san
05.01.2003, 18:38
Original von TheKingGoku
...so wie das spiel "Kaiser" ich denke ich brauche ein programm dazu also bitte auch(wenn man es brauch) den Link posten

Wie bereits gesagt wurde, mußt du programmieren können.
Es gibt zwar Programme, mit denen man sich Spiele zusammenklicken kann, aber das kann man vergessen. Da kommt imho nix brauchbares raus.
Du mußt zumindest scripts schreiben können (für Programme wie RPGMaker).

Und welches "Kaiser" meinst du? (hast du einen Link?)
Mir fällt da spontan ein uraltes Spiel ein, was ich noch auf dem C64 gespielt hab :D


Wie sind denn deine Vorkenntnisse in Sachen Programmierung und Spieleentwicklung?

maxim
05.01.2003, 18:49
also directx, opengl, flash, visual basic?!, ...was gibts denn noch womit man spiele machen kann?

ich denke mal der hat null ahnung von programmieren, sonst hätt er es sich nicht so leicht vorgestellt^^

abc...
05.01.2003, 20:24
Original von maxim
also directx, opengl, flash, visual basic?!, ...was gibts denn noch womit man spiele machen kann? 8o wie lange haste für all diese sprachen gebraucht??? dauert das net ewig bis man ne sprache beherrscht? (<-- wohl nur für abc...:D)

KakashiHatake
05.01.2003, 20:27
ich könnt dir flash die neuste version gebn wenn du willst auf deutsch

Kei-san
05.01.2003, 21:02
Original von maxim
also directx, opengl, flash, visual basic?!, ...was gibts denn noch womit man spiele machen kann?

ich denke mal der hat null ahnung von programmieren, sonst hätt er es sich nicht so leicht vorgestellt^^

DirectX und OpenGL sind für einen absoluten Anfänger imho zu groß und unübersichtlich. Für sein "Kaiser" wird er wohl kaum 3D brauchen (was ohnehin die Sache mächtig verkomplizieren würde, da man handfeste mathemtische Kentnisse braucht und auch noch Models erstellen muß).
Als Anfänger sollte man ohnehin erstmal in 2D laufen lernen. Man kann dann auch eine Library wie Allegro für seine ersten Spiele nutzen.

@TheKingGoku
Les dir mal diese Seite durch. (http://www.lupinegames.com/articles/path_to_dev.html) (ich hoffe du kannst Englisch; ist ohnehin zu empfehlen, da man sehr viele gute engl. Tutorials zum Programmieren im Netz finden kann)

Klopfer
05.01.2003, 21:22
@maxim: Ich hab vor Urzeiten in der Schule mal ein rundenbasiertes Strategiespiel (so eine Art Civ im Weltall) programmiert. Das war noch unter DOS, mit VGA-Grafik und mit Pascal und Assembler programmiert.
Ich hab das Teil aber nicht mehr, auch nicht den Quelltext. Ich hab nur gehört, dass meine alte Schule das immer noch bei Tagen der offenen Tür präsentiert.

@Kei-san: DirectX ist mehr als Direct3D, es ist auch einfacher, DirectX für gute 2D-Grafiken zu benutzen als die Standardroutinen vom Windows-GDI.

Kei-san
05.01.2003, 21:37
Original von Klopfer
@Kei-san: DirectX ist mehr als Direct3D, es ist auch einfacher, DirectX für gute 2D-Grafiken zu benutzen als die Standardroutinen vom Windows-GDI.

Ich weiß. Ich kenne DirectDraw (ist in DX8 ohnehin mit Direct3D zusammengefasst worden als DirectGraphics).
GDI ist einfach nur grausam. *schüttel* sollte man zwar mal gesehen haben......aber die Grafikausgabe eines Spieles damit......naja Masochisten gibt es immer :D:D:D

Wichtig (wenn nicht unentberlich^^) sind natürlich auch DirectInput und DirectSound.
DirectPlay für den Multiplayer.
DirectShow braucht man für Spiele wohl weniger^^


Aber es gibt auch weniger umfangreiche Libraries, in die man leichter einsteigen kann. Man kann ja auch eine fertige Grafikengine nutzen.

The Kurapika
06.01.2003, 14:24
Also für denn Anfang würde ich mit irgendwas einfachem anfangen.
so wie ich damals
als 1. hab ich mir mein ziel gesetzt , ein Pac-Man spiel
dann hab ich mich im internet über lektüren informiert
und mir eine gekauft
es kommt auch drauf an wie alt man ist.
so hab ich mir das buch "Spieleprogrammierung mit DirectX und Visual C++"
das buch eklärt dir alles, man braucht also kein vorwissen ,jedoch ist es sehr kompliziert. aber wenn man sich damit längere zeit beschäftigt schafft man am schluß so wie ich ein echt gutes spiel.
Viel erfolg

Red Phoenix

imported_Ruffy
06.01.2003, 14:25
Schau dich im Internet um auf Speziellen Sites irgendwann findest du so ne Hotline ruf da an und die geben dir alle Infos

The Kurapika
06.01.2003, 14:41
Aber ob das sovieel bringt???
wennn er wirklich programmieren will ,sollte er sich wirklich im internet erkundigen oder ein buch kaufen.
aber das ist dann wohl seine entscheidnung.
du solltest aber auch mal einen genauen link geben das internet ist ja bekanntlich groß ;)

traexx
07.01.2003, 15:10
Original von Kei-san

Original von maxim
also directx, opengl, flash, visual basic?!, ...was gibts denn noch womit man spiele machen kann?

ich denke mal der hat null ahnung von programmieren, sonst hätt er es sich nicht so leicht vorgestellt^^

DirectX und OpenGL sind für einen absoluten Anfänger imho zu groß und unübersichtlich. Für sein "Kaiser" wird er wohl kaum 3D brauchen (was ohnehin die Sache mächtig verkomplizieren würde, da man handfeste mathemtische Kentnisse braucht und auch noch Models erstellen muß).
Als Anfänger sollte man ohnehin erstmal in 2D laufen lernen. Man kann dann auch eine Library wie Allegro für seine ersten Spiele nutzen.

@TheKingGoku
Les dir mal diese Seite durch. (http://www.lupinegames.com/articles/path_to_dev.html) (ich hoffe du kannst Englisch; ist ohnehin zu empfehlen, da man sehr viele gute engl. Tutorials zum Programmieren im Netz finden kann)


Opengl kann man aber als Fortgeschrittener schnell lernen, wenn man die Mathematik beherrscht... Allegro würde ich nicht benutzen lieber die SDL oder die Clanlib...

es gibt ja genug Seiten, die über das spieleprogrammieren berichten und es in tuts erklären...

P.S.: keine hohen Ziele, konkrete Vorstellungen und Durchhaltewillen besitzen oberste Wichtigkeit.

ich springe in letzter Zeit von C++ auf C um weil es mit Pointern einfach weniger Probleme gibt... :) Hat jemand erfahrungen mit Objective C?

maxim
07.01.2003, 15:42
was ist denn objektive c?

also ich lerne im moment c, danach erst c++, aber wozu braucht man schon dringend pointer? also ich würd sie nur bei funktionen benutzen, aber sonst?

traexx
07.01.2003, 15:48
Original von maxim
was ist denn objektive c?

also ich lerne im moment c, danach erst c++, aber wozu braucht man schon dringend pointer? also ich würd sie nur bei funktionen benutzen, aber sonst?


pointer... fuer alles was mit dynamischer Speicherreservierung zu tun hat.... 99% von professionellem Source ^^°

maxim
07.01.2003, 15:51
ach so weit bin ich noch nicht gekommen^^

was ist objective c?

Kei-san
07.01.2003, 15:51
Original von maxim
was ist denn objektive c?

also ich lerne im moment c, danach erst c++, aber wozu braucht man schon dringend pointer? also ich würd sie nur bei funktionen benutzen, aber sonst?

Objective-C ist eine objektorientierte Erweiterung von C und wurde von Brad J. Cox entwickelt (anfang der 80er; etwa zur sleben Zeit wie C++).

zu pointer:
wie traexx schon sagte, dynamische Datenstrukturen^^
aber man muß mit pointers sorgsam umgehen (vorallem bei C)

maxim
07.01.2003, 15:54
und was soll das bringen? ich mein c++ ist doch fast dasselbe, der einzige unterschied ist dass c keine oop unterstützt, also was bringt c das oop unterstützt?

traexx
07.01.2003, 16:00
Original von maxim
und was soll das bringen? ich mein c++ ist doch fast dasselbe, der einzige unterschied ist dass c keine oop unterstützt, also was bringt c das oop unterstützt?



ich will ja genau alles über ovjective C wissen...

C++ benutzt fuer Strukturen 8 Byte Pointer und für alle anderen Pointer 4 Bytes...

C benutzt immer 4 Byte Pointer... deshalb kann man besser in C mit komplexen verrückten Strukturen arbeiten :)

maxim
07.01.2003, 16:09
hmm...ich empfinde das jetz immoment nicht als einen so grossen unterschied, aber wenn ich nbisschen mehr erfahrung darin hab vielleicht....

wo gibts denn einen compiler für objective c?

und wenn du nur mit strukturen und pointer arbeitest, hättest du ja auch mit c programmieren können?!

traexx
07.01.2003, 16:13
Original von maxim
hmm...ich empfinde das jetz immoment nicht als einen so grossen unterschied, aber wenn ich nbisschen mehr erfahrung darin hab vielleicht....

wo gibts denn einen compiler für objective c?

und wenn du nur mit strukturen und pointer arbeitest, hättest du ja auch mit c programmieren können?!


erm... das ist ne gute Frage... (stell ich mir auch gerade)

gnu.org duerfte ne Anlaufstelle sein.

Zu den Pointern: man kann Klassenpointer in C++ nicht in 4 Byte normale Pointer umwandeln, sowie void* von denen machen... Klassenpointer unbekannter Klassen gehen nicht...

maxim
07.01.2003, 16:18
^^

ähm, das mit den pointer kapier ich nicht^^ egal, erklärs mir wieder mal, wenn ich c und c++ besser kann

Kei-san
07.01.2003, 16:18
sucht einfach in Google nach objectiv c
im Netz finden sich genug Informationen (und ich bin zu Faul jetzt hier Links zu posten oder gar Erklärungen selber zuschreiben :D)

@maxim
wenn du Linux hast, hast du mit der gnu compiler suite auch einen Objectiv-C Compiler

traexx
07.01.2003, 16:21
Original von Kei-san
sucht einfach in Google nach objectiv c
im Netz finden sich genug Informationen (und ich bin zu Faul jetzt hier Links zu posten oder gar Erklärungen selber zuschreiben :D)

@maxim
wenn du Linux hast, hast du mit der gnu compiler suite auch einen Objectiv-C Compiler



koennte stimmen,aber unter DJGPP musste ich mir fuer Objective C (habs dort nie benutzt) ne extra-file runterladen...

da ich eh mingw benutze duerfte das kein Problem sein

maxim
07.01.2003, 16:24
ich benutz dev c++, nur so am rande....^^

Kei-san
07.01.2003, 16:30
hehehe.... und ich hab schon seit Ewigkeiten nicht mehr unter Windows (oder DOS) programmiert :D

Wie es mit Compilern für Windows aussieht weiß ich jetzt nicht. Aber ich muß gestehen, daß mich Objective-C auch nicht sonderlich interessiert.

maxim
07.01.2003, 16:42
na ja, ich mag grafische oberflächen lieber, linux und unix, da ist einfach nur text, nix grafisches, ausser bei kde bei linux, aber im moment will ich das nicht, aber man kann linux doch kostenlos runterladen, oder?
und unix, wieviel kostet das und wo kann man das überhaupt kaufen(noch nie gesehn)

abc...
07.01.2003, 16:49
was ist mingw und dev c++??? ?(

Kei-san
07.01.2003, 17:04
Original von maxim
na ja, ich mag grafische oberflächen lieber, linux und unix, da ist einfach nur text, nix grafisches, ausser bei kde bei linux, aber im moment will ich das nicht, aber man kann linux doch kostenlos runterladen, oder?
und unix, wieviel kostet das und wo kann man das überhaupt kaufen(noch nie gesehn)

Unix ist ein Sammelbegriff. Linux ist ein Unixsystem. Es gibt auch SCO Unix, Solaris und .... (aber die werden im allgemeinen nicht im Privatbereich eingesetzt).
Alles was man für Linux braucht kann man sich runterladen und selber kompilieren. Aber es ist wesentlich einfacher eine Distribution zu kaufen (z.B. SuSE oder RedHat) oder die CDImages zu ziehen. Dann hat man eine fertige Auswahl an Programmen und ein Instellationsprogramm mit Hardwareerkennung und allem drum und dran. Als Linuxanfänger sollte man sich eine Distribution kaufen (oder sonstwie besorgen).

Zum GUI:
Es gibt ja auch Gnome als alternative zu KDE. Und als grafische IDE zum Programmieren gibt es KDevelop.
Mittlerweile kann man das meiste grafisch erledigen, wenn auch die Komandozeile oft schneller ist^^


@abc
Das sind Compiler die den Sourcecode in ein Programm übersetzen.
Zusätzlich bieten sie eine IDE (Integrated Development Enviroment) mit Editor in dem man den Sourcecode erstellt und Debugger zur Fehelrsuche im Programm.

maxim
07.01.2003, 18:13
ach dann gibt es gar kein "unix" betriebssystem? 8o
kann nich sein, ich hab nbuch ausgehliehn(aber noch nicht gelesen^^) "jetz lerne ich unix" und damit ist ein betriebssystem gemeint, oder lernt man da nur so die "grundlagen" die bei allen unix basierten betriebssystemen so ist?

wieso soll man es sich für mehr als 100fr.(60€ nehm ich an) kaufen, wenn man es sich runterladen kann?
ich meine klar ists einfacher, aber man kauft dann ja besser ein buch das bestimmt unter 60€ ist, und da alles erklärt wird!

na ja, mit diesen kde's kenn ich mich überhaupt nicht aus, schon gar nicht mit linux^^

es sind aber nicht alle compiler IDE's, ist dieser mingfblabla kostenlos?

abc dev c++ usw. sind compiler, wen man ein programm programmiert, dann muss man das noch in textformat programm compilieren und linkenn, damit es zu eineer ausführbaren .exe datei wird

ach noch ne frage nebenbei

heisst es

void funktion(int *zeiger)
{
return (zeiger)
}

oder heisst es

void *funktion(int *zeiger)
{
return (zeiger)
}

ich frag nur, weils in einem buch so wie bei der zweiten variante steht, aber das glaub ich nicht...also welche variante stimmt?

Kei-san
07.01.2003, 18:36
Würde mich nicht wundern, wenn das Buch Unix anhand von Linux beschreibt^^

Kaufen wegen dem Support (den haben manche halt nötig). Aber man kann es siche ja auch von einem Freund brennen (wenn man jemanden kennt, der Linux hat).


mingw ist imo kostenlos



Original von maxim
ach noch ne frage nebenbei

heisst es

void funktion(int *zeiger)
{
return (zeiger)
}

oder heisst es

void *funktion(int *zeiger)
{
return (zeiger)
}

ich frag nur, weils in einem buch so wie bei der zweiten variante steht, aber das glaub ich nicht...also welche variante stimmt?

imho die zweite
allerdings würde ich

int *funktion(int *zeiger) {
return (zeiger);
}

vorziehen.
Der Funtion wird eine Zeiger auf einen Integer übergeben und der Zeiger wird zurück gegeben. Dazu muß der Rückgabetyp der Funktion natürlich auch ein Zeiger sein. Deshalb die zweite Variante. In der ersten Variante hat die Funktion gar keinen Rückgabewert (void = Funktion hat keine Rückgabe).

maxim
07.01.2003, 18:42
ja das mit int ist klar^^ musste schnell schreiben:D

aber wieso muss vor dem funktions name auch ein *?
nur weil eine adresse zurückgegeben wird? das macht doch keinen unterschied?! eigentlich wird ja sowieso ein vektor zurückgegeben...das kapier ich nich^^

Kei-san
07.01.2003, 18:58
ohne * würde der Compiler einen int als Rückgabewert erwarten.

traexx
07.01.2003, 21:02
Original von abc...
was ist mingw und dev c++??? ?(


mingw ist die Portierung von gcc und den anderen gnu-Hilfsprogrammen nach Windows

dev c++ ist der Editor dafür


@Kei-San: auf den meisten Systemen ist ein int genauso gross wie ein Pointer und kann deshalb auch einen aufnehmen.

maxim
08.01.2003, 12:29
Original von traexx

Original von abc...
was ist mingw und dev c++??? ?(


mingw ist die Portierung von gcc und den anderen gnu-Hilfsprogrammen nach Windows

dev c++ ist der Editor dafür


@Kei-San: auf den meisten Systemen ist ein int genauso gross wie ein Pointer und kann deshalb auch einen aufnehmen.


ach so, dann ist dev c++ nur der editor, debugger usw. und der compiler selbst ist mingw?!

ach so, das ist also nur wegen der grösse...
würde es dann mit long int gehen?

Kei-san
08.01.2003, 12:49
ach, stimmt ja. Dev-C++ benutzt mingw als Compiler (man kann aber z.B. auch cygwin benutzen).....ich habs nur mal vor ein paar Jahren kurz getestet.
Unter Win benutze ich normalerweise Visual C++

@traexx
es mag zwar möglich sein (wenn der Compiler nicht meckert; habs noch nicht ausprobiert) aber es nicht gerade ein guter Programmierstil.

maxim
08.01.2003, 14:22
1.

a++

2.

*b++


sind 1. und 2. das gleiche, wenn a ein zeiger auf ein feld ist, und b ein zeiger auf a ist?

isuke
09.01.2003, 16:11
Benutz einfach ein Rpg Programm dann kannst du Fantasy spiele machen in einer 1 d grafik brauchst aber eine gforce Grafik karte

Klopfer
09.01.2003, 16:25
1D... wie soll das aussehen?
Und wieso braucht er dann eine bestimmte Grafikkarte? (Wenn du 2D meinst: Das kann jede Grafikkarte. Und es wird inzwischen kaum ein Spiel geben, was sich auf eine bestimmte Grafikkarte festlegt.)

maxim
09.01.2003, 17:21
Original von maxim
1.

a++

2.

*b++


sind 1. und 2. das gleiche, wenn a ein zeiger auf ein feld ist, und b ein zeiger auf a ist?

isuke
09.01.2003, 19:25
Ist bei !1d ist die grafik von Pokemon man brauch ne gute wenn nicht sieht man nichts

Mr.Terry
09.01.2003, 19:32
Original von Rob O
Ist bei !1d ist die grafik von Pokemon man brauch ne gute wenn nicht sieht man nichts


Nein die ist 2D. 1D ist ein Punkt oder eine Linie als Beispiel. Also alles was keine Fläche und kein Raum hat. Pokémon ist 2D ;)

traexx
09.01.2003, 19:39
Original von Kei-san
ach, stimmt ja. Dev-C++ benutzt mingw als Compiler (man kann aber z.B. auch cygwin benutzen).....ich habs nur mal vor ein paar Jahren kurz getestet.
Unter Win benutze ich normalerweise Visual C++

@traexx
es mag zwar möglich sein (wenn der Compiler nicht meckert; habs noch nicht ausprobiert) aber es nicht gerade ein guter Programmierstil.


ich weiss, aber ich habe gedacht, das man weiss das man das nicht macht ;) Man kanns ja einfach konvertieren

mingw schliesst den debugger etc. mit ein...




@maxim:

1. a++

2. (*b)++

:yes:

ist das gleiche

Kei-san
09.01.2003, 20:23
Original von traexx

Original von Kei-san

@traexx
es mag zwar möglich sein (wenn der Compiler nicht meckert; habs noch nicht ausprobiert) aber es nicht gerade ein guter Programmierstil.


ich weiss, aber ich habe gedacht, das man weiss das man das nicht macht ;) Man kanns ja einfach konvertieren


also hab mal kurz ne dummy function erstellt und der gcc meckert bei

int foo(int* zeiger)
{
return (zeiger);
}

das er keinen cast hat....


edit:
@maxim: schöne sig :D

traexx
10.01.2003, 12:28
int foo(int* zeiger)
{
return ((int) zeiger);
};

besser so? :D

wie lange proggst du in C?

Kei-san
10.01.2003, 13:43
mit explizitem typecast funktioniert es natürlich


nicht lange :rolleyes: und immoment habe ich auch gar keine Zeit dazu

maxim
10.01.2003, 15:07
Original von traexx
int foo(int* zeiger)
{
return ((int) zeiger);
};

besser so? :D

wie lange proggst du in C?


wieso muss man eine int variable in eine int variable umwandeln? was bringt das?

und macht es einen unterschied ob man schreibt int* zeiger oder int *zeiger?

ach und was hatte ich da für ne sig?
das avatar ist scheisse, ich weiss, ist aber nur zur tarnung, muhuhuahahaha^^

was bringt oop eigentlich? ich hab den sinn nie verstanden....

und seit wann proggst du traexx?

Kei-san
10.01.2003, 15:45
Original von maxim

Original von traexx
int foo(int* zeiger)
{
return ((int) zeiger);
};

besser so? :D

wie lange proggst du in C?


wieso muss man eine int variable in eine int variable umwandeln? was bringt das?

Es wird ein Zeiger auf einen Integer in einen Integer umgewandelt. Ansonsten akzeptiert der Compiler den Code nicht. Man muß den Zeiger explizit umwandeln (implizit würde imho auch wenig Sinn machen)

und macht es einen unterschied ob man schreibt int* zeiger oder int *zeiger?

Macht es nicht.

ach und was hatte ich da für ne sig?
das avatar ist scheisse, ich weiss, ist aber nur zur tarnung, muhuhuahahaha^^

Deine letzte sig mit der Frage an neojay^^
btw: neo ist mein..... :D:D:D

was bringt oop eigentlich? ich hab den sinn nie verstanden....

Oh, das ist eine einfache Frage auf die mir keine leichte kurze Antwort einfällt^^""
Darüber gibt es umfangreiche Bücher.
Unsere Softwaresysteme werden immer komplexer. Um Ordnung in das Chaos zu bringen und die Komplexität handbar zu machen, zerlegt man das Problem.
Die algorithmische Sichtweise konzentriert sich auf die Anordnung der Ereignisse, während die objektorientierte Objekte verwendet, die eine Aktion auslösen oder von einer Aktion betroffen sind.
OO Methoden dienen letzlich dazu die (ständig wachsende) Komplexität der Software in den Griff zu bekommen.


und seit wann proggst du traexx?

maxim
10.01.2003, 16:01
was heisst imho?^^

hmm...wieso oop? es ist doch so ähnlich wie strukturen, was ist überhaupt der unterschied?

meine jetzige sig ist besser^^

Klopfer
10.01.2003, 18:01
Original von maxim
was heisst imho?^^
In My Humble Opinion = meiner bescheidenen Meinung nach


hmm...wieso oop? es ist doch so ähnlich wie strukturen, was ist überhaupt der unterschied?
Objekte bringen ihre eigenen Methoden mit, um die in dem Objekt gespeicherten Daten zu manipulieren. Von außen sollte man (bei disziplinierter Programmierung) gar nicht an die internen Daten des Objekts rankommen, ohne eine der eingebauten Methoden des Objekts zu benutzen.
Das verhindert, dass versehentlich unerwünschte Operationen mit den Daten durchgeführt werden.

Außerdem gibt's den Vorteil der Vererbung.
Wenn du zum Beispiel einen Computerspieler und einen menschlichen Spieler hast, dann kannst du dir angucken, welche Gemeinsamkeiten beide Spieler haben, daraus einen "Urspieler"-Typ (oder besser gesagt eine Klasse) zusammenstellen, und dann erben die Computerspiele-Klasse und die MenschSpieler-Klasse die Eigenschaften und Methoden von dem Urspieler, und die beiden neuen Klassen können dann jeweils einzeln erweitert werden. (Simples Beispiel, geht auch viel komplexer.) Das macht einige Sachen einfacher.

maxim
10.01.2003, 18:11
aber man könnte jedes programm mit oop auch ohne oop machne, oder?

und was ist polymorphie und noch so was?

was bringt vererbung überhaupt? man kann einfach die eine zu vererbende datei kopieren und die daten ändern, wäre doch dasselbe?!

maxim
11.01.2003, 17:37
und kann man mit #if nur makros testen? oder ginge auch:

int x;

#if x==0
blablabl
#endif

?

und was sind makros eigentlich genau?

Kei-san
11.01.2003, 18:15
Original von maxim
und kann man mit #if nur makros testen? oder ginge auch:

int x;

#if x==0
blablabl
#endif

Das funktioniert nicht, weil #if eine Präprozessoranweisung (fangen mit # an) ist. Der Präprozessor arbeitet diese Befehle vor der eigentlichen Compilierung ab.
int x ist eine Variable und wird vom Präpozessor gar nicht beachtet. (Zumal ihr Wert auch erst bei der Programmausführung feststeht.)


Makro leitet sich von Makrobefehl bzw. macro instruction ab und bezeichnet im allgemeinen eine Folge von Anweisungen, die unter einem bestimmten Namen zusammengefaßt werden, der im Programm anstelle der Anweisungsfolge benutzt werden kann.
Wie symbolische Konstanten werden sie mit #define definiert. Es gibt Makros mit und ohne Parameter.


zum Thema OOP hab ich noch einen Link:
Object-Oriented Programming for Game Programmers (http://www.geocities.com/SiliconValley/Grid/2832/oogame.html)
(ist auf Englisch) nach der Lektüre sollte man auch Polymorphie verstanden haben.


aber man könnte jedes programm mit oop auch ohne oop machne, oder?
Sicher. Man könnte es auch direkt im Assembler machen oder gar direkt den Code hexadezimal eingeben.
Aber warum macht man es nicht? Weil es viel zu kompliziert wäre.
Der Objektorientierte Ansatz ist einfach eine Methode um die Komplexität in den Griff zu bekommen.

maxim
11.01.2003, 18:21
alles klar, danke!

das ist glaub ich besser, auch weils deutsch ist!(englisch kann ich eben nich so gut...)

teil 1 (http://www.tutorials.de/tutorials27333.html)

teil 2 (vererbung) (http://www.tutorials.de/tutorials27366.html)

teil 3 (polymorphie) (http://www.tutorials.de/tutorials27415.html)

traexx
13.01.2003, 11:42
Original von Klopfer
Objekte bringen ihre eigenen Methoden mit, um die in dem Objekt gespeicherten Daten zu manipulieren. Von außen sollte man (bei disziplinierter Programmierung) gar nicht an die internen Daten des Objekts rankommen, ohne eine der eingebauten Methoden des Objekts zu benutzen.
Das verhindert, dass versehentlich unerwünschte Operationen mit den Daten durchgeführt werden.

Außerdem gibt's den Vorteil der Vererbung.
Wenn du zum Beispiel einen Computerspieler und einen menschlichen Spieler hast, dann kannst du dir angucken, welche Gemeinsamkeiten beide Spieler haben, daraus einen "Urspieler"-Typ (oder besser gesagt eine Klasse) zusammenstellen, und dann erben die Computerspiele-Klasse und die MenschSpieler-Klasse die Eigenschaften und Methoden von dem Urspieler, und die beiden neuen Klassen können dann jeweils einzeln erweitert werden. (Simples Beispiel, geht auch viel komplexer.) Das macht einige Sachen einfacher.


hmm...

unter C kann ich einfach eine bestimmte Menge Funktionspointer machen, die dann eben auf spezielle Funktionen der Art verweisen. Das einzige Problem ist die Erweiterbarkeit von Klassen der Daten wegen her, die man nur durch Erweiterungen von ausserhalb (Weitere Daten werden in externer Datenbank gespeichert, Struktur ist Teil einer anderen Struktur...) hinzufügen kann.

fuer alle dies nicht verstanden haben:

typedef struct
{
unsigned short x, y;
//wie kann man void* durch player_t ersetzen? :?
void (*draw)(void*, bitmap*);
void (*go)(void*);
} player_t;

void player_draw1(player_t* pl, bitmap* bmp);
void player_draw2(...)...

//das ganze mit den Run-Funktionen

void player_go1(player_t* pl);
...

//"Konstruktor":

player_t create_player(unsigned short x,unsigned short y, int typ)
{
player_t* player = (player_t*) malloc(sizeof(player_t));
switch (typ)
{
case TYP_BOB :
player.draw = player_draw1;
player.go = player_go1;
break;
case TYP_BEN :
player.draw = player_draw2;
player.go = player_go2;
break;
default :
player.draw = player_draw_default;
player.go = player_go_default;
};
return player;
};

int main(int argc, char** argv)
{
player_t* pl = create_player(100, 33, TYP_BEN);
free(pl);
return 0;
};


mit dem player kann man jetzt lustige Sachen anstellen z.b. einfach die Funktionspointer aendern oder so... das ist einfacher zu handhaben als über virtuals neue Objekte kreieren zu müssen, oder in einer draw()-Funktion mit ner Menge switches zu arbeiten :)

uff... hoffe der Code geht... habe ihn nicht auf vollständigkeit und richtigkeit überprüft :D (einfach drauflosgeschrieben)