Spiele programmieren mit C#



  • till_hm schrieb:

    Ich würde nicht empfehlen mit C# größere Spiele zu programmieren, weil die Sprache wesentlich langsamer als C++ ist. Wenn du aber nur ein kleines Spiel programmieren möchtest, dass nicht viele Ressourcen und Rechenleistung benötigt, ist C# sicherlich eine gute Lösung.

    Totaler Quatsch. Ich schreibe gerade meine Diplomarbeit über Managed DirectX und kann die Meinung zahlreicher Profis bestätigen: MDX in Kombination mit C# eignet sich definitiv auch für größere Spiele. So habe ich z.B. eine MDX Testanwendung, die von 3 Meshes in Echtzeit die Schatten (mit Stencil Volume Shadows) von 4 Lichtquellen berechnet und immernoch gut 200 fps aufweist. Meine vergleichbare native DX Version kommt auf 211 fps.
    IMO ist C# nur für Spiele mit absoluten Highend Cutting-Edge Grafiken vom Niveau a la HL2, FEAR oder Stalker ungeeignet.
    Dass sogar erste kommerzielle Titel mit C# entwickelt wurden, bestätigt nur die Tauglichkeit von C# (und MDX) zur Entwicklung "großer" Spiele.



  • aber wehe der GC möchte mal ein wenig arbeiten.



  • AndreasW schrieb:

    aber wehe der GC möchte mal ein wenig arbeiten.

    Ob ein GC viel oder wenig arbeiten muss, hängt stark von deinem Können/Erfahrung als Programmierer ab. Wenn deine Speicherverbrauch explodiert und und dein Rechner deswegen ständig einfriert weil der GC mal wieder Schwerstarbeit leisten muss, dann hast du irgendwas falsch gemacht.



  • egberg schrieb:

    Ob ein GC viel oder wenig arbeiten muss, hängt stark von deinem Können/Erfahrung als Programmierer ab. Wenn deine Speicherverbrauch explodiert und und dein Rechner deswegen ständig einfriert weil der GC mal wieder Schwerstarbeit leisten muss, dann hast du irgendwas falsch gemacht.

    Du hast natürlich recht, aber ich finde es ein bißchen pikant, daß man Deine Argumentation vor einiger Zeit bei C++ benutzte um zu begründen, warum man keinen GC braucht. Denn jemand der einen GC braucht, hat seine Speicherverwaltung nicht im Griff (laut C++). Jetzt sagen wir, bei wem der GC arbeitet, der hat seine Speicherverwaltung nicht im Griff.

    😉



  • [Ironie]Stimmt, in C++ kostet die Speicherverwaltung ja keine Rechenzeit[/Ironie]

    Das Allokieren von Speicher ist in .NET sehr viel schneller als in C++, da der Heap wie ein Stack aufgebaut ist, es muss keine Liste auf der Suche nach freien Blöcken durchsucht werden usw. Und der GC ist ziemlich schnell.

    Schaut euch doch die Beispiele im DirectX SDK an und überzeugt euch selbst.

    Zu empfehlen wäre noch das Buch 'Warum ausgerechnet .NET?' von Heinrich Rottmann. Im Kapitel Performance schreibt er: 'Wenn man ein Argument gegen .NET sucht so kommt die Performance sicher nicht in Frage'



  • hey leude,
    hab ein rießen problem und zwar muss ich für d schule in C# ein programm schreiben!
    kann ein spiel sein, rechenprogramm, is egal,
    müssen nur folgende anforderungen erfüllt werden:

    - muss eine konsolenanwendung sein
    - mindestens 2 if-anweisungen
    - mindestens eine fußgesteuerte schleiße
    - mindestens ein unterprogramm oohne parameter
    - mindestens ein unterprogramm mit parameter
    - mindestens eine funktion
    - mindestens eine globale varialble
    - mindestens ein array

    ihr seit meine letzte rettung!
    schon mal danke...

    gruß jakob



  • Dann mal los.



  • Wenn du Probleme bei bestimmten Sachen hast kannst du gerne fragen, aber deine Hausaufgaben werden wir mit Sicherheit nicht machen!



  • interpreter schrieb:

    Dass sogar erste kommerzielle Titel mit C# entwickelt wurden, bestätigt nur die Tauglichkeit von C# (und MDX) zur Entwicklung "großer" Spiele.

    Interessant. Kannst du ein paar Beispiele nennen?



  • _matze schrieb:

    interpreter schrieb:

    Dass sogar erste kommerzielle Titel mit C# entwickelt wurden, bestätigt nur die Tauglichkeit von C# (und MDX) zur Entwicklung "großer" Spiele.

    Interessant. Kannst du ein paar Beispiele nennen?

    Arena Wars.
    Da hört's aber auch schon auf.



  • hab jetzt mal angefangen ein spiel zu schreiben und hab ein spielfeld entworfen, mit einem laufenden O!
    mein problem is nur, dass ich mauern eingezogen hab, durch die da O laufen kann!
    was kann ich dagegen tun???...

    mein programm:

    using System;

    class Program
    {
    static void Main(string[] args)
    {

    int[,] Tilemap =
    {
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, // Dies ist unser "Spielfeld"
    { 1, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 2, 0, 0, 1 }, // 1 = Mauer, 0 = Nichts/Weg
    { 1, 0, 2, 0, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 0, 2, 0, 2, 2, 0, 2, 0, 2, 2, 0, 2, 0, 0, 1 },
    { 1, 0, 2, 2, 2, 0, 2, 2, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 1 },
    { 1, 0, 0, 0, 2, 0, 0, 0, 0, 2, 2, 0, 2, 0, 0, 2, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1 },
    { 1, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1 },
    { 1, 2, 0, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 1 },
    { 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 1 },
    { 1, 0, 2, 2, 2, 2, 2, 0, 0, 0, 2, 0, 0, 2, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1 },
    { 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 2, 2, 2, 2, 0, 1 },
    { 1, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 0, 2, 2, 2, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 2, 2, 0, 2, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 2, 2, 2, 0, 0, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, 2, 0, 0, 2, 0, 2, 0, 0, 1 },
    { 1, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 2, 2, 2, 2, 0, 0, 0, 2, 1 },
    { 1, 2, 2, 0, 0, 2, 0, 0, 2, 2, 0, 2, 0, 0, 2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    };
    for (int Y = 0; Y < 21; Y++) // Äußere for-Schleife (Y)
    {
    for (int X = 0; X < 31; X++) // Innere for-Schleife (X)
    {
    if (Tilemap[Y, X] == 0) // auf 0 überprüfen
    {
    Console.SetCursorPosition(X, Y);
    Console.Write(" "); // wenn ja, zeichne " "
    }
    if (Tilemap[Y, X] == 1) // auf 1 überprüfen
    {
    Console.SetCursorPosition(X, Y);
    Console.Write("#"); // wenn ja, zeichne "#"
    }

    if (Tilemap[Y, X] == 2) // auf 1 überprüfen
    {
    Console.SetCursorPosition(X, Y);
    Console.Write("x"); // wenn ja, zeichne "#"
    }
    }
    }
    Console.ReadKey(true);



  • Na du fragst einfach ab, ob die Zielposition, die deine Spielfigur mit dem nächsten Schritt einnehmen würde, eine 1 (Mauer) ist (wobei mir jetzt nicht klar ist, was denn die 2 bedeutet). Wenn es eine 1 ist, machst du nix, ist es eine 0, dann verschiebst du die Spielfigur eben dahin. Eine simple Kollisionsabfrage also. Die ganze Bewegungssache fehlt bei dir aber noch völlig. Im Moment zeichnest du nur das Spielfeld.



  • - muss eine konsolenanwendung sein
    - mindestens 2 if-anweisungen
    - mindestens eine fußgesteuerte schleiße
    - mindestens ein unterprogramm oohne parameter
    - mindestens ein unterprogramm mit parameter
    - mindestens eine funktion
    - mindestens eine globale varialble
    - mindestens ein array

    Irgendwie hört sich das nach Quatsch an. Unterprogramme können durchaus auch funktionen sein. Und Funktionen gibt es an sich in C# nicht. Dort gibt es nur Methoden.

    Globale Variablen gibt es in C# ebenfalls nicht. (Die kann man aber mit statischen Membern in statischen Klassen nachbasteln.)

    Sicher das es C# sein soll ?



  • Stichwort:
    Microsoft XNA



  • interpreter schrieb:

    [...] Dass sogar erste kommerzielle Titel mit C# entwickelt wurden, bestätigt nur die Tauglichkeit von C# (und MDX) zur Entwicklung "großer" Spiele.

    nur mal so aus neugierde: welche sind das denn? kenne da nicht ein einziges.

    btw. die grafikqualität der spiele, die du genannt hast, ist doch heutzutage teilweise schon standard 😉

    aber es stimmt schon - da der größte teil der grafik eh auf der grafikhardware läuft ist c# sicher schnell genug, auch für größere spiele. ich verwende selbst MDX und XNA für 3D lösungen und muss sagen, dass ich da noch nie performanceprobleme festgestellt habe. ich schätze man muss schon wirklich weit gehen um an den punkt zu gelangen, wo c++ besser geeignet ist, wobei man c++ auch gut draufhaben muss um damit deutlich performanter zu coden als mit c#.

    im endeffekt ist, wie immer, die wahl der sprache größtenteils geschmackssache und zum rest problemabhängig.

    kennt ihr eve-online? das ist ein SciFi-MMO (also kein kleines spiel), das in python gecoded wurde... läuft anscheinend auch...



  • gameengines:
    irrlicht
    exoengine
    xna
    siehe auch:
    http://www.devmaster.net/engines/list.php?fid=6&sid=2
    http://www.thezbuffer.com/categories/engines.aspx

    kommerzielle spiele:
    Neverwinter Nights 2

    irgendwo gibt es eine seite, wo die programmiersprachen der kommerziellen spiele aufgelistet sind... (ich kann sie gerade nciht finden) dort waren ein paar dabei, die c# verwendeten... außerdem .. schaut euch doch einfach mal die stellenausschreibungen bekannter spielehersteller an... nicht gerade wenige suchen mittlerweile leute, die sich mit c# und .net auskennen.



  • eine frage
    wo xna schonmal genannt wurde wollte ich gleich fragen, weil ich seit kurzem damit programmiere, wie sehr sich das denn überhaupt zum spiele proggen eignet oder sollte ich da vielleicht auf etwas anderes umsteigen? 😕



  • Zu diesem Thema gibt es in der aktuellen Ausgabe des Magazins 'Making Games' einen interessanten Artikel.

    www.makinggames.de

    Wer die aktuelle Ausgabe der GameStar hat kann sich die "M.G." auch kostenlos zuschicken lassen. Da ist son Shopping-Code drin.



  • jule37 schrieb:

    kennt ihr eve-online? das ist ein SciFi-MMO (also kein kleines spiel), das in python gecoded wurde... läuft anscheinend auch...

    stackless python um genau zu sein!

    SchnitzelPope schrieb:

    Zu diesem Thema gibt es in der aktuellen Ausgabe des Magazins 'Making Games' einen interessanten Artikel.

    www.makinggames.de

    Wer die aktuelle Ausgabe der GameStar hat kann sich die "M.G." auch kostenlos zuschicken lassen. Da ist son Shopping-Code drin.

    Ist dieses Magazin gut? Gibts da pdfs in die man sich mal rein lesen kann?



  • Keine Ahnung ob es bei RapidShare oder so ne PDF gibt. Ich habs mir halt über den Code von GameStar bestellt und würde sagen, dass es OK ist.

    Regulär kostet die Zeitschrift 6,90€ was ich persönlich für zu teuer halte, da man die meisten der Berichte in ähnlicher Form auch im Netz für lau finden würde.

    Kurz zum Bericht über C#:

    Hier wird gesagt und mit Benchmarks mehr oder weniger Bewiesen, dass C# so viel langsamer als C++ gar nicht ist.
    Die Einbußen belaufen sich auf ca.5% was aber auch damit zu erklären ist, dass die Engine mit der der Benchmark läuft (Ogre3D bzw. MOrge) für C++ ist und in einer Zwischenschicht von C# erst noch gewrappt werden muss.


Anmelden zum Antworten