"PC-Spiele" wie funktionierts
lima-city → Forum → Heim-PC → Spiele
ahnung
aussehen
beispiel
bild
code
dank
fehler
frage
http
leute
paar
pixel
programm
programmieren
programmiersprache
speichern
spiel
sprache
textur
url
-
Hey,
ich spiele ziemlich fiele spiele und Arbeit sehr fiel am PC und habe mich einfach mal gefragt "wie funktionierst"
ich fände es toll wen mir ein paar Leute antworten senden könnten. Hier habe ich einfach mal meine größten Fragen aufgelistet
=> Mit welchem Computer Sprachen laufen die Spiele.
=> Wen man 3D Maps erstellt (paratdes Beispiel ist Minecraft oder Cabal ;) ) kann man ja nicht Pixel für Pixel vorgeben, aber irgendwie ja schon! Also das klingt jetzt vermutlich ziemlich Verwirrend, wo ich drauf hinaus will ist mit welchen programmen werden solche Maps gemacht? Es kann ja kein Paint sein =D
=> Gibts spezielle Sachen wo drauf man besonders beim Programmieren/schreiben drauf achten muss, also gegenfrage xD "Gibts spezielle Sachen wo drauf man achten sollte wo Programmierer Unsauber gearbeitedt haben und wo Fehler auftreten" (mir würde als paratdes Beispiel so was wie Grafik Löscher einfallen)
Also ich bin selbewie ihr bestimmt schon an der Fragestellung gemerkt habt auch ein bisschen am Programmieren interessiert. Würde mich auch über ein paar Tipps freuen
MFG -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das Wichtigste worauf man unbhängig von Lebenslage und Interessen achten sollte ist korrekte Grammatik und Rechtschreibung.
Spiele laufe nicht mit einer Computer Sprache (wobei es diese Wortschöpfung soweit mir bekannt garnicht gibt) sondern sind in einer Programmiersprache geschrieben. Da du selbst schon zwei Beispiele genannt hast möchte ich die einmal Aufgreifnen. Minecraft ist in Java programmiert, Cabal höchstwahrscheinlich in C# oder C++.
Der ganze Witz an 3D-Maps ist es, eben genau das setzen von einzelnen Pixeln zu verhindern. Je nach Spiel und eingesetzter Technick werden Polygone oder Voxel verwendet, um aus ein Paar vorgegebenen Punkten im Raum eine komplette Spielwelt zu berechnen. Programme um solche Maps zu erstellen gibt es unterschiedliche. Reine 3D-Programme, die man auch zum Erstellen von Render-Animationen verwenden könnte; Spezielle Map-Editoren die nur für das eine Spiel (oder eine bestimmte Engine) verwendbar sind; oder Editoren von Fans, die herausgefunden haben, wie die Leveldateien eines Spiels gehandhabt werden.
Spezielle sachen die Programmierer falsch machen könne gibt es meiner Ansicht nach nicht. Das beste Beispiel für so ziemlich jeden Fehler den man in der Spieleentwicklung machen kann ist Gothic 3. schlechte Performance, häufige Abstürze, Probleme mit den Speicherständen, usw.... All das was im Allgemeinen als Bug bekannt ist, ist nichts anderes als ein Programmierfehler. Das reicht von so einfachen Dingen wie ein grünes Quadrat wo ein Rotes sein sollte, bis zu komplexen Fehlern wie Plotstopper (zB fehlendes auslösen von Ereignissen, die dich in der Geschichte des Spiels vorankommen lassen).
Alles in allem ist die Spieleentwicklung sicher kein leichtes Terrain. Vorallem als Programmieranfänger ist man schnell einmal versucht auch so etwas Probieren zu wollen. Meist scheitert man aber nicht nur an den mangelnden Programmierkenntnissen, sondern viel mehr am fehlenden Gesammtverständnis der Materie (wie Berechne ich Geschwindigkeiten von Objekten, wie errechne ich Kamerawinkel, wo muss welches Objekt in der Welt plaziert werden um "richtig" auszusehen).
mfg -
danke,
klingt alles sehr komplieziert -.-'
ich würde mich freuen wen noch ein paar leute Antworten hätten.
MFG -
syberspace hat das schon sehr schön beschrieben. Im Bezug auf:
=> Wen man 3D Maps erstellt (paratdes Beispiel ist Minecraft oder Cabal ;) ) kann man ja nicht Pixel für Pixel vorgeben, aber irgendwie ja schon! Also das klingt jetzt vermutlich ziemlich Verwirrend, wo ich drauf hinaus will ist mit welchen programmen werden solche Maps gemacht? Es kann ja kein Paint sein =D
Im Fall von Minecraft werden die Maps vom Programm selber zufällig generiert. Dabei muss man aber zwei Dinge unterscheiden: Einmal die interne Repräsentation der Karte und das was dann wirklich auf dem Bildschirm zu sehen ist. Die Welt selber setzt sich ja aus zufälligen Blöcken zusammen und jeder Blocktyp hat eine Nummerische ID, die hier aufgelistet sind: http://www.minecraftwiki.net/wiki/Blocks#Naturally_Generated (einmal in der Dezimalschreibweise und einmal in der Hexadezimalschreibweise).
Und die Map wird eben in der Form im Speicher verwaltet, dass man die BlockIDs speichert.
Wenn es dann darum geht, die Spielwelt anzuzeigen (und ich rede hier explizit nur von Minecraft. In anderen Spielen können andere Prinzipien verwendet werden), so hat jeder Block bekanntlich 6 Seiten und jede dieser 6 Seiten hat ein entsprechendes Aussehen, das für alle Blöcke des gleichen Typs identisch ist.
Das Aussehen dieser Blöcke wird in einer sogenannten <Englisch>Texture</Englisch> gespeichert. Texturen sind Bilder, die man immer wieder verwendet, um Oberflächen von 3D Objekten darzustellen. Dabei werden Texturen stets so gespeichert, dass man eine direkte Draufsicht auf sie hat. Sobald man den Blickwinkel ändert, muss eine entsprechend gestauchte Textur berechnet werden.
Im Falle von Minecraft ist es relativ leicht die Dateien auszutauschen, die diese Texturen beinhalten und dem Spiel somit ein anderes Aussehen zu gegeben. Siehe dazu: http://www.minecraftwiki.net/wiki/Texture
Im Wiki Artikel dazu wird auch gezeigt, dass die Texturen vieler Blöcke alle in einem gemeinsamen Bild gespeichert sind. Dies spart Speicheroverhead und ist gängige Praxis in der Spieleindustrie. Man spricht in diesem Zusammenhang auch von <Englisch>Sprites</Englisch>.
Wenn du Minecraft spielst, solltest du dir mal Gedanken machen, welche Gemeinsamkeiten dir zwischen den verschiedenen Objekten in der Spielwelt auffallen. Beispielsweise kann man ja alle Blöcke bis auf Bedrock zerstören und woanders hinpflanzen. Man braucht zwar verschiedene Tools zum abbauen, aber trotzdem ist das eine Gemeinsamkeit, die darauf hin deutet, dass nicht jeder Block einzend so programmiert werden musste, dass man ihn platzieren kann, sondern es einen Code gibt, der mehr oder weniger universell für alle Blöcke gilt.
Wenn du diese Gemeinsamkeiten suchst, kann man viel besser verstehen, wie das Spiel intern funktioniert und ein großer Teil der Komplexität, die man vorher gesehen hat, verschwindet. Was aber nicht heißt, dass es trivial ist, so etwas wie Minecraft zu programmieren.
Was die Wahl der Programmiersprache angeht: In der Spieleindustrie ist C++ (oft in Verbindung mit Lua) die Sprache der Wahl, da man damit tendentiell schnellere Programme schreiben kann, als mit anderen Sprachen. Aber das ist nur eine Tendenz. Minecraft ist zwar in Java geschrieben, ist aber trotzdem sehr performant. Und wenn du z.B. Schach programmierst, brauchst du keine aufwendigen Berechnungen und hast relativ freie Wahl, was die Verwendung einer Programmiersprache angeht.
Du kannst dir auch mal einen Einblick in die Programmierung holen, indem du dir mein Lua Tutorial anschaust. -
danke,
hast mir sehr geholfen.
Ich wollte jetzt noch ein paar Aussagen Kommentieren bzw Fragen zu stellen.
Im Fall von Minecraft werden die Maps vom Programm selber zufällig generiert.
ist mir schon bekannt, ich habe mich nur gefragt wie das genau funktioniert, aber das hast du ja unten geschrieben das das mit Java geschiet. Wie man auch in den ganßen Server datein merkt (bzw wen man den Prozess hoch macht)
Nummerische ID
Zu den IDs eigentlich das selbe ;)
<Englisch>Sprites</Englisch>
Wie meinst du das . . .
Schreibt man das einfach in ein <English> Code und dan fertig (natürlich nicht) ich meine was schreibt man da rein ect
Du klingst so als ob du auch Minecraft spielts =D Hast du fieleicht eine ahnung wie man ein Textur Pack erstellt.
hat sich erledigt
Und zu guter letzt, hast du vieleicht einen Tipp wie man C++ lernen kann?
Oder muss man davür Informatic Studieren
MFG
Beitrag zuletzt geändert: 30.11.2011 22:11:00 von giga-score -
So gut wie jedes Spiel hat eine Game Engine. In dieser Game Engine sind Funktionen "geschrieben" die sich z.B. um die Grafik im Spiel kümmern oder um Animationen. Es wäre viel zu umständlich für alles was man ins Spiel bringt extra Funktionen zu schreiben. Stattdessen bringt man sie in der GE zusammen. Die Game Engine ist meistens in C oder einer anderen Hohen Sprache geschrieben. Leider ist C nicht sehr leicht zu debuggen also im Falle eines Fehlers kann ihn meistens nicht mitten im Spiel beheben. Deswegen haben viele Game Engines oder Spiele noch Intepreter Sprachen. Das sind einfachere Sprachen die jedoch sehr viel langsamer sind als z.B. C. Dafür sind sie sehr viel leichter zu debuggen da sie nur Zeile-für-Zeile verarbeitet werden.
Fehler in Spielen oder Programmen sind normal. Man muss aber unterscheiden ob z.B. eine Figur in einem Spiel einfach falsch läuft oder im Code z.B. Speicherfehler sind den die führen häufig zum Absturz des Spiels oder Programms und sind häufig schwer auszumachen.
Maps in Spielen bestehen nicht aus Pixeln sondern aus Ecken die in Dreiecken zusammengefasst werden und zu Flächen zusammengeschlossen werden. Vielleicht ist es dir ja schon mal aufgefallen das manchmal (eigentlich immer), keine Ahnung, (runde( Bäume oder Steine Eckig sind. Das liegt daran da wie mehr Ecken eine Map oder 3D Modell hat umso mehr muss die Grafikkarte rechnen deswegen ist irgendwo Schluss.
P.S.: für C++ muss man nicht studieren, im bin 15 und habs aus dem Internet gelernt (-;
Beitrag zuletzt geändert: 30.11.2011 22:27:06 von krisi12345 -
Ganz berühmte Engines für den Einstieg ist z.B. die Unreal-Engine. Die gibt es in allen möglichen Versionen, die alten sind aber frei zugänglich und zum üben ganz gut. http://www.unrealengine.com/
Außerdem gibt es noch die Acknex-Engine, die kostet was, ist aber übersichtlich und mit Benutzeroberfläche, also auch ganz gut für Einsteiger. Außerdem ist die modular aufgebaut, so dass man sich langsam weiter entwickeln kann und es hängt eine Community dahinter, die einem helfen kann, wenns mal klemmt. http://www.3dgamestudio.com/ -
giga-score schrieb:
danke,
hast mir sehr geholfen.
Ich wollte jetzt noch ein paar Aussagen Kommentieren bzw Fragen zu stellen.
Im Fall von Minecraft werden die Maps vom Programm selber zufällig generiert.
ist mir schon bekannt, ich habe mich nur gefragt wie das genau funktioniert, aber das hast du ja unten geschrieben das das mit Java geschiet. Wie man auch in den ganßen Server datein merkt (bzw wen man den Prozess hoch macht)
Weitere Infos dazu von Notch persönlich: http://notch.tumblr.com/post/3746989361/terrain-generation-part-1
Dabei ist es wichtig zu wissen, dass die Erzeugung der Map eigentlich Pseudo-Zufällig ist. Computer sind verdammt schlecht darin wirklich zufällige Zahlen zu erzeugen und deswegen greift man auf lieber auf Zahlenfolgen zurück, die zumindest wie zufällig aussehen. Diese Zahlenfolgen sind natürlich endlich lang und wiederholen sich irgendwann.
Was tut man also nun, wenn man Zufallszahlen braucht? Man beginnt mit einem Seed-Wert (den man sich aussucht, oder basierend auf z.B. der aktuellen Zeit gewählt wird) und auf Basis dieses Seeds legt man fest, wo man anfängt die Zufallsfolge abzulesen. Wenn man ans Ende der Folge gelangt, muss man wieder von vorne anfangen. Die Folge selber wird aber nicht im Speicher gehalten, sondern kann individuell pro Position berechnet werden.
Die Konsequenz ist daher, dass, wenn zwei Spieler den gleichen Seed für die Map nutzen, die Map auch exakt gleich "zufällig" generiert wird.
Und da das Aussehen der Karte komplett aus diesem Pseudo-Zufallsprozess berechnet werden kann, muss man nur die Veränderungen speichern, die ein Spieler an der Karte vornimmt.
Nummerische ID
Zu den IDs eigentlich das selbe ;)
Ich hoffe das ist damit erklärt.
<Englisch>Sprites</Englisch>
Wie meinst du das . . .
Schreibt man das einfach in ein <English> Code und dan fertig (natürlich nicht) ich meine was schreibt man da rein ect
Ein Beispiel für einen Spritesheet für ein Autospiel
Anstatt für jedes Bild eine eigene Datei anzulegen, packt man eben alle Bilder in eine große Datei, weil sich das leichter verwalten lässt. Die Einzelbilder sollten aber idealerweise alle die gleiche Größe haben.
Du klingst so als ob du auch Minecraft spielts =D Hast du fieleicht eine ahnung wie man ein Textur Pack erstellt.
hat sich erledigt
Im Prinzip brauchst du nur die Grafikdateien aus der Minecraft.jar gegen andere Bilder austauschen. Und die Bilder kann man eben mit jedem beliebigen Malprogramm machen.
Und zu guter letzt, hast du vieleicht einen Tipp wie man C++ lernen kann?
Jedenfalls nicht als erste Programmiersprache. Das lohnt sich nicht. Es ist besser von anderen Sprachen später zu C++ zu kommen, weil man über diesen "Umweg" viel schnellerer und leichterer ans Ziel kommt. Und wie gesagt: Nicht jedes Spiel braucht so viel Rechenpower, dass es umbedingt in C++ geschrieben sein muss. Von daher: Lerne z.B. erstmal Lua und danach kannst du erstmal weiterschauen. Gibt ja wirklich sehr viele brauchbare Sprachen da draußen.
Oder muss man davür Informatic Studieren
Nein. Programmieren sollte man sich meiner EInschätzung nach idealerweise selber beibringen. Aber falls man Fragen hat, kann man natürlich immer andere Leute ansprechen. -
wow,
das wahr fiel -.-'
mit das hier alles nicht zu lange wir antworte ich nur auf die letste antwort.
Nein. Programmieren sollte man sich meiner EInschätzung nach idealerweise selber beibringen. Aber falls man Fragen hat, kann man natürlich immer andere Leute ansprechen.
Ja, ich glaube das ich genug Ansprechpartner habe ;)
So,
ich glaube ich habe jetzt ziemlich fiel Verstanden . . .
danke, ich werde mir mal ein paar PC Sprachen angucken
MFG -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage