Mein erstes Spiel



  • Hallo Programmierer,

    ich hab jetzt ein Spiel geschrieben, naja das ist zwar nur zu 10% fertig aber man kann schon was erkennen :). Das Spiel habe ich mit SFML erstellt, hab mir die Tuts von SFML druchgelesen und dan einfach losprogrammiert.

    Also, da es mein erstes Spiel (und SFML Code) ist wollte ich mal eure Meinung zu meinem Code hören, ob ich das richtig gemacht habe, denn Optisch sieht das Spiel ja gut aus :).

    Ich bearbeite zum Beispiel am Anfang der Schleife die Objekte und unten am Ende der Schleife gebe ich die aus, mit App.Draw(). Man könnte die ja auch oben ausgeben (App.Draw()). Ich gebe die aber unten wegen der Übersicht aus.

    Hier ist die Seite wo das fertige Spiel und der Quellcode ist: www.netdun.de

    (na hoffentlich interessiert es jemanden)



  • ich gehöre ja zu der Sorte, die sagen, weniger ist mehr. 😉
    Find das ganz lustig, besonders den Sound bei einem Treffer.
    Leider ist in dieser Version etwas für mich unabdingbares vergessen worden.

    Ne Highscore. Sonst verliert man schnell die Lust, weil man nicht weiß, was man überbieten muss. 😃 Mach unbedingt ne Highscore rein.

    Zum Code halt ich mich mal zurück. Bin grad auf Arbeit und hab grad nur kurz Zeit zum Spielen. *scherz* ... der Anfang ist scho gut.



  • ich verschiebe es mal ins Projekteforum (weil projekt vorstellungen eher dahin gehoeren).

    Waere nett wenn du auf deine website mal einen screenshot zeigen wuerdest und ein wenig was dazu schreibst. (natuerlich freuen wir uns auch ueber screenshots in unseren screenshotbereich 🙂



  • Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum Projekte verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hab jetzt ein Screenshot auf die Homepage gepackt.

    Das Spiel ist aber noch nicht fertig. Deswegen sieht das so leer aus und ohne Heightscore und so.



  • Fakt ist wohl, dass du mit deinem Projekt weitergekommen bist als die Mehrheit der Leute, die ihr eigenes MMORPG programmieren wollten.
    Und gerade als Anfänger ist ein solch kleines Projekt schon eine große Leistung - darauf kann und darf man auch stolz sein.

    Der Code ist natürlich nicht sooooo toll, aber du lernst ja noch. Als Beispiel sei mal folgender durchaus amüsanter Codeteil genannt:

    int zufallsZahl(int von, int bis){
    	int zufall;
    	do{
    		int z = rand();
    		float z2 = z / 10;
    		zufall = static_cast <int> (z2);
    	}while(zufall < von || zufall > bis);
    	return zufall;
    }
    

    Auch OOP ist nicht an allen Stellen verwendet worden, wo es sinnvoll gewesen wäre und die Trennung von Deklaration und Definition ist nicht so gelungen. In dem Zusammenhang ist mir auch aufgefallen, dass du gar keine Include-Guards verwendest.

    Trotzdem ist das Projelt alles in allem für einen Anfang natürlich gelungen und ausbaufähig 🙂



  • Finde das Spiel auch ganz cool, vor allem sehr gute Leistung für einen Anfänger( bin quasi selber noch einer:D ).

    Respekt 👍

    Aber der Codeteil da oben ist echt geil 😃 😉

    Bleib dran und verbessere es immer weiter, so lernst du viel.

    Aber was mir grad aufgefallen ist, lässt man das Schiff auf einer Position, kommen auf dieser Höhe gar keine Gegner;-)

    Gruß freeG



  • std::rand()%(bis-von+1)+von
    

    müsste tun, was Du willst. Und zwar erheblich performanter.
    (% ist der Modulo-Operator. Liefert den Rest einer Integer-Division.)

    Und am Anfang deines Codes (und zwar nur einmal pro Thread) solltest Du das hier tun (erste Zeile in main()):

    std::srand(std::time(NULL));
    

    Sorgt dafür, das die Zufallszahlen bei jedem Programmstart anders sind, indem der Seed/Startwert der Berechnungen in std::rand auf die aktuelle Zeit gesetzt wird, die ja jedes Mal anders ist.

    Dein Spiel ist aber gut, wenn auch z.T. echt schwer, mehr als 3-4 Levels zu überstehen. 🙂

    EDIT: Anderer Zufallszahl-Tipp: Da Du ja eh SFML nimmst, kannst Du auch sf::Randomizer nehmen... (http://www.sfml-dev.org/documentation/1.6/classsf_1_1Randomizer.htm)



  • Danke für eure Antworten 🙂 .

    Die Funktion von oben zufallsZahl(): Ich wollte nur ein Funktion die Zahlen "von" "bis" erstellt, die habe ich einfach irgendwie geschrieben und die sollte nur "funktionieren" (mehr nicht), immerhin hatte ich andere Problemme als Zufallszahlen 😃 . Aber trotzden danke für die letzte Antwort wie man mit rand() zahlen von und bis erstellen kann.

    Zum Spiel: Das Spiel ist nicht fertig also versucht es garnicht irgendwelche Level zu erwähnen ;). Mein Ziel war es einfach etwas zu programmieren das für 5 - 10 Sek. nach einem Spiel aussieht mehr nicht. Den Sound und Explosion habe ich in letzter Minute reingeschrieben damit es besser aussieht :). Später werde ich das Spiel im Vollbildmodus starten lassen, auch besseren Sound verwenden und die Schwierigkeit anpassen.

    Zur zeit frage ich mich wie ich das Menü reinbauen kann (das ich noch nicht habe). Am anfang des Spiels soll das Menü kommen (Spiel starten, Option, ..., Beenden), dann das Spiel (wenn man auf Spiel starten klickt) und wenn man "im Spiel" auf Esc drückt soll auch das Menü kommen.
    Ich dahte mir das ich die Menü-Schleife in eine Funktion schreibe und die dann vor und in der Spiele-Schleife reinbaue. Und wenn ich das Menu in eine Funktion habe, dann kann ich ja auch die Spiele-Schleife auch in eine Funktion reinbauen damit die main() nicht so voll ist, oder?

    Und die Zweite Frage. Ich erstelle ja auf der rechten Seite Geger und positioniere sie rein zufähllig. Das Problemm ist wenn 20 Gegner erzeugt werden müssen (ich glaub da passen mehr) aber 19 reinpassen (wegen Zufallspositionen), dann läuft die Schleife ja ewig. Wie soll ich das regeln? Wenn kein Platz da ist 10 mal die Schleife durchlaufen lassen und weiter?
    In der letzten Version des Spiels habe ich erstmal alle Positionen genau ausgerechnet und in eine Array gespeichert und dann "zufällig" die Positionen vom Array ausgewählt.



  • Du kannst eine Statusvariable deklarieren. Wenn es nur Menü und Spiel gibt, reicht ein Bool, da aber die Highscore vlt. einen eigenen Status bekommt, wär ein enum besser:

    enum STATUS {MENU, SPIEL, HIGHSCORE};
    STATUS Status = MENU; // Speichert den Status, Anfangswert: MENU
    

    in deiner Render-Funktion kannst Du dann, jenachdem welchen Wert Status hat, unterschiedliche Sachen zeichnen und unterschiedlich auf Input reagieren.


Anmelden zum Antworten