<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Problem mit &amp;quot;Spiel&amp;quot; in Console (getch() und system(&amp;quot;cls&amp;quot;))]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe mir für die Console Tetris programmiert. Das Spielfeld wird dabei von einem 10 x 20 char-array gebildet. Allerdings habe ich 2 Probleme:</p>
<p>1. Bei jedem &quot;Frame&quot;, also nach jeder Aktion im Spielfeld, wird die Console über system(&quot;cls&quot;) gecleart und das spielfeld neu ausgegeben. Allerdings bewirkt dies ein unschönes &quot;Flackern&quot;. Mir ist klar, dass system-Befehle vermieden werden sollten. Daher habe ich mir die clrsrn funktion selbst geschrieben</p>
<pre><code class="language-cpp">void clrscr() 
{ 
    COORD topLeft={0,0}; 
    CONSOLE_SCREEN_BUFFER_INFO csbi; 
    HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE); 
    GetConsoleScreenBufferInfo(hOut,&amp;csbi); 
    FillConsoleOutputCharacter(hOut,' ',csbi.dwSize.X * csbi.dwSize.Y, 
        topLeft,NULL); 
    SetConsoleCursorPosition(hOut,topLeft); 
}
</code></pre>
<p>Allerdings mit selbem Ergebnis. Jetzt weis ich nicht ob das Bildschirm clearen zu langsam ist oder das Ausgeben über cout. Hat jemand eine Idee, wie man das Spiel &quot;Flackerfrei&quot; darstellen kann? Die Lösung muss nicht Plattformunabhängig sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Ich habe auch gesehen, dass dieses Thema schon ein paar mal hier im Forum behandelt wurde, allerdings ohne Lösung (weil es keine gibt?)</p>
<p>Mein zweites Problem:<br />
Am Ende des Programms möchte ich gerne einen Highscore anzeigen lassen. Allerdings wird das Programm &quot;vorzeitig&quot; beendet. Zuerst dachte ich es liegt daran, dass der Eingabepuffer nicht richtig geleert wird. Doch dann habe ich folgendes Minimalbeispiel gemacht und gesehen, dass es an etwas anderem liegen muss.</p>
<pre><code class="language-cpp">int main()
{
    bool progende=true;
    for(;;)   //Endlosschleife; hier drin befindet sich das &quot;Spiel&quot;
    {
        cout&lt;&lt;&quot;FELD AUSGEBEN&quot;&lt;&lt;endl;

        if(GetAsyncKeyState(VK_DOWN)) //Pfeiltaste unten
        {
            //Block schnell nach unten bewegen
            cout&lt;&lt;&quot;UNTEN&quot;&lt;&lt;endl;
        }

        if(GetAsyncKeyState(VK_RIGHT)) //Pfeiltaste rechts
        {
            //Block nach rechts verschieben
            cout&lt;&lt;&quot;RECHTS&quot;&lt;&lt;endl;
        }

        if(GetAsyncKeyState(VK_RETURN)) //Enter
        {
            //Block drehen
            cout&lt;&lt;&quot;ENTER&quot;&lt;&lt;endl;
        }

        if(GetAsyncKeyState(VK_F12)) //Programm beenden
        {
            progende=false;
        }

        Sleep(500);
        if(!progende)
            break; //Endlosschleife verlassen
    }
    Sleep(1000);

    cout&lt;&lt;endl&lt;&lt;endl&lt;&lt;&quot;ENDE VOM PROGRAMM&quot;;  // Diese ausgabe ist nie zu sehen
    getch();                                //
    cin.clear();                            //
    cin.get();                              //
}
</code></pre>
<p>Wenn ich eine Zeit warte, ohne eine Taste zu drücken und dann F12 drücke, erscheint ganz normal die Ausgabe &quot;ENDE VOM PROGRAMM&quot;. Wenn ich aber ein paar mal auf die Pfeiltasten und Enter drücke und erst dann F12 drücke, schließt sich meine Console ohne auf einen Tastendruck zu warten oder &quot;ENDE VOM PROGRAMM&quot; auszugeben.<br />
Weis jemand wie ich dieses Problem beheben kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Danke im voRaus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Edit: Ich habe mich für das C++ forum entschieden, weil ich glaub, dass das 2. Problem trotz der Key-Abfragen über den standard zu lösen sein sollte. Falls ich im falschen Forum bin bitte ich um Verzeihung und Verschiebung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238181/problem-mit-quot-spiel-quot-in-console-getch-und-system-quot-cls-quot</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 14:50:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238181.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 Apr 2009 14:26:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit &amp;quot;Spiel&amp;quot; in Console (getch() und system(&amp;quot;cls&amp;quot;)) on Tue, 07 Apr 2009 14:26:25 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe mir für die Console Tetris programmiert. Das Spielfeld wird dabei von einem 10 x 20 char-array gebildet. Allerdings habe ich 2 Probleme:</p>
<p>1. Bei jedem &quot;Frame&quot;, also nach jeder Aktion im Spielfeld, wird die Console über system(&quot;cls&quot;) gecleart und das spielfeld neu ausgegeben. Allerdings bewirkt dies ein unschönes &quot;Flackern&quot;. Mir ist klar, dass system-Befehle vermieden werden sollten. Daher habe ich mir die clrsrn funktion selbst geschrieben</p>
<pre><code class="language-cpp">void clrscr() 
{ 
    COORD topLeft={0,0}; 
    CONSOLE_SCREEN_BUFFER_INFO csbi; 
    HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE); 
    GetConsoleScreenBufferInfo(hOut,&amp;csbi); 
    FillConsoleOutputCharacter(hOut,' ',csbi.dwSize.X * csbi.dwSize.Y, 
        topLeft,NULL); 
    SetConsoleCursorPosition(hOut,topLeft); 
}
</code></pre>
<p>Allerdings mit selbem Ergebnis. Jetzt weis ich nicht ob das Bildschirm clearen zu langsam ist oder das Ausgeben über cout. Hat jemand eine Idee, wie man das Spiel &quot;Flackerfrei&quot; darstellen kann? Die Lösung muss nicht Plattformunabhängig sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Ich habe auch gesehen, dass dieses Thema schon ein paar mal hier im Forum behandelt wurde, allerdings ohne Lösung (weil es keine gibt?)</p>
<p>Mein zweites Problem:<br />
Am Ende des Programms möchte ich gerne einen Highscore anzeigen lassen. Allerdings wird das Programm &quot;vorzeitig&quot; beendet. Zuerst dachte ich es liegt daran, dass der Eingabepuffer nicht richtig geleert wird. Doch dann habe ich folgendes Minimalbeispiel gemacht und gesehen, dass es an etwas anderem liegen muss.</p>
<pre><code class="language-cpp">int main()
{
    bool progende=true;
    for(;;)   //Endlosschleife; hier drin befindet sich das &quot;Spiel&quot;
    {
        cout&lt;&lt;&quot;FELD AUSGEBEN&quot;&lt;&lt;endl;

        if(GetAsyncKeyState(VK_DOWN)) //Pfeiltaste unten
        {
            //Block schnell nach unten bewegen
            cout&lt;&lt;&quot;UNTEN&quot;&lt;&lt;endl;
        }

        if(GetAsyncKeyState(VK_RIGHT)) //Pfeiltaste rechts
        {
            //Block nach rechts verschieben
            cout&lt;&lt;&quot;RECHTS&quot;&lt;&lt;endl;
        }

        if(GetAsyncKeyState(VK_RETURN)) //Enter
        {
            //Block drehen
            cout&lt;&lt;&quot;ENTER&quot;&lt;&lt;endl;
        }

        if(GetAsyncKeyState(VK_F12)) //Programm beenden
        {
            progende=false;
        }

        Sleep(500);
        if(!progende)
            break; //Endlosschleife verlassen
    }
    Sleep(1000);

    cout&lt;&lt;endl&lt;&lt;endl&lt;&lt;&quot;ENDE VOM PROGRAMM&quot;;  // Diese ausgabe ist nie zu sehen
    getch();                                //
    cin.clear();                            //
    cin.get();                              //
}
</code></pre>
<p>Wenn ich eine Zeit warte, ohne eine Taste zu drücken und dann F12 drücke, erscheint ganz normal die Ausgabe &quot;ENDE VOM PROGRAMM&quot;. Wenn ich aber ein paar mal auf die Pfeiltasten und Enter drücke und erst dann F12 drücke, schließt sich meine Console ohne auf einen Tastendruck zu warten oder &quot;ENDE VOM PROGRAMM&quot; auszugeben.<br />
Weis jemand wie ich dieses Problem beheben kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Danke im voRaus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Edit: Ich habe mich für das C++ forum entschieden, weil ich glaub, dass das 2. Problem trotz der Key-Abfragen über den standard zu lösen sein sollte. Falls ich im falschen Forum bin bitte ich um Verzeihung und Verschiebung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692370</guid><dc:creator><![CDATA[Tetrix]]></dc:creator><pubDate>Tue, 07 Apr 2009 14:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Spiel&amp;quot; in Console (getch() und system(&amp;quot;cls&amp;quot;)) on Wed, 08 Apr 2009 14:40:40 GMT]]></title><description><![CDATA[<p>hallo ,<br />
i wrote a program in c++ that read a data from a data.txt than send it to an other target,<br />
the problem is that i get always a new data in my txt and i need to read the always the new data than came (ihave RFID System that control the movement of pallet using transponder with ID nummer)<br />
i try to modify my program but i did not get a result<br />
please can someone hepl me<br />
hier is my code<br />
#include &lt;fstream&gt;<br />
#include &lt;string&gt;<br />
#include &lt;iostream&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;string.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;sys\types.h&gt;<br />
#include &lt;sys\stat.h&gt;<br />
******************************************************************************<br />
*<br />
* readFile<br />
*<br />
*****************************************************************************/</p>
<p>static WORD readFile(char *FileName, BYTE *UserData)<br />
{<br />
std::fstream InputFile(FileName, std::ios_base::in );</p>
<p>if (InputFile.is_open()) {<br />
std::string Line1;<br />
std::string Line2;<br />
std::string Line3;<br />
std::string Line4;<br />
std::string Line5;<br />
std::string Line6;</p>
<p>std::getline(InputFile, Line1);<br />
std::cout &lt;&lt; Line1&lt;&lt; std::endl;<br />
std::getline(InputFile, Line2);<br />
std::cout &lt;&lt; Line2&lt;&lt; std::endl;<br />
std::getline(InputFile, Line3);<br />
std::cout &lt;&lt; Line3&lt;&lt; std::endl;<br />
std::getline(InputFile, Line4);<br />
std::cout &lt;&lt; Line4&lt;&lt; std::endl;<br />
std::getline(InputFile, Line5);<br />
std::cout &lt;&lt; Line5&lt;&lt; std::endl;<br />
std::getline(InputFile, Line6);<br />
std::cout &lt;&lt; Line6&lt;&lt; std::endl;</p>
<p>sprintf((char *)UserData, &quot;%s\n%s\n%s\n%s\n%s\n%s\n&quot;,<br />
Line1.c_str(),<br />
Line2.c_str(),<br />
Line3.c_str(),<br />
Line4.c_str(),<br />
Line5.c_str(),<br />
Line6.c_str());</p>
<p>return(WORD)strlen((char *)UserData);<br />
}</p>
<p>return 0;<br />
}</p>
<p>ps:my txt contain more than 6 line and i get always new data</p>
<p>i need a hepllllll please<br />
thanks</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692927</guid><dc:creator><![CDATA[sousou]]></dc:creator><pubDate>Wed, 08 Apr 2009 14:40:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Spiel&amp;quot; in Console (getch() und system(&amp;quot;cls&amp;quot;)) on Thu, 09 Apr 2009 15:36:25 GMT]]></title><description><![CDATA[<p>Also das erste kannst du mal mit WriteConsoleOutputCharacter versuchen:<br />
<a href="http://msdn.microsoft.com/en-us/library/ms687410(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms687410(VS.85).aspx</a></p>
<p>Anstatt cout zu nehmen. Das funktioniert schonmal recht gut. Ich habe da mal probiert so etwas, wie Doublebuffering zu versuchen für einen 3D Renderer in der Konsole, allerdings war die Methode für das wechseln des Buffers der echte Kill. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> (das ganze Konsolenfenster hat angefangen zu flackern..)</p>
<p>Für ein Tetris reicht ja ein geringerer Takt und das sollte kaum noch schlimm aussehen auch ohne Doublebuffering.</p>
<p>Beim zweiten Problem würde ich mal die Eingabe in jedem Frame leeren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693589</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 09 Apr 2009 15:36:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Spiel&amp;quot; in Console (getch() und system(&amp;quot;cls&amp;quot;)) on Thu, 09 Apr 2009 15:59:12 GMT]]></title><description><![CDATA[<p>Kannst du mir mal ein Beispiel für die SetConsoleTextAttribute Funktion geben? Bin nicht so bewandert in der WinAPI.</p>
<blockquote>
<p>Beim zweiten Problem würde ich mal die Eingabe in jedem Frame leeren.</p>
</blockquote>
<p>Und wie genau mache ich das <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Wenn ich danach bei google suche finde ich nur .clear() für std::cin bzw fflush für FILE (aus C). Ist das wieder eine WinAPI Funktion?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693598</guid><dc:creator><![CDATA[Tetrix]]></dc:creator><pubDate>Thu, 09 Apr 2009 15:59:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Spiel&amp;quot; in Console (getch() und system(&amp;quot;cls&amp;quot;)) on Thu, 09 Apr 2009 16:38:38 GMT]]></title><description><![CDATA[<p>Wie kommst du jetzt auf SetConsoleTextAttribute? Die brauchst du, wenn du eine Farbe einstellen möchtest, aber für das schreiben reicht das hier:</p>
<blockquote>
<pre><code class="language-cpp">BOOL WINAPI WriteConsoleOutputCharacter(
  __in   HANDLE hConsoleOutput,
  __in   LPCTSTR lpCharacter,
  __in   DWORD nLength,
  __in   COORD dwWriteCoord,
  __out  LPDWORD lpNumberOfCharsWritten
);
</code></pre>
</blockquote>
<p>Was dann wahrscheinlich in etwa so aussehen kann:</p>
<pre><code class="language-cpp">DWORD write_to ( text , short x , short y)
{
    DWORD written = 0;
    COORD position = {x,y}

    WriteConsoleOutputCharacter (GetStdHandle (STD_OUTPUT_HANDLE),text,text.size(),position,&amp;written);
    return written;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1693611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693611</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 09 Apr 2009 16:38:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Spiel&amp;quot; in Console (getch() und system(&amp;quot;cls&amp;quot;)) on Thu, 09 Apr 2009 17:33:42 GMT]]></title><description><![CDATA[<p>Hi!<br />
Nimm WriteConsole bzw. WriteConsoleOutput.<br />
Gruß,<br />
B.B.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693645</guid><dc:creator><![CDATA[Big Brother]]></dc:creator><pubDate>Thu, 09 Apr 2009 17:33:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Spiel&amp;quot; in Console (getch() und system(&amp;quot;cls&amp;quot;)) on Sun, 19 Apr 2009 12:09:11 GMT]]></title><description><![CDATA[<p>Nimm am besten gotoXY, setz den Curser und schreib das dann jeweils um, dann muss nicht die ganze Konsole neu geladen werde.<br />
Ich hatte das gleiche Problem, aber jetzt ist es viel schneller und FLACKERFREI!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1698123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698123</guid><dc:creator><![CDATA[nearlyNERD]]></dc:creator><pubDate>Sun, 19 Apr 2009 12:09:11 GMT</pubDate></item></channel></rss>