Spieleprogrammierung

    • Offizieller Beitrag

    Hi Allerseits!
    Da ich grad Semesterferien habe und mich das Thema interessiert würde ich gerne mehr dazu erfahren.
    Hassesdorn hatte bereits angedeutet in diesem Bereich Tätig bzw. spez. dafür geschult zu sein. Alle anderen, die sich für das Thema interessieren oder gerne mal Programmieren sind natürlich ebenso gefragt.


    Interessieren würde mich zB vor allem was man so mitbringen müsste um kleine, aber durchaus unterhaltsame Spiele zu basteln.
    Meine Kenntnisse beschränken sich zur Zeit auf HTML, CSS, PHP und bröckchenweise JavaScript, womit sich nicht sonderlich viel anfangen lassen sollte, weshalb ich zur Zeit mit Hilfe des Buches "Programmieren lernen!" (Galileo Computing) nochmal ganz von vorne Anfange. Das Buch erläutert das grundlegende Basiswissen zum Thema Programmierung und verspricht einem, ganz nebenbei, soviel C# beizubringen wie für die ersten Projekte benötigt wird.
    Allerdings habe ich schon von Personen gehört, das sie C++, C# vorziehen würden, insbesondere wenn es um Spiele geht, das Warum würde mich hier auch sehr interessieren.
    Ebenso habe ich hier bereits ein Buch über die Programmiersprache Python liegen, welche mir vom strukturellen Konzept her einfach auf Anhieb gefallen hat, aber dass nur am Rande.


    Gruß Quappe :D

  • Also


    vll erstmal zu mir


    ich habe 3D Programmierung and er Games Academy Frankfurt studiert und danach bin ich in die Software Entwicklung bei MegaSpielgeräte gegangen (Ich weis nicht direkt Videospiel-Programmierung, aber das hat seinen Gründe)


    hier mal die Liste der Projekte an der GA an dennen ich mitgewirkt habe:


    Sui & Cide:


    http://www.youtube.com/watch?v=Ukvib1IWa4A


    Epilouge (oder auch liebevoll Epifail wie wir es später tauften, ohne mist so schlecht):


    Wollte hier eigentlich en Video oder ne Facebook-Page posten aber anscheinend gibt die net mehr XD



    SPLAT! (SAU GEIL fast so gut wie Sui & Cide):


    http://splat-game.com/


    Und zum letzten gibts auch kein Material war auch net so prickelnd Shapes of Light


    soooooooooo ich meld mich anchher nochmal ^^

  • Der unterschied zwischen C und C++ ist der das C++ auch Objektorientiertes programmieren ist und auch gut unter Windows zum laufen gebracht werden kann wohingegen das normale C mit Objekte nix am Hut hat und sich meist programmtechnisch mehr über eine Commandointerpreteroberflaeche freut. Meine Erfahrungen in Programmiersprachen beschraenken sich auf Turbo Pascal, Basic, Turtle, und C. Was ich mal über Assembler wuste (ja da hatte ich auch mal 2 Monate was mit, aber da war MS DOS 6.0 Brandneu) habe ich wieder vergessen. Wie man sieht happert es bei mir also schon am Wissen zur Erstellung einer grafischen Spieloberfläche, aber Programmabläufe durchdenken klappt ganz gut.

    Die Sense gehört zwar nicht zu den wichtigsten und bedeutsamsten Kriegswaffen, aber wer sich auf der falschen Seite einer Bauernrevolte befindet macht rasch die Erfahrung daß sie in geübten Händen eine Menge Unheil anrichten kann.

  • Zitat

    Wie man sieht happert es bei mir also schon am Wissen zur Erstellung
    einer grafischen Spieloberfläche, aber Programmabläufe durchdenken
    klappt ganz gut.

    Und hier ist noch so jemand ;). Oder 'ne Mischung zwischen Novarius und Quappe - natürlich rein programmiertechnisch - nämlich:


    HTML, CSS und javascript beherrsche ich denke ich recht gut, wobei ich auch recht weit von einem Profi entfernt bin. Jedenfalls gab es in diesen Sprachen noch kein (eigenes) Problem, das ich nicht gelöst hab' (zur Not mit Googels-Hilfe | edit: Es hört sich jetzt so an, als ob ich komplette Skripte suche. Die bringen mich aber nur bedingt weiter, denn es macht mich hibbelig, wenn ich in meinem Quellcode einen Befehl (oder eine Syntax) nicht verstehe.. Ich google eher nach neuen Befehlen).


    PHP ist so 'ne Sache bei mir. Ich kommuniziere zwar oft mit Datenbanken (mit PhP), benutze zum verarbeiten der Vars allerdings gerne javascript - ich kenne mich da mit den befehlen und der Syntax einfach besser aus. [Mir ist klar, dass das beim Client passiert und daher die Seite langsamer werden könnte (mal von "kein JS vorhanden" ganz abgesehen). Um's kurz zu machen: Ich hab PHP nie richtig gelernt, konnte mich aber bei Problemen immer gut hereinfinden (z.B. LoginSysteme (Sessions), oder eben die Datenbankkommunikation).


    Klar, ich programmiere Internetseiten - keine Spiele. Zwar kann ich Simfarm oder Diggers programmieren (habe ich auch bereits getan :D ; dafür stellt javascript ja alles Benötigte), ich benötige aber immer den Browser zum Kompilen. (Das "Spiel" besteht also aus *.js, *.php und *.css dateien (mit Bildern), man startet es durch Öffnen im Browser).


    Für mich hatte ich dann einfach mal das JDK (Java-Development-Kit) installiert (also Java), um "echte" Programme schreiben zu können (so etwas ähnlich "objektorientiertes" hatte ich auch in der Uni). Da werde ich auch mit zu recht kommen (besser: Ich denke, da kann ich mich reinarbeiten), damals konnte ich die anstehenden Probleme aber schneller mit javascript lösen.


    C++ ist ja glaube ich ganz ähnlich. C# kenne ich nicht.




    So, warum der lange Epilog über mich?
    Ich berufe mich da einfach mal auf Quappes Satz "Alle anderen, die sich für das Thema interessieren oder gerne mal Programmieren sind natürlich ebenso gefragt.", denn ich die "echte" Spieleprogrammierung würde ich wirklich gerne hineinschnuppern (und ggf. -rutschen). Mit "echt" meine ich jetzt natürlich keine Engines o.Ä., was ich schreiben möchte, sondern vielmehr weiterhin SimFarm (ergo kleine, grafisch anspruchslose Spiele), aber eben so, dass man es mit einer *.exe starten kann.


    Ob ich da der richtige Mann für dich bin, musst du entscheiden (falls du überhaupt ein kleines Projekt im Auge hast). Deine Eingangsfragen treffen jedenfalls genau meine Interessen! :thumbup:


    Greetz, IP

    • Offizieller Beitrag

    Im Sinn habe ich dass, was hier schon lang, aber noch viel länger unter meinem Skypenamen im Forum steht (und noch ein Dutzend weiterer Spielereien). Das dies alles noch in ferner Zukunft liegt ist mir aber bewusst (was mich aber trotzdem nicht davon abhalten wird bereits Vorbereitungen zu treffen, falls dies so möglich sein sollte). Wer ebenfalls Interesse daran hätte, Ubisoft mein letztes großes Konzept als sehr mal, pfuschen können wir auch(!), an den Kopf zu schmeißen darf sich da gerne bei mir melden.
    Vorerst dachte ich aber, dass ein mit etwas einfacherem Anfangen sollte. Ich wollte mich in etwa wie folgt an die Sache heran tasten:

    • Programm, dass Sudokus lösen kann (da ich den Algorithmus dazu mal aus purer Langeweile geschrieben habe)
    • Tetris!
    • Tetris feats. Jawbreaker
    • Ein Kartenspiel
    • Pokémon!


    Zudem versuche ich auch mit diesem Thread mal alle zu demaskieren, die mehr Kenntnisse haben als sie zugeben wollen, aber Psst! das ist geheim!
    Mein Momentaner Stand der Lektüre sagt mir, dass C++ und C# in Grunde beide gut geeignet sind, weshalb ich gerne doch nochmal auf unser Thema bezogen erläutert hätte welches Wofür wie am besten geeignet wäre. C# scheint nur auf Microsoftplattformen (schließt das eigentlich die XBox-Systeme mit ein?) verfügbar sein, wie ich gelesen habe wohl auch, mit hinterher hinkender Entwicklung evtl. auf Linux.
    C++ scheint mir mächtiger, dafür aufwendiger und Fehleranfälliger dafür im Grunde überall verfügbar.
    Ergänzungen Seiten derer die wirklich Ahnung haben?


  • Wahhhh das zitieren klappt net!!!!


    Naja egal also erstmal zu den Sprachen im Endeffekt kenne ich mich gut mit C++ und C# aus. Es gibt noch etwas mehr was aber mal unwichtig sein soll.


    Also zu untescheiden und ich hoffe ich trette jetzt niemand auf den Schlips ist erstmal zwischen Scriptsprachen und Programmiersprachen. C++ und C# sind die gängisten Programmiersprachen die in der Spieleentwicklung benutzt werden. Java wird auch noch oft verwendet, obwohl hier bereits die Geister sich streiten ob Script oder Prog-Sprache.


    Viele Leute laden sich sowas wie den GameMaker runter pappen da en par sachen aneinander Scripten etwas rum und behaupten sie hätten ein Spiel programmiert das ist FALSCH! Denn das was man dort tut ist scripten. Ich habe garnicht die möglichkeiten wie beim eigentlichen programmieren.


    Als Progger brauch man weder Talent noch ein überdimensioniertes Gehirn. Man brauch (Spieleindustriebezogen) Herz und Seele. Mann muss sich rein knien können ohne wenn und aber. Und das wichtigste man muss sich "im Code" wohlfühlen. Niemand kann ein !guter! progger werden der sich nicht im Code wohlfühlt. Klingt dumm, is aber so!


    Um noch eins vorweg zu klären, ich bin alles andere als die Antwort aller Fragen!. Ich bin Jung bin erst seit nem Jahr mit meinem Studium fertig also bitte erhofft von mir keine Wundertaten! Wenn ich was nicht weis werde ich leiber nix sagen als euch halbwahrheiten aufzutischen.


    SOOOOo zum Thema:


    Ob man nun C# oder C++ nimmt ist jedem selbst überlassen. Ich persöhnlich würde jedem Anfänger C# empfehlen. C# gibt einem viele Dinge an die Hand die man sich sonst erst bauen müsste (zumindest mit XNA!) Garbagecollector zb. Man sollte wenn man C# benutzt auch XNA! verwenden es is einfach einfacher und leichter zu handlen. Ich werd spätestens Sonntag auch mal ein zwei gute Tutrotials suchen wo ihr euch euer eigenes kleines Spieln innerhalb vnon 2 Stunden in XNA mal geproggt habt das wichtig ist, wenn man es wirklich lernen WILL!, das man solche Tutorials macht aber in dem Tempo das man alles versteht, anders kann man es knicken. Auch Fachliteratur werd ich euch gerne empfehlen wobei dort die englische einfach besser ist! Es gibt einen Grundstock an literatur der sowas wie die Bibeln der Spieleprogger sind ^^.


    Also was auch jedem klar sein muss ist das es verschieden JOBS als Progger in der Spieleindustrie gibt es gibt net eifnahc ne Horde progger die im Keller gehalten werden und das mal bauen (naja schon sie haben nur alle interschiedliche berufsbezeichnungen). Die Berufsbezeichnungen können dabei lustigerweise von Firma zu Firma anders sein. Aber grundsätzlich kann man zwischen Engine, Gameplay, Shader, und Tool-Programmierern unterscheiden.


    Engine: baut die Engine auf.
    Gameplay: arbeitet an den Gameplay-Featuers.
    Shader: Ach ja das vermiss ich im mom en bisschen. Bauen HLSL oder ähnlcihe shader sehr sehr cool ^^
    Tool: bauen plugins und Tools für artists oder GD's (GameDesigner)


    Das ALLERWICHTIGSTE zum Schluss:


    Planung und Absteckung!


    Fangt mit winzigen Spielen an! Die Projekte die ihr oben seht sind alle nicht grade die nächsten Heroes Teile vom Umfang Splat! zb hat 3 level und en Endgegner gradem al 15 fähigkeiten und ich glaub 9 Waffen. Dazu 14 Gegner wenn ich mich net irre. Daran haben zwei Progger ein halbes Jahr in Hardcore-Arbeit gesessen. Das hies kaum Freizeit sonder bis nachts arbeiten. Also fangt winzig an. Wirklich winzig und freut euch über jeden noch so kleinen Erfolg. Wenn ihr per Tastendruck ein viereck erstellen könnt oder es nach links bewegen könnt freut euch als gäbs kein morgen. Glaubt mir es hilft am Ball zu bleiben.


    Sooo noch was was mir grade einfällt:


    Ihr müsst euch entscheiden will ich auf Basis einer bestehenden Engine arbeiten oder ne eigene bauen? Ich empfehle jetzt mal grob die zweite Lösung, den viele Engines erlauben euch es nur zu Scripten oder aber ihr braucht erstmal ewig euch in die Engine (was durchaus sehr schwer sein kann) reinzuarbeiten.
    Daher lieber selber bauen nach dem Prinzip selber essen macht Fett(mit wissen ^^).


    Seid darauf vorbereitet schonmal lange an einem Problem zu hängen! mit lange meine ich Tage!


    Soo noch zwei Dinge:


    1. Ich kann euch nur den Weg zeigen nich euch Programmieren beibringen!
    2. Wegen dem UNterschied zwischen C++ und C# melde ich mich noch, das C# für Windows Plattformen ist stimmt auf jedenfall. Man kann gezeilt für Xbox 360, Windowsphone oder Pc entwickeln (und immer ans XNA denken ^^)

    • Offizieller Beitrag

    Java wird auch noch oft verwendet, obwohl hier bereits die Geister sich streiten ob Script oder Prog-Sprache.


    Also das hab ich ja noch nie gehört. Java ist eine imperative, stark typisierte, statische Programmiersprache, die in Bytecode kompiliert wird. Da ist nichts mit interpretieren und scripten. Null. Nada.


    Als Anfänger würde ich C# wählen (hätte ich die Wahl zwischen C++ und C#), wenn ich Programme nur für Windows und bedingt (siehe Mono) für Unixoide Betriebssysteme schreiben wollen würde.
    Das ist auch der Grund warum ich bei Java geblieben bin (das entgegen vieler Vorurteile nicht "langsam" ist. Das Problem liegt hier vielmehr [wie bei vielen anderen Sprachen auch, die es einem leicht machen, schlechten Code zu schreiben] am Programmierer selbst ;)), da Java doch immer noch die beste Plattformunabhängigkeit bietet.
    Eine andere nette Sprache ist Python, da kann ich aber bezüglich Spieleprogrammierung nichts zu sagen, zumal Python eigentlich eine interpretierte Sprache ist, was der Ausführungszeit meist nicht so gut bekommt, aber dafür andere Vorteile bietet. Es gibt aber durchaus die Möglichkeit, Python vorzukompilieren oder gar mit C++ zu koppeln, aber da kenn ich mich gar nicht mit aus.
    Linux User sollten Vala mal eine Chance geben, ist eine moderne Mischung aus C#, Java und C++ und wird zu C übersetzt. Tolle Sache :) (Gibt es aber glaube ich sogar auch für Windows).


    Jetzt bin ich ein bisschen abgeschweift: Wer sich keine Sorgen um Plattformunabhängigkeit machen will, nimmt Java oder schreibt portablen C++ Code.

    • Offizieller Beitrag

    Keine Sorge, ich verlange von niemanden dass man mir es beibringt, ich will in erster Linie ja selber lernen+basteln.
    Das Thema sollte halt eher allgemeine Themen, Anfängerfragen, akute Probleme und ähnliches abdecken.
    Momentan interessiert mich zB. immer noch die C++ vs. C# Geschichte.
    Bisher habe ich das so verstanden, dass, wenn man ein Programm mit C# schreibt, eine Art "Dolmetscher" zwischen Programm und System vorhanden sein muss. wie wäre das zu verstehen?


    Am liebsten wäre es mir, wenn am Ende etwas dabei herauskommt, dass man lediglich installieren oder entpacken muss und dann, ohne weitere Zusätze von alleine lauffähig ist.
    Entspricht dies nun den Tatsachen oder wäre es uhm... anders?


    (Zur Erklärung, ich verwende hier Bücher, die einen schnellen Einstieg versprechen, mit denen man auch relativ schnell voran kommt, die aber leider alles, was der Autor für "unwichtig" hielt aussparen. Zum Beispiel wurde über Programmiersprachen auch nur gesagt, dass C# verwendet wird da es Einsteiger-freundlicher als C/C++ und schneller als Java sei, dazu eine Tabelle aus denen man wenigstens noch einige zusätzliche Infos entnehmen konnte, das war's aber dann schon. Bestimmt kein schöner Stil, aber ich erinnere mich noch daran, das ich Informatik in der Schule GANZ SCHNELL abgewählt hatte, als mir eine Schnarchnase von Geschichts- und Informatiklehrer mit der Geschichte des Computers ankam. Ich hab aus diesem einem Jahr Unterricht gerade mal soviel mitgenommen, dass.... im Grunde gar nichts.)

    • Offizieller Beitrag

    Am liebsten wäre es mir, wenn am Ende etwas dabei herauskommt, dass man lediglich installieren oder entpacken muss und dann, ohne weitere Zusätze von alleine lauffähig ist.


    C# setzt ein installiertes .NET-Framework voraus, kann gut sein, dass Microsoft das mittlerweile sowieso (in welcher Version auch immer) mitliefert.
    Java setzt ein JavaRuntimeEnvironment voraus, ist auch häufig anzutreffen bei vielen Leuten.
    C++ setzt... naja, also das hängt davon ab, welchen Compiler (in Microsofts Fall auch IDE) man verwendet (siehe auch VCRedist).
    Prinzipiell ist es aber bei allen sehr einfach, eine ausführbare Datei zu erzeugen, die ohne viel Gefrickel funktioniert.

    • Offizieller Beitrag

    Solange da kein riesiger Rattenschwanz am Programm hängt ist mir das im Grunde egal. Mich nervt halt nur die Vorstellung dass da immer eine riesige Bibliothek mitgeschleppt wird, von der vllt nur ein Bruchteil benötigt wird, das wirkt soweit wie ich das Prinzip bisher verstanden habe alles andere als elegant.


    Ok, abseits der Theorie noch eine Frage:
    Wohin mit Funktionen?
    PHP lies mich die hinschreiben wo ich wollte, solange sie vor ihrem ersten Aufruf stehen. C# scheint das grad egal zu sein, aber sie dürfen wohl auf Teufel komm raus nicht im Hauptteil (Name?) stehen...

  • Wenn ich meinen Freund, der selbständiger software entwickler, richtig verstanden habe, dann ist das ganze .net zeug sehr anfällig für Reverse Engineering.

    Das stell ich mir jetzt problematisch für Kopierschutz und ähnlichen vor.Mit "Hauptteil (Name?)" meinst du die main funktion? Wenn ja von dort rufst du die anderen Funktionen auf.

  • Du must die Funktion bloss erst mal definieren damit die main funktion dann auch was damit anfangen kann wenn sie sie aufrufen soll. Deswegen nennst du bei c ja auch bei Standardfunktionen die von dir verwendeten Library Dateien damit dich der Compiler nicht einfach nur blöd ankuckt was er da einbauen soll.

    Die Sense gehört zwar nicht zu den wichtigsten und bedeutsamsten Kriegswaffen, aber wer sich auf der falschen Seite einer Bauernrevolte befindet macht rasch die Erfahrung daß sie in geübten Händen eine Menge Unheil anrichten kann.

  • Nur noch mal kurz bezüglich eineres älteren Postings weiter oben: HTML, Javascript und CSS sind rein für Webseiten und im begrenzten Maße auch für Apps gedacht (bzw. möglich). PHP auch, da weiß ich jetzt aber nicht, ob das eventuell auch in anderen Sprachen mit integriert werden kann. Würde mich aber ein wenig wundern.


    @Pimp: ich würd sagen, er hat java und javascript nicht verwechselt ;)
    Achja, bin auch web-programmer (erstell also webseiten und web-apps), aber noch beruf anfänger. hab auch ein paar andere sprachen wie java, visual basic/studio, delphi etc... grundlagenmäßig in der ausbildung oder weiterbildung gelernt. erwartet aber nicht, das ich davon noch was kann xD Die C-Reihe gehörte aber leider nie dazu.

    • Offizieller Beitrag

    Kurzdefinition von Reverse Engineering?


    @ Novarius
    Mein Beispielprogramm funktioniert ja, obwohl die Mainfunktion VOR der Definition der einzelnen Funktionen steht, das hatte mich irritiert, die Frage ist eher so zu verstehen als dass ich nicht ganz weiß wo im Quelltext man nun die Funktionen definieren soll. Innerhalb der Mainfunktion, wie ich zuerst dachte scheint ja falsch zu sein (zumal mir auch nicht ganz klar war, dass das als Funktion anzusehen ist).

  • http://de.wikipedia.org/wiki/Decompiler

    Das kann auch von Vorteil sein. Der besagte Freund hatte durch HDD crash den Quellcode von einen C# Projekt verloren und nur veraltete Sicherungen. Aber er hatte noch eine aktuelle Version als "exe" und hat aus dieser wieder den aktuellen Quellcode gewonnen. ^^


    edit: z.B. mit http://www.reflector.net/ ( das war früher kostenlos)

    • Offizieller Beitrag

    Also ein Segen für OpenSource und ein Fluch für Copyright-Verfechter?
    Interessant..!


    Da meine letzte Frage, wo im Quelltext man eigentlich Funktionen hinschreibt noch im Raum steht werf ich mal gleich die nächste dazu, ob man einer Funktion ein Array als Input gehen kann, ohne dessen Größe oder Form definieren zu müssen?
    Oder man sage mir ob es nicht eine Standardfunktion gibt, die mit den größten vorhandenen Wert aus einem Zahlenarray zurück gibt.


    Nachtrag: Nein, ich glaub ich will beides wissen... und natürlich noch die Alte Frage nach den Funktionen :D

  • Quappe: Wenn du Software entwickelst und verhindern willst, das diese reverse engineered wird, dann wirfst du über deinen fertigen Code nen Obfuscator drüber. Da gibt es verschieden Gute zu verschiedenen Preisen. Das obfuskierte dann builden und da kommt im Normalfall keiner mehr an deinen Code.