Steeplechase V0.2 (Konsolenspiel)



  • #UPDATE#

    So hab nun den Hightscore hinzugefügt. Hoffe es klappt alles soweit.

    Sollte es nicht funktionieren oder andere Fehler/Bugs auftreten bitte bescheid sagen.

    Download im ersten Thread.

    mfg Dimo

    PS.:Würd mich echt freuen wenn der ein oder andere was dazu schreibt.



  • Hallo

    Werde das Spiel versuchen sobald ich nach Hause komme :D.

    Gruss
    samyboy



  • Finds schade das niemand antwortet. Wenn es immer noch nicht funktioniert könnte man das mir ja sagen und evt. den Fehler nennen. Wenns einfach nicht gefällt, hab ich auch kein Problem damit wenn das gesagt wird. Will ja keinen riesen Erfolg damit haben oder so. Natürlich würde mich dann trotzdem interessieren warum es nicht gefällt.

    Dachte eigentlich immer die Leute hier im Forum sind nett, ehrlich und hilfsbereit. Aber das bei solchen Beiträge so gut wie keiner antwortet hab ich noch nicht erlebt.

    Enttäuscht aber mit freundlichen Grüßen
    Dimo



  • Ich hab das Spiel mal angetestet, aber irgendwie bin ich untalentiert - Ich überlebe nie lange...

    Anmerkungen zum Sourcecode:

    • #include <ctime> statt time.h
    • functions.h: Aus den Farben würd ich ein enum machen
    • functions.cpp, IntToStr: Hier würd ich einen ostringstream verwenden, da Du nur den <<-Operator brauchst.
    • Versuche bei Funktionsparametern const-Referenzen zu nehmen, wenn es sich um große Objekte handelt (Faustregel: Alle Klassenobjekte, die größer als ein Pointer sind). Das ist performanter (z.B. cPlayer.h: statt "bool collision(OBJECTS ob);" besser "bool collision(const OBJECTS& ob);")
    • Achte auf const-correctness: Memberfunktionen, die die Klasse nicht verändern, sollten als const gekennzeichnet werden. (z.B. cPlayer.h: statt "int get_distance();" besser "int get_distance() const;")
    • cPlayer.cpp, PLAYER:💥 statt "if(...) return(true); else return(false);" besser "return(...);" (kürzer)
    • Set-Funktionen (und ggf. eine dazugehörende Get-funktion) ist wenig sinnvoll, wenn sie einfach nur die Variable setzt oder zurückgibt, ohne irgendwelche Überprüfungen zu machen (z.B. cPlayer.h, set_way. Du könntest PLAYER::way auch einfach public machen
    • //--Zufallsfunktion--//: Solche Kommentare sind irgendwie gewöhnungsbedürftig... Bei // statt /* freut man sich doch grade, am Kommentarende kein */ schreiben zu müssen
    • Die Highscore (ohne t) könntest Du mit einem STL-Container (z.B. std::vector oder std::list) dynamischer machen. Dann könnte sie beliebig viele Einträge enthalten, aber unter Umständen auch weniger als 5 Einträge haben

    Die Liste ist zwar recht lang, aber finde ich deinen Sourcecode insgesamt jedoch ziemlich gut lesbar.

    Dachte eigentlich immer die Leute hier im Forum sind nett, ehrlich und hilfsbereit. Aber das bei solchen Beiträge so gut wie keiner antwortet hab ich noch nicht erlebt.

    Wir machen das alle freiwillig. Außerdem finde ich es etwas übertrieben, nur weil keine übertriebene Resonanz kam, gleich von Unfreundlichkeit zu sprechen, halte ich für übertrieben.



  • Mr X schrieb:

    Dachte eigentlich immer die Leute hier im Forum sind nett, ehrlich und hilfsbereit. Aber das bei solchen Beiträge so gut wie keiner antwortet hab ich noch nicht erlebt.

    Wir machen das alle freiwillig. Außerdem finde ich es etwas übertrieben, nur weil keine übertriebene Resonanz kam, gleich von Unfreundlichkeit zu sprechen, halte ich für übertrieben.

    Das war wahrscheinlich wirklich ein wenig übertrieben geb ich zu. Kam einfach aus der Enttäuschung raus das ich sehe wie viele es anschauen und auch runter laden, aber keiner irgendwie eine Rückmeldung gibt oder sich viele es gar nicht erst runter laden aufgrund das die erste Version nicht funktioniert hat (natürlich ist keiner gezwungen es herunter zu laden).

    Aber nun zu deinen Tipps. Erstmal vielen Dank! Werde natürlich versuchen möglichst viele davon umzusetzen.
    -Highscore hab ich absichtlich nur auf 5 Einträge begrenzt, wäre aber natürlich eine Überlegung diesen Bereich zu erweitern. (Die Rechtschreibung werde ich natürlich ändern und überall das t entfernen 😃 *peinlich*)
    -Bei der Benutzung von get_ und set_ Funktionen habe ich mal irgendwo gelesen (weis nicht mehr wo) das man Variablen privat machen soll und ihre werte so zuordnen. aufgrund deiner aussage Tipp ich mal drauf das das keinen unterschied macht.
    Wie gesagt werde ich auch versuchen die anderen umzusetzen. Nochmals vielen Dank das du es getestet hast und dir auch den Quellcode angeschaut hast.

    mfg Dimo



  • -Bei der Benutzung von get_ und set_ Funktionen habe ich mal irgendwo gelesen (weis nicht mehr wo) das man Variablen privat machen soll und ihre werte so zuordnen.

    Es gibt Leute, die meinen, man solle alle Membervariablen private/protected machen. Das führt bestenfalls zu mehr Codeschreibarbeit, schlimmstenfalls zu geringerer Performance (Je nach Optimierung des Compilers). Begründung für die Set-Funktionen ist, dass man die Möglichkeit hat, zu überprüfen, dass der neue Wert zulässig ist. Das tust Du aber nicht und in vielen Fällen ist das auch nicht nötig. Wenn in der Set-Funktion nur steht: void Set(X x) {m_x = x;}, dann kann man die Membervariable genausogut public machen. Zudem hat man dann den Vorteil, statt dem Wert auch eine Referenz/Pointer auf diese Variable bekommen zu können.



  • Mr X schrieb:

    -Bei der Benutzung von get_ und set_ Funktionen habe ich mal irgendwo gelesen (weis nicht mehr wo) das man Variablen privat machen soll und ihre werte so zuordnen.

    Es gibt Leute, die meinen, man solle alle Membervariablen private/protected machen. Das führt bestenfalls zu mehr Codeschreibarbeit, schlimmstenfalls zu geringerer Performance (Je nach Optimierung des Compilers). Begründung für die Set-Funktionen ist, dass man die Möglichkeit hat, zu überprüfen, dass der neue Wert zulässig ist. Das tust Du aber nicht und in vielen Fällen ist das auch nicht nötig. Wenn in der Set-Funktion nur steht: void Set(X x) {m_x = x;}, dann kann man die Membervariable genausogut public machen. Zudem hat man dann den Vorteil, statt dem Wert auch eine Referenz/Pointer auf diese Variable bekommen zu können.

    Ok, vielen Dank. Dann werde ich das auf jeden Fall auch noch abändern.



  • Echt tolles Game 👍
    Hab aber den Code nicht angeschaut.

    Wieso ist das 'X' immer in Bewegung ? Ist das gewollt ?

    Highscore: 124 😞

    *Edit
    Highscore: 259 😃

    Gruss Sheldor



  • Sheldor schrieb:

    Echt tolles Game 👍

    Vielen Dank!

    Sheldor schrieb:

    Wieso ist das 'X' immer in Bewegung ? Ist das gewollt ?

    Ja das ist gewollt. Hat es am Anfang noch so das wenn man S drück die figur stehen bleibt. Jedoch wurde das Spiel dadurch viel zu einfach.



  • Nettes Spielchen! Hat mich erfolgreich vom Lernen abgehalten. Komme zwar nicht über 119 dafür sehe ich jetzt überall Nullen 😃



  • 🙂

    Ein paar kleinigkeiten:

    * Ab und zu geht das X durch eine 0
    * Immer am Anfang geht das X auf eine 0 zu die rechts daneben einen freiraum hat und links daneben noch 2 weitere nullen. Absicht?
    * Teilweise liegen die 0en so das man weder rechts noch links vorbei kann
    * Restart solltest du auf Leertaste legen und nicht auf 1. Das macht es kompfortabler
    * Die Konsole ruckt stark
    * Es ist nicht immer klar wo das X als nächstes sein wird. Also erst hoch, oder erst zur seite. ist beim manövrieren durch eine 0_0 wichtig. Wenn die Linien so auskommen?

    000000_000000
          X
    

    kommt man da einfach nicht druch, weil grade hoch nicht geht...

    EDIT: Online-Highscore könnte cool sein. Könntest ne PHP datei auf einem server hinterlegen und über die URL den Highscore ein und auslesen.
    Später lönnte man auf diese weise Benutzer usw realisieren. Also Highscore anhand von Benutzernamen.

    Auch cool wäre eine replay funktion. Dafür musst du ja eigentlich immer nur die neuste Zeile an eine txt-datei anhängen und in einer anderen datei parallel mitführen an welcher position das X war...
    -----EDIT2: Oder einfach durch ein ";" getrennt hinter die zeile hängen... Dann brauchst nur eine Datei

    Nur mal so als anregung, damit es nicht nur nach Kritik klingt 🙂



  • danke euch zwei für eure Tipps und Anregungen. Die O werden per Zufall gesetzt, somit hab ich das nicht in der Hand, wo sie gesetzt werden, eine spätere änderung wäre natürlich möglich.

    Mit dem gerade hoch ist wie gesagt dann zu einfach, jedoch könnt ich mir vorstellen eine Funktion einzubauen, so das wenn man S drückt die Figur einmal gerade läuft und dann wieder in die vorige Richtung.

    Online-hightscore hört sich toll an, weiß aber noch nicht ob ich das machen werde.

    eine Respawn Funktion werde ich auch noch einbauen.

    meinst du mit replay eine Pausen und speicherfunktion?

    Hab grade leider nicht so viel Zeit um daran weiter zuarbeiten, jedoch wenn ich wieder Zeit finde werd ich auf jedenfall versuchen möglichst viel umzusetzten.

    Gruß Dimo



  • Ich meine, du sagst replay speichern, und dann gibst dem nen namen. Dann kann man replay laden wählen und sieht es wie ein video noch einmal.

    a) Kann man sich selbst noch mal beobachten
    b) viel wichtiger. Man kann dir replays zukommen lassen, die du dann vllt mal für Fehleranalysen brauchen kannst.

    Es wäre glaube ich auch zueinfach wenn es überhaupt grade hoch könnte. Aber vllt kannst du verhindern das zwischen zwei 0 nur ein Leerzeichen ist.
    Oder du ermöglichst es die "Figur" schneller oder langsamer nach rechts und links zu bewegen, damit man die chance hat eine doppelte leerstelle zu erreichen.



  • Ahh, ok! das wäre natürlich nee überlegung. Aber dann eher wenn die anderen Dinge fertig sind.

    Ich könnte die Figur doppelt so schnell laufen lassen, müsste zwar schauen wie, sollte aber kein problem sein. Aber wie gesagt, werd ich nee Funktion einbauen, das mann für einen Schritt gerade laufen kann.


Anmelden zum Antworten