Suche OpenSource Pong (DirectX und C++)



  • Guten Abend,

    Ich , als blutiger Grafik/Spieleprogrammieranfänger, bin auf der Suche nach einem schönen einfachen Pong-Clone.

    Trivia:
    Ich arbeite zur Zeit das Tutorial www.directxtutorial.com durch , nebenbei ein Tutorial ganz nach meinem Geschmack und Programmierstil, leider ist die Lektion über SPieleprogrammierung nur für Premiummember, nachdem ich die Lektion über "Simple Modeling" durchgearbeitet hatte entschied ich mich dazu, das bisher gelernte mal umzusetzen und sich an ein eigenes kleines Spiel zu wagen.Mein Wissen in diesem Bereich ist bescheiden und dementsprechend hab ich auch so gearbeitet (Ich bin eher Realist, also kein Crysis-Klon sondern ein Ramm-das-Rechteck-Multiplayer-Spiel 🙂 ) : Bewegungen habe ich über Translate-Matrixen realisiert (geht das überhaupt anders?) und die Kollisionsabfrage hab ich im Prinzip so durchgeführt:

    if (x+2.0f==38.0f)//x = X-Koordinate des beweglichen Rechtecks
    {                      // 38= Spielfeldrand
      x=36.0f              // So kann  der Spielfeldrand nicht überschritten werden
    
    }
    

    Funktioniert nur bei Geraden, wie kann ich solche abfragen aber ein bisschen schöner machen?-Stichworte reichen, Links erfreuen

    Vielen Dank



  • Lektion über SPieleprogrammierung nur für Premiummember

    Wenn Du schnell an einem Pong optimieren/lernen willst, gäbe es hier eine Möglichkeit:
    Du machst einen Sprung nach vorne und setzt direkt auf einer Grafik Engine auf:
    z.B. irrlicht (http://www.henkessoft.de/Spieleprogrammierung/SpieleprogrammierungIrrlicht.html)
    Du verwendest diesen Sourcecode,d er noch viele Möglichkeiten der Optimierung und Ausgestaltung (Grafische Gesatltung, Sounds, AI, Netzwerk, ...) bietet:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-222054.html
    Dann hast Du Dein PONG in wenigen Stunden realisiert. Die Grundlagen von DirectX oder OpenGL kannst Du dann etwas stratgischer angehen, weil Dir die Detailarbeit abgenommen wurde. Mein Tipp. 😉


  • Mod

    es waere recht dumm als anfaenger der gerade erst spieleprogrammierung lernt gleich auch noch eine engine in angriff zu nehmen, sonst bist du tage damit beschaeftigt, gerade bei sowas wie irrlicht, ueberhaupt etwas hinzubekommen. 👎

    am besten nach einem simplen source per google suchen, dazu sollte jeder programmier-beginner faehig sein.
    http://www.google.com/search?q=pong++game+c+source



  • es waere recht dumm als anfaenger der gerade erst spieleprogrammierung lernt gleich auch noch eine engine in angriff zu nehmen

    @fischle: da würde mich mal deine Meinung interessieren, denn ich bin nicht sicher, ob rapso da wirklich Recht hat. Langfristig bringt die Engine den Erfolg, aber man hat das Risiko, dass man die falsche Engine verwendet und umsteigen muss. Mit DX oder OGL ist der Misserfolg beim Game Development IMHO zu 90% garantiert.


  • Mod

    bei leuten denen pong probleme bereitet sich in eine engine einzuarbeiten ist wie bussfahren fuer jemanden der ein mopetfuehrerschein machen will.

    klar ist man langfristig faehig viel mehr leute zu transportieren, aber welcher anfaenger wuerde das machen?

    engines sollte man verwenden wenn man einigermassen weiss was darunter passiert. dann ist irrlich, crystalspace, fly3d, horde, nirvana3d, ogre usw. usw. oder sogar richtige engines wie source, unreal oder cryengine das richtige. aber zum anfangen?



  • aber zum anfangen?

    Ich denke schon, dass das geht und von Vorteil ist. Dein Argument würde in gleicher Form für C++ und Assembler gelten. Natürlich ist es von Vorteil, wenn ich weiß, was "under the hood" vor sich geht. Das gilt für C++, MFC und irrlicht & Co. Ich rate jedem Anfänger, sich wirklich gut in C++ und OOP einzuarbeiten und eine Grafik-Engine zu verwenden. Das gleiche gilt für eine Sound Engine, einen XML Writer/Reader etc. Wer auf einem "Riesen" steht, ist "groß". Man kann natürlich auch versuchen, selbst ein Riese zu werden. Das hängt von den persönlichen Fähigkeiten ab. Ich schreibe mir keine eigene IDE, sondern verwende MSVC++ 2008. Ich schreibe mir keine eigene Grafik Engine, sondern verwende Irrlicht. ... 🙂


  • Mod

    Erhard Henkes schrieb:

    aber zum anfangen?

    Ich denke schon, dass das geht und von Vorteil ist. Dein Argument würde in gleicher Form für C++ und Assembler gelten. Natürlich ist es von Vorteil, wenn ich weiß, was "under the hood" vor sich geht. Das gilt für C++, MFC und irrlicht & Co. Ich rate jedem Anfänger, sich wirklich gut in C++ und OOP einzuarbeiten und eine Grafik-Engine zu verwenden. Das gleiche gilt für eine Sound Engine, einen XML Writer/Reader etc. Wer auf einem "Riesen" steht, ist "groß". Man kann natürlich auch versuchen, selbst ein Riese zu werden. Das hängt von den persönlichen Fähigkeiten ab. Ich schreibe mir keine eigene IDE, sondern verwende MSVC++ 2008. Ich schreibe mir keine eigene Grafik Engine, sondern verwende Irrlicht. ... 🙂

    ich wuerde jemandem der assembler lernt nicht raten ein betriebssystem zu programmieren, jemandem der c++ lernt nie raten ein spiel zu programmieren, entsprechend sehe ich dass irrlicht schlecht ist wenn man gerade erst direct3D lernt. klar kann man ein buch schreiben, um das abc zu lernen, natuerlich haengt dass von den persoenlichen faehigkeiten ab, aber didaktisch ist das bei 99.99...% der faelle schlecht.
    schau dir an wieviele leute auf der welt ein riese sind, dann weisst du wie schlecht es ist jedem vorzuschlagen von geburt/begin an das als ziel zu setzen.



  • Ja stimmt google sollte man schon kennen und benutzen _können_ denn die Suche nach "DirectX Pong Source" oder "DirectX C++ Pong Source Code", etc., welche ich verwendet habe, ist ein wenig zu unflexibel.

    Zuersteinmal wollte ich den Pong Source Code nur verwenden um mir die Kollisionsabfrage zwischen Ball und Paddel anzusehen, selbstverständlich habe ich auch die Möglichkeit nach Kollisionsabfragen direkt im Internet zu suchen, doch die Implementierung dieser kann , möglicherweise, ein wenig schwierig von der Hand gehen, besonders für Anfänger.Also entschied ich mich dazu lieber ein Beispiel zu suchen, an dem ich hautnah erleben kann, was wie genau abläuft.

    Ich persönlich bin eigentlich nicht von der Idee, auf eine Engine wie Irrlicht umzusteigen, wenn auch nur vorerst, überzeugt zumal man sich ersteinmal, wie rapso bereits erwähnte , in das "Neue" einarbeiten muss, und dies mag womöglich vergebens gewesen sein, denn das Einzige, was man daraus mitnimmt ist, meiner Meinung nach, das Wissen wie man schnell ein Spiel "machen" kann, doch dafür muss man sich sowieso ersteinmal mit den Grundlagen eines Spiels, wie Kollisionsabfragen, etc. vertraut machen, ob das jetzt im Rahmen einer Engine wie Irrlicht , oder direkt, mit mehr Zeitaufwand unter DirectX geschieht ist nur eine Frage von ein paar Codezeilen mehr oder weniger. Ich tendiere dazu, mich noch zwei, drei Jahre mit Direct3D zu beschäftigen, bevor ich ernsthaft daran denke mich explizit mit der Spieleprogrammierung auseinaderzusetzen, denn bis dato fehlt es mir dafür noch an Erfahrung.

    Letztendlich hängt es ja sowieso von der betroffenen Person ab, ich finde es eigentlich ganz spannend sich nach einzelnen Lektionen eines Tutorials mal für zwei Tage hinzusetzen, das Tutorial ruhen zu lassen und ein bisschen mit dem gelernten rumzuexperimentieren, also langsam Wissen anzuhäufen, und auch perfekt zu verstehen.Doch gibt es mit Sicherheit auch Leute , welche auf den schnellen Erfolg aus sind, für die ist Irrlicht vielleicht ganz reizvoll, für mich aber wie gesagt nicht.



  • ich habe jetzt auch mit Grafikprogrammierung angefangen und ich muss Erhard Henkes recht geben. Zuerst habe ich ein DirectX Tutorial angefangen,aber schnell wieder aufgegeben (weil ich mir Irrlicht angesehen hab). Jetzt benutze ich die Irrlicht Engine und mache paar Tutorials von der Homepage und bald noch Erhard Henkes seins durch, und ich muss sagen, dass es mit der Irrlicht Engine viel besser und leichter geht für den Anfang. In kurzer Zeit hat man schon große Erfolge und der Code ist meiner Meinung nach viel übersichtlicher. Natürlich wäre es sinnvoll wenn man weiß, was darunter passiert, aber das kann ich ja dann nochmal nachschauen, wenn ich Irrlicht beherrsche.


  • Mod

    Fischle schrieb:

    if (x+2.0f==38.0f)//x = X-Koordinate des beweglichen Rechtecks
    {                      // 38= Spielfeldrand
      x=36.0f              // So kann  der Spielfeldrand nicht überschritten werden
    
    }
    

    ich glaube eines deiner probleme koennte darauf beruhen dass du mit float arbeitest, je nachdem wie du rechnest kann x fast 36.f sein, also bis auf 0.000001f, aber eben nicht genau 36.f, das liegt an floats und wie sie intern behandelt werden. wenn du also vergleiche machen willst, mach sie eher in der art

    x+2.f>=38.f
    

    oder

    fabsf(x+2.f-38.f)<FLT_EPSILON
    

    oder

    const int XInt = static_cast<int>(x+0.5f);//+0.5f weil float to int immer abrundet!
    if(x+2==38)
    

    zudem solltest du die graphik und logik getrennt betrachten. wenn dein pong erstmal laeuft, egal ob textmode oder directX, kannst du es sehr einfach mit einer engine wie nebula oder crystalspace vermurksen 😉
    aber erstmal grundlagen.



  • ..


Anmelden zum Antworten