Konsolen Spiel und Augenkrebs



  • Hallo, ich schreibe gerade das Beispiel aus dem FAQ beitrag Improves Konsole zu einem kleinen Spiel um. Zuerst mal clear ich den Bildschirm jedesmal wenn man sich bewegt, damit man eine Spielfigur hat und keinen ewig langen Strich der irgendwann den ganzen Bildschimr bedeckt! DAnn hatte ich das Problem das der Hintergrund dann auch jedesmal verschwindet. Also musste der Hintergrund jedesmal neu gezcihnet werden wenn man sich bewegt. Alledings Flackert das Bild nun extrem wenn man sich schnell bewegt. Kann ich das irgendwie verhindern? Z.b. dass das Bild schneller gezeichnet wird? Da bekommt man ja Augenkrebs ^^

    EDIT: Und noch ne frage, wenn ich einen Zeilenumbruch schreiben will (also wenn ich eine andere Map zeichnen will anstatt dieser ganzen ######) kommt so ein komisches Zeichen das aussieht wie eine Note. Muss ich jedesmal den Curser neu setzten wenn ich in die nächste Zeile springen will?

    mfg Frusciante²



  • Du könntest ja nur den Bereich neu zeichnen, in dem sich was geändert hat.

    Beispiel:
    H: Hintergrund S: Spielfigur

    Ausgangssituation:
    __1_2_3_4_5
    1: |H|H|H|H|H|
    2: |H|H**|S|**H|H|
    3: |H|H|H|H|H|

    Nach der Bewegung:

    __1_2_3_4_5
    1: |H|H|H|H|H|
    2: |H|H**|H|S|**H|
    3: |H|H|H|H|H|

    in diesem fall musst du nur die kästchen 3/2 und 4/2 neuzeichnen (dies gilt natürlich nur für den Fall, dass sich die Spielfigur nach rechts bewegt; für alle anderen Bewegungsrichtungen müsstest du dann andere NeuZeichnen-Funktionen verwenden/NeuZeichnen(Richtung)). Am Besten realisierbar wäre es z.B. über einen Z-Index. Du betrachtest also den Hintergrund und die Spielfigur als Objekte in verschiedenen Tiefen.

    Alternativ kannst du generell bei jeder Bewegung den umgebenden Raum in Entfernung "1 Einheit" der Spielfigur neuzeichnen lassen.

    Die 2te Frage versteh ich leider nicht 🙄

    Viele Edits, nur grafische Verbesserungen oO



  • Die zweite Frage ist auch erst mal nicht so wichtig. Man kann sie auch nur verstehen wenn man sich das Beispiel zu der Improved Console angeschaut hat.

    mfg Frusciante²



  • Den Bildschirm nicht jedesmal löschen - dauert elends lange. Am besten wie hier gezeigt immer nur die geänderten Felder neu zeichnen - ohne Gegner macht das lächerliche 2 Felder statt 80*25.

    Das Notenzeichnen ist ein misslunges Newline, einfach kein endl verwenden 🙂

    MfG SideWinder



  • wenn man schon undebingt den bildschirm immer wieder komplett aufbaut (kann ja auch sinn machen). dann nimmt man am besten 2 screens. während man dann einen screen bearbeitet zeigt man den anderen halt an. ein ständiger wechsel und halt kein flackern.



  • Der war gut, Konsolenprogramm mit Pageflip 😋

    Dann ja wohl lieber gleich DirectX statt für Grafik vergewaltigte Konsole 😉

    MfG SideWinder



  • Ich habe genau das selbe Problem.
    Die Lösungen von siranus sind genau so wie ich mir das vorgestellt hatte:)
    Nur mit welchen Befehlen realisiert man sowas ?
    Im moment besteht mein Level aus nem Array den ich mit cout ausgebe...



  • Textcursor setzen + Ausgabe sollte reichen, schau dir mal die Improved Console aus der FAQ an.

    MfG SideWinder



  • Ah mist ... hab schon erwartet das es irgendwie damit geht 🙂
    Mein Plan war es eigentlich einen einfaches leicht verständliches Programm zu schreiben 🙂
    Naja ich schau es mir trotzdem an auch wenns bei mir wieder stunden dauern wird bis ich da was zu stande krieg 😃



  • Also ich hab ja vorher nur jedesmal den ganzen Bildschirm neugezeichnet damit mein Spieler keinen Schweif hat ^^. Allerdings hab ich das jetzt viel besser gelöst. Nur "Sprites" werden jedesmal neu gezeichnet (damit mein ich alle sachen mit denen man Interagieren kann, z.b. eine Raute die man über den Bildschirm schieben kann) und damit mein Spieler keinen Schweif bekomm hab eich einen String angelegt in dem nur ein Leerzeichen steht.Dann setzte ich am anfang jedes Schleifendurchlaufes den Cursor auf die alten X und Y Koordinaten des Spielers und schreibe dort den String Leerzeichen hin, überschreibe den alten Spieler also. Hoffe das war so verständlich ^^
    Es fällt auch nicht so auf wenn nur einzellne Buchstaben etwas flackern!

    mfg Frusciante



  • Ist ja im Prinzip auch das was die Leutz davor meinten 🙂
    Hab das auch so... Nur bei mir ging diese merkwürdige improved Console nicht.
    Hab ne Funktion zum Cursor Setzten jetzt irgendwo anders im Netz gefunden ... funzt wunderbar 🙂



  • Die neue ist erst in der Testphase, was genau lief schief? *unbedingt wissen will*

    MfG SideWinder



  • Naja das hatte ich dir sogar per mail geschrieben 🙂
    Es fing schon damit an das im Header laut dev-cpp wohl irgendwas nicht stimmte ?(Oder ich einfach nur total dumm bin :D)

    2 C:\Dev-Cpp\P_Consolentest\console.cpp In file included from console.cpp

    55 C:\Dev-Cpp\P_Consolentest\console.h [Warning] class console::Console' only defines private constructors and has no friends C:\\Dev-Cpp\\P_Consolentest\\console.cpp In member functionvoid console::Console::setSize(long unsigned int, long unsigned int)':

    205 C:\Dev-Cpp\P_Consolentest\console.cpp `min' undeclared (first use this function)
    (Each undeclared identifier is reported only once for each function it appears in.)



  • lol kennt der dev-cpp kein min()?

    Nunja scheint nicht sonderlich standardkonform zu sein, schreib stattdessen noch sowas am Beginn in die Header-Datei:

    #define min(a,b) (a)<(b)?(a):(b)
    

    MfG SideWinder



  • Ich denke es liegt daran das ich ne Beta von Dev-Cpp hab ... denn wenn ich den Fehler in der header datei behoben hab fängt er an bei anderen Sachen rum zu meckern. Glaube der nächste Fehler ist nen Konstruktor Fehler ... aber egal 🙂


Log in to reply