Tetris ist für den Anfang komplexer als das klassische "Pong". Daher sollte man mit einem "Pong" beginnen und dort das Auflegen von texturen, die Einbindung einer AI, das Optimieren des Codes bezüglich Performance, das Umwandeln in echte OOP (Klasse Ball, Bar, Game, ...) usw. üben. Pong ist hierfür ein Idealfall.
Hier ein Beispiel für den Code mit "irrlicht" (Grafik Engine), den man als Ausgangspunkt für diese Übungen verwenden könnte:
// Pong.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
Von mir optimiert auf Basis:
http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=30191
#include "stdafx.h"
#include <irrlicht.h>
#include <iostream>
// irrlicht namespace using namespace irr; using namespace core; using namespace scene;
using namespace video; using namespace io; using namespace gui;
#pragma comment(lib, "Irrlicht.lib")
// Pong.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
Von mir optimiert auf Basis:
http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=30191
#include "stdafx.h"
#include <irrlicht.h>
#include <iostream>
// irrlicht namespace using namespace irr; using namespace core; using namespace scene;
using namespace video; using namespace io; using namespace gui;
#pragma comment(lib, "Irrlicht.lib")
// Pong.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
Von mir optimiert auf Basis:
http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=30191
#include "stdafx.h"
#include <irrlicht.h>
#include <iostream>
// irrlicht namespace using namespace irr; using namespace core; using namespace scene;
using namespace video; using namespace io; using namespace gui;
#pragma comment(lib, "Irrlicht.lib")
@Erhard Henkes:
Ich weiss nicht wieso du auf die Idee kommst man sollte Tetris als Anfängerspiel in 3D programmieren?!?
In 2D ist Tetris relativ einfach hinzubekommen.
Klar ist Pong noch einfacher, ob nun in 2D oder 3D, bloss ... Pong alleine spielen macht genau garkeinen Spass (mit oder ohne Computer-Gegner, ganz egal).
Deswegen: Tetris ist IMO immer noch besser geeignet als Pong. Allerdings eben nicht notwändigerweise mit einer 3D Engine.
@Erhard Henkes:
Ich weiss nicht wieso du auf die Idee kommst man sollte Tetris als Anfängerspiel in 3D programmieren?!?
In 2D ist Tetris relativ einfach hinzubekommen.
Klar ist Pong noch einfacher, ob nun in 2D oder 3D, bloss ... Pong alleine spielen macht genau garkeinen Spass (mit oder ohne Computer-Gegner, ganz egal).
Deswegen: Tetris ist IMO immer noch besser geeignet als Pong. Allerdings eben nicht notwändigerweise mit einer 3D Engine.
Ich denke es ging ihm eher um den Lernfaktor beim Programmieren.
Ich denke es ging ihm eher um den Lernfaktor beim Programmieren.
Ja, mir geht es momentan nur um die Didaktik, denn viele Einstieger haben massive Probleme mit der Spieleprogrammierung, obwohl sie dort gerne mitmischen würden.
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Gerade dann verstehe ich nicht wie man auf die Idee kommt mit einer full-blown 3D Engine ala Irrlicht anfangen zu wollen?!?
genau das frage ich mich auch, didaktisch echt zweifelhaft IMO. jemand der gerade lernt wie man ein winziges spiel macht soll gleich ne riesen engine nutzen.
ich denke die beispiele sind eher um fuer leute denen pong/tetris an sich 08/15 ist, zu zeigen wie man anhand dieser beispiele mit der engine umgeht. nicht andersrum.
_________________ Kilo Byte=1000,Kilobyte=1024 ANSI/IEEE Standard 1084-1986 rapso
-Mod im Spiele-/Grafikprogrammierung|rapsoo@hotmail.com| #dionysos irc.quakenet.org |amazon stole my PS3
Ich denke er will eher zeigen wie man sowa smacht wenn man ne Engine nimmt, nicht jedem liegt es ja selbst ne Engine zu bauen, wobei ich für so einfache Sachen lieber ne recht simple Engine bauen würde als ne fertige zu benutzen weil es einem sehr viel Grundlagen wissen beibringt.
zu zeigen wie man anhand dieser beispiele mit der engine umgeht
Genau, ich halte es für richtig, sofort mit einer Engine zu beginnen, und um den Leuten zu zeigen, dass es mehr gibt als Ego-Shooter, Terrains, FPS-Cameras und Quake-Maps zeige ich diese Beispiele. Man steht auf einem Riesen und experimentiert an einem kleinen Modell. Das vermittelt Sicherheit durch Einfachheit und man lernt den Rahmenaufbau des neuen Werkzeuges dabei spielerisch kennen. So stelle ich mir den Beginn der Lernkurve vor.
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Warum favorisiere ich den Start mit einer Engine so überzeugt? Es sind eigene Erfahrungen und posts wie diese:
Zitat:
In irrlicht everything is simple. Just only a few lines code, you can create everything in 3D space. Along time ago, I have ideal about a simple game 3D. At that time, I didn't have irrlicht engine, I just only use DirectX SDK. As you see, DirectX SDK really complicated. I was painful with it because it has many complicated functions with much formulary mathematics. I think if you aren’t good at mathematics, you can not use DirectX SDK professionally. I had spent for three months but my game hadn't finish yet. And now with irrlicht, I was easily finish it. The irrlicht engine has only one weakness that is speed. If your 3D application has many 3D objects then the speed of frame per second is very slow. So I think the irrlicht doesn't correspond for commercial games or tactical RST games. But if you are amateur programmer then irrlicht is the best engine for you. I really like irrlicht very much. This is my first 3D game. It's name "Dragon killer", this is very simple game. This is the link to download this game: http://www.mediafire.com/?dgedptm9z43
Have fun!
Die mathematischen Anforderungen und die nutzlose Komplexität, die durch das DirectX SDK oder OpenGL verursacht werden, kann man sich einfach schenken, indem man eine Ebene höher programmiert. Das Argument bezüglich Performance kann ich noch nicht ausreichend beurteilen, ist mir aber auch schon aufgefallen bei irrlicht. Es gibt ja auch noch OGRE.
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
@Erhard: nur falls du das falsch verstanden haben solltest: ich würde als Alternative zu einer vollständigen 3D-Engine nicht DirectX oder OpenGL "direkt" vorschlagen, sondern eine einfachere 2D-Engine.
p.S.: dem was du über den schwierigen Einstieg mit Direct3D/OpenGL sagst kann ich grundsätzlich zustimmen.
Danke für die Klarstellung. Welche 2D-Engine würdest Du denn empfehlen? Wird ein PONG oder TETRIS Clone dann wirklich einfacher? Wesentliche Anteile des Codes beschäftigen sich doch eher mit der Ablaufsteuerung und nicht mit der Grafik.
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Ich wollte auch ein paar Anfänger etwas beibringen und hab nach der einfachsten 2D-Engine gesucht. Doch leider hab ich da nichts gefunden und hab deswegen meine eigene begonnen. Hoffe ist in Ordnung wenn ich hier etwas Werbung für mache. http://watteimdocht.de/jngl
Den Code vereinfachen tut es in der Hinsicht, dass man Zeiger nicht erklären muss und dass es auch ohne OOP funktioniert für den Anfang. Da man diese Sachen ja sowieso irgendwann erklären muss, ist es eigentlich dann doch egal.
Pong ist echt gut zum anfangen, wobei ich auch noch einfache Moorhuhn-Clones gut finde.
Danke für die Klarstellung. Welche 2D-Engine würdest Du denn empfehlen? Wird ein PONG oder TETRIS Clone dann wirklich einfacher? Wesentliche Anteile des Codes beschäftigen sich doch eher mit der Ablaufsteuerung und nicht mit der Grafik.
Sobald man die Engine im Griff hat, ist der Unterschied natürlich marginal. Aber die hat man natürlich zu Beginn (vor allem als Anfänger) nicht richtig im Griff. Auch wenn du versuchst es noch so simpel zu schreiben werden bei Anfängern zu oft Fragen entstehen die eigentlich an dieser Stelle noch gar nicht nötig wären.
2D-"Engines" ( ' " ' deshalb, weil man dabei standardmäßig auf SDL/Allegro zurückgreift, welche keine Engines sind. ) sind einfach unkomplizierter.
Zu Beginn würde ich jedem Anfänger nun zu SFML raten.
Ist übrigens noch jemand der Meinung, dass sich Tutorials und Bücher nicht genug um programmstrukturelle Dinge kümmern (Object/Resource-Management, effiziente und elegante Spielzustandsverwaltung etc.)? Soweit ich das bisher gesehen habe gehts immer wieder nur um Grafikausgabe / Kollisionsabfrage und Tastatur- oder Mauseingabe.
Zuletzt bearbeitet von TravisG am 13:16:48 14.09.2008, insgesamt 4-mal bearbeitet
Ist übrigens noch jemand der Meinung, dass sich Tutorials und Bücher nicht genug um programmstrukturelle Dinge kümmern (Object/Resource-Management, effiziente und elegante Spielzustandsverwaltung etc.)?
Du sprichst mir aus dem Herzen! Unabhängig von der Art der Grafikausgabe (ob 2D oder 3D, ob DirectX, OpenGL oder kapselnde Engine) ist dies wohl ein ziemlich entscheidender Punkt für das Gelingen eines komplexen Spielablaufs. Erweiterbarkeit und Pflege hängen entscheidend vom inneren Design des Games ab.
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Zuletzt bearbeitet von Erhard Henkes am 15:43:59 14.09.2008, insgesamt 1-mal bearbeitet
Zu Beginn würde ich jedem Anfänger nun zu SFML raten.
Dito. Imho für Anfänger sehr gut geeignet.
TravisG schrieb:
Ist übrigens noch jemand der Meinung, dass sich Tutorials und Bücher nicht genug um programmstrukturelle Dinge kümmern (Object/Resource-Management, effiziente und elegante Spielzustandsverwaltung etc.)?
Nochmal dito. Hab sowas bisher auch noch nicht gefunden.
Gibt es da Empfehlungen, was Bücher oder sonstige Ressourcen angeht, die genau diese Dinge zum Thema haben?
Danke für die Klarstellung. Welche 2D-Engine würdest Du denn empfehlen? Wird ein PONG oder TETRIS Clone dann wirklich einfacher? Wesentliche Anteile des Codes beschäftigen sich doch eher mit der Ablaufsteuerung und nicht mit der Grafik.
Für ganz einfache Sachen ist denke ich sowohl die SDL als auch Allegro oder die SFML geeignet.
Und für einfacher halte ich 2D Sachen deswegen weil man sich erstmal nicht mit Dingen wie Matrizen, Texturen, Vertices, Normalen, Shadern etc. auseinandersetzen muss.
Mit einer 2D Engine (mit oder ohne " ) kann ich einfach sagen "LoadImage(file)" und "PutImage(was, wohin)".
In den Game Programming Gems findet man z.T. solche Artikel über allgemeine Spielgestaltung, allerdings ziemlich kompliziert geschrieben, z.T. "A System for Managing Game Entities", Vol. 4, S.67.
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Zuletzt bearbeitet von Erhard Henkes am 20:14:49 15.09.2008, insgesamt 2-mal bearbeitet
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.