<?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[Exit Funktion für 4 Gewinnt Spiel]]></title><description><![CDATA[<p>hi leute</p>
<p>habe hier ein 4gewinnt spiel.</p>
<p>ich wollte das man während des spieles jederzeit durch das drücken z.b von Q zurück ins menü gelangt.</p>
<p>Kriege das irgendwie nicht hin.</p>
<p>Hat jemand ein Tipp oder ne Idee?</p>
<p>hier der Code:</p>
<pre><code>//-----------------------------------------------------------------------------
// INCLUDES
//-----------------------------------------------------------------------------

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;assert.h&gt;
#include &lt;windows.h&gt;
#include &lt;conio.h&gt;
#include &lt;iostream.h&gt;

const unsigned short player1 = 14;
const unsigned short player2 = 10;
const unsigned short text = 15;
const unsigned short bannerf1 = 15;
const unsigned short bannerf2 = 14;

//-----------------------------------------------------------------------------
// TYPEN
//-----------------------------------------------------------------------------

enum BoardCell                /// Belegungsarten einer Spielbrettzelle
{
   NO_PIECE,                /// Kein Spielstein
   PLAYER1,                /// Spielstein von Spieler 1
   PLAYER2                /// Spielstein von Spieler 2
};

//-----------------------------------------------------------------------------
// KONSTANTEN (Konfiguration des Spieles)
//-----------------------------------------------------------------------------

const int PLAYFIELD_WIDTH  = 7;     /// Breite des Spielfeldes
const int PLAYFIELD_HEIGHT = 6;    /// Höhe des Spielfeldes
const int WIN_COUNT        = 4;   /// Anzahl der konsekutiven Steine für eine Gewinnsituation

//-----------------------------------------------------------------------------
// GLOBALE VARIABLEN
//-----------------------------------------------------------------------------

BoardCell board[PLAYFIELD_HEIGHT][PLAYFIELD_WIDTH]; /// Spielbrett
int numFreeCells[PLAYFIELD_WIDTH];                 /// Anzahl der freien Zellen in einer Spalte

//-----------------------------------------------------------------------------
// FUNKTIONEN
//-----------------------------------------------------------------------------

void color(unsigned short color)
{
    HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hcon,color);
}

void initBoard()
{

  for ( int column = 0; column &lt; PLAYFIELD_WIDTH; column ++ ) // Über die Spalten iterieren
  {
  for ( int row = 0; row &lt; PLAYFIELD_HEIGHT; row ++ )   // Über die Zeilen iterieren
    {
     board[row][column] = NO_PIECE;       // Inhalt der Spielfeldzelle zurücksetzen
    }
     numFreeCells[column] = PLAYFIELD_HEIGHT;    // Anzahl der freien Zellen pro Spalte initialisieren
   }
 }

//-----------------------------------------------------------------------------

void printBoard()
{
    for ( int row = 0; row &lt; PLAYFIELD_HEIGHT; row ++ )   // Über die Zeilen iterieren
    {
    for ( int column = 0; column &lt; PLAYFIELD_WIDTH; column ++ )   // Über die Spalten iterieren
        {

            if (board[row][column] == PLAYER1)          // Inhalt der Zelle ausgeben
            {
                color(player1);
                cout &lt;&lt; &quot;X&quot;;
                color(text);
            }
            else if (board[row][column] == PLAYER2)
            {
                color(player2);
                cout &lt;&lt; &quot;O&quot;;
                color(text);
            }
            else
                cout &lt;&lt; &quot; &quot;;

        }

        cout &lt;&lt; endl;                     // Nächste zeile
    }

    for (int column = 0; column &lt; PLAYFIELD_WIDTH; column ++ )     // Unteren Spielfeldrand ausgeben
    {
        cout &lt;&lt; &quot;-&quot;;
    }
    cout &lt;&lt; endl;

    for (int column = 0; column &lt; PLAYFIELD_WIDTH; column ++ )  // Spaltennummern ausgeben
    {
        cout &lt;&lt; column;
    }
    cout &lt;&lt; endl &lt;&lt; endl;
}

//-----------------------------------------------------------------------------

BoardCell getCell( int row, int column )
{

    if (row &gt;= 0 &amp;&amp; row &lt; PLAYFIELD_HEIGHT &amp;&amp; column &gt;= 0 &amp;&amp; column &lt; PLAYFIELD_WIDTH)
        return board[row][column];
    else
        return NO_PIECE;
}

//-----------------------------------------------------------------------------

int countPieces(int row, int column, int dx, int dy, BoardCell player)
{

  assert(row&gt;=0 &amp;&amp; row &lt; PLAYFIELD_HEIGHT &amp;&amp; column&gt;=0 &amp;&amp; column &lt; PLAYFIELD_WIDTH); // Stelle sicher, dass Referenzposition innerhalb des Spielfeldes liegt

  if (getCell(row,column) == player)
  {

    int count = 1;       // Zähler initialisieren (mindestens 1 Stein)

    int sy1=row;              // Scankoordinaten
    int sx1=column;

    while ( getCell(sy1+dy,sx1+dx) == player )   // Erhöhe Zähler, solange von Referenzposition row,column ausgehend
    {                                           // in Richtung dy,dx weitere Steine von Spieler player folgen

      sy1+=dy;          // Scankoordinaten aktualisieren
      sx1+=dx;

      count++;         // Weiterzählen
    }

    int sy2=row;           // Scankoordinaten
    int sx2=column;

    while ( getCell(sy2-dy,sx2-dx) == player )       // Erhöhe Zähler, solange von Referenzposition row,column ausgehend
        {                                            // in Richtung -dy,-dx weitere Steine von Spieler player folgen

      sy2-=dy;    // Scankoordinaten aktualisieren
      sx2-=dx;

      count++;        // Weiterzählen
    }

    return count;      // Zähler zurückgeben

  }
  else
    return 0;

}

//-----------------------------------------------------------------------------

bool nInARow( int row, int column, BoardCell player, int n)
{
    assert(row &gt;= 0 &amp;&amp; row &lt; 6 &amp;&amp; column &gt;= 0 &amp;&amp; column &lt; 7);
    assert(board[row][column] == player);

    if (countPieces(row,column,1,0,player)&gt;=n) return true;     // Horizontaler Fall

    if (countPieces(row,column,0,1,player)&gt;=n) return true;    // Vertikaler Fall

    if (countPieces(row,column,1,1,player)&gt;=n) return true;    // Hauptdiagonale &quot;\&quot;

    if (countPieces(row,column,-1,1,player)&gt;=n) return true;  // Nebendiagonale &quot;/&quot;

    return false;       // Keiner der Fälle ist eingetreten =&gt; keine Gewinnsituation
}

//-----------------------------------------------------------------------------

bool boardIsFull()
{
    for ( int column = 0; column &lt; PLAYFIELD_WIDTH; column ++ )
    {
        if ( numFreeCells[column] &gt; 0 ) return false;  // Falls mindestens eine nicht volle Spalte gefunden wird
        }   // so ist das Brett nicht leer

    return true;      // Spielbrett voll
}

void banner()
{
       //Banner

        color(text);
     cout&lt;&lt;&quot;&quot;&lt;&lt;endl;   
     cout&lt;&lt;&quot; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°&quot;&lt;&lt;endl;
     color(bannerf2);
     cout&lt;&lt;&quot; ..............................................................................&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ..##............######...########.##......##.####.##....##.##....##.########..&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ..##....##.....##....##..##.......##..##..##..##..###...##.###...##....##.....&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ..##....##.....##........##.......##..##..##..##..####..##.####..##....##.....&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ..##....##.....##...####.######...##..##..##..##..##.##.##.##.##.##....##.....&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ..#########....##....##..##.......##..##..##..##..##..####.##..####....##.....&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ........##.....##....##..##.......##..##..##..##..##...###.##...###....##.....&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ........##......######...########..###..###..####.##....##.##....##....##.....&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ..............................................................................&quot;&lt;&lt;endl;
     color(text);
     cout&lt;&lt;&quot; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°&quot;;
     color(bannerf2);
     cout&lt;&lt;&quot; by GSGT Games &quot;;
     color(text);
     cout&lt;&lt;&quot; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°&quot;&lt;&lt;endl;
     color(bannerf1);

}

void anleitung()
{
     system(&quot;cls&quot;);
     banner();

    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout&lt;&lt;&quot;\t\t\t\t *************&quot;&lt;&lt;endl;
    cout&lt;&lt;&quot;\t\t\t\t *&quot;;
    cout&lt;&lt;&quot; Anleitung &quot;;
    cout&lt;&lt;&quot;*&quot;&lt;&lt;endl;
    cout&lt;&lt;&quot;\t\t\t\t *************&quot;&lt;&lt;endl;

   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;  
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Ziel des Spieles ist es, als erster 4 Steine seiner Farbe in eine&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Reihe zu bekommen.&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Die Steinfarben sind f\x81r Spieler 1&quot;;
   color(player1);
   cout&lt;&lt;&quot; (GELB)&quot;;
   color(text);
   cout&lt;&lt;&quot; und Spieler 2&quot;;
   color(player2);
   cout&lt;&lt;&quot; (GR\x9aN)&quot;&lt;&lt;endl;
   color(text);
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Es wird abwechselnd je 1 Stein der eigenen Farbe&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  in die Felder fallen gelassen.&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Dies kann man tun mit den Tasten 0,1,2,3,4,5,6. &quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Wobei 0 f\x81r die ganz linke Spalte sowie 6 f\x81r ganz rechte Spalte steht.&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Durch Strategie und Taktik versucht man nun, mit den eigenen Steinen&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  eine 4er-Reihe zu bilden.&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Die Reihen k\x94nnen entweder&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  -senkrecht&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  -waagerecht&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  -diagonal&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  angeordnet sein.&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Dabei darf man aber nie den Gegner aus den Augen lassen,&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  denn wenn er eine Zwickm\x81hle bildet, kann bald alles zu sp\x84t sein!&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Man muss also gleichzeitig verhindern, dass er zuvor eine&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  4er-Reihe zustande bringt.&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;                Beliebige Taste dr\201cken um zum Men\201 zugelangen&quot;&lt;&lt;endl;
     getch();

     system(&quot;cls&quot;);
}

int spiel(void)
{
    char taste;

    banner();

    initBoard();          // Initialisiere das Spielbrett und gebe es aus
    printBoard();

    BoardCell player = PLAYER1;    // Aktueller Spieler

    while ( true )
    {

        int column;    // Fordere Spieler zur Eingabe eines Spielzuges auf

        if (player == PLAYER1) 
{ 
color(player1);
cout &lt;&lt; &quot; Spieler 1:&quot; &lt;&lt; endl;
color(text);
}else 
{ 
color(player2);
cout &lt;&lt; &quot; Spieler 2:&quot; &lt;&lt; endl;
color(text);
}

        int res = scanf(&quot;%d&quot;, &amp;column);

        while ( res != 1 || column &lt; 0 || column &gt;= PLAYFIELD_WIDTH || numFreeCells[column] == 0 )        // Wiederhole, falls Eingabe ungültig
           {      // (kein Integer eingegeben  oder  ungültige Spaltennummer  oder  Spalte bereits voll)
            if ( res != 1 )
                fflush(stdin);
            cout &lt;&lt; &quot;Ung\201ltig. Nochmal : &quot;;
            res = scanf(&quot;%d&quot;, &amp;column);
        }

        numFreeCells[column] --;             // Aktualisiere den Zustand des Spielbrettes
        int row = numFreeCells[column];
        board[row][column] = player;

        system(&quot;cls&quot;);
        banner();
        printBoard();                 // Gebe das Spielbrett aus

        if ( nInARow(row, column, player,WIN_COUNT) )  // Beende das Spiel, falls eine Gewinnsituation aufgetreten ist oder das
              {                         // Spielbrett voll ist
            printf(&quot; Spieler %d hat gewonnen!\n&quot;, player);
            getch();
            break;
        }
        else if ( boardIsFull() )
        {
            printf(&quot;Unentschieden!\n&quot;);
            getch();
            break;
        }

        player = (player == PLAYER1) ? PLAYER2 : PLAYER1;             // der nächste Spieler ist an der Reihe

    }
}

//-----------------------------------------------------------------------------
// MAIN
//-----------------------------------------------------------------------------

int main()           /// Hauptprogramm
{
    char taste;

    menue:

    banner();

    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout&lt;&lt;&quot;\t\t\t\t *************&quot;&lt;&lt;endl;
    cout&lt;&lt;&quot;\t\t\t\t *&quot;;
    cout&lt;&lt;&quot;    Men\201 &quot;;
    cout&lt;&lt;&quot;  *&quot;&lt;&lt;endl;
    cout&lt;&lt;&quot;\t\t\t\t *************&quot;&lt;&lt;endl;

    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot; (S)piel starten&quot; &lt;&lt; endl;
     cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot; (A)nleitung&quot; &lt;&lt; endl;
     cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot; (B)eenden&quot; &lt;&lt; endl;

    taste = getch();

    switch(taste)
    {
        case 'S':
        case 's':
             system(&quot;cls&quot;);
             spiel();
             system(&quot;cls&quot;);
             goto menue;

        break;

        case 'A':
        case 'a':
             anleitung();
             system(&quot;cls&quot;);
             goto menue;
        break;

        case 'B':
        case 'b':
             return 0;

        default:
             system(&quot;cls&quot;);
             goto menue;
    }

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/240431/exit-funktion-für-4-gewinnt-spiel</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 00:16:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240431.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 May 2009 14:50:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Exit Funktion für 4 Gewinnt Spiel on Wed, 06 May 2009 14:51:09 GMT]]></title><description><![CDATA[<p>hi leute</p>
<p>habe hier ein 4gewinnt spiel.</p>
<p>ich wollte das man während des spieles jederzeit durch das drücken z.b von Q zurück ins menü gelangt.</p>
<p>Kriege das irgendwie nicht hin.</p>
<p>Hat jemand ein Tipp oder ne Idee?</p>
<p>hier der Code:</p>
<pre><code>//-----------------------------------------------------------------------------
// INCLUDES
//-----------------------------------------------------------------------------

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;assert.h&gt;
#include &lt;windows.h&gt;
#include &lt;conio.h&gt;
#include &lt;iostream.h&gt;

const unsigned short player1 = 14;
const unsigned short player2 = 10;
const unsigned short text = 15;
const unsigned short bannerf1 = 15;
const unsigned short bannerf2 = 14;

//-----------------------------------------------------------------------------
// TYPEN
//-----------------------------------------------------------------------------

enum BoardCell                /// Belegungsarten einer Spielbrettzelle
{
   NO_PIECE,                /// Kein Spielstein
   PLAYER1,                /// Spielstein von Spieler 1
   PLAYER2                /// Spielstein von Spieler 2
};

//-----------------------------------------------------------------------------
// KONSTANTEN (Konfiguration des Spieles)
//-----------------------------------------------------------------------------

const int PLAYFIELD_WIDTH  = 7;     /// Breite des Spielfeldes
const int PLAYFIELD_HEIGHT = 6;    /// Höhe des Spielfeldes
const int WIN_COUNT        = 4;   /// Anzahl der konsekutiven Steine für eine Gewinnsituation

//-----------------------------------------------------------------------------
// GLOBALE VARIABLEN
//-----------------------------------------------------------------------------

BoardCell board[PLAYFIELD_HEIGHT][PLAYFIELD_WIDTH]; /// Spielbrett
int numFreeCells[PLAYFIELD_WIDTH];                 /// Anzahl der freien Zellen in einer Spalte

//-----------------------------------------------------------------------------
// FUNKTIONEN
//-----------------------------------------------------------------------------

void color(unsigned short color)
{
    HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hcon,color);
}

void initBoard()
{

  for ( int column = 0; column &lt; PLAYFIELD_WIDTH; column ++ ) // Über die Spalten iterieren
  {
  for ( int row = 0; row &lt; PLAYFIELD_HEIGHT; row ++ )   // Über die Zeilen iterieren
    {
     board[row][column] = NO_PIECE;       // Inhalt der Spielfeldzelle zurücksetzen
    }
     numFreeCells[column] = PLAYFIELD_HEIGHT;    // Anzahl der freien Zellen pro Spalte initialisieren
   }
 }

//-----------------------------------------------------------------------------

void printBoard()
{
    for ( int row = 0; row &lt; PLAYFIELD_HEIGHT; row ++ )   // Über die Zeilen iterieren
    {
    for ( int column = 0; column &lt; PLAYFIELD_WIDTH; column ++ )   // Über die Spalten iterieren
        {

            if (board[row][column] == PLAYER1)          // Inhalt der Zelle ausgeben
            {
                color(player1);
                cout &lt;&lt; &quot;X&quot;;
                color(text);
            }
            else if (board[row][column] == PLAYER2)
            {
                color(player2);
                cout &lt;&lt; &quot;O&quot;;
                color(text);
            }
            else
                cout &lt;&lt; &quot; &quot;;

        }

        cout &lt;&lt; endl;                     // Nächste zeile
    }

    for (int column = 0; column &lt; PLAYFIELD_WIDTH; column ++ )     // Unteren Spielfeldrand ausgeben
    {
        cout &lt;&lt; &quot;-&quot;;
    }
    cout &lt;&lt; endl;

    for (int column = 0; column &lt; PLAYFIELD_WIDTH; column ++ )  // Spaltennummern ausgeben
    {
        cout &lt;&lt; column;
    }
    cout &lt;&lt; endl &lt;&lt; endl;
}

//-----------------------------------------------------------------------------

BoardCell getCell( int row, int column )
{

    if (row &gt;= 0 &amp;&amp; row &lt; PLAYFIELD_HEIGHT &amp;&amp; column &gt;= 0 &amp;&amp; column &lt; PLAYFIELD_WIDTH)
        return board[row][column];
    else
        return NO_PIECE;
}

//-----------------------------------------------------------------------------

int countPieces(int row, int column, int dx, int dy, BoardCell player)
{

  assert(row&gt;=0 &amp;&amp; row &lt; PLAYFIELD_HEIGHT &amp;&amp; column&gt;=0 &amp;&amp; column &lt; PLAYFIELD_WIDTH); // Stelle sicher, dass Referenzposition innerhalb des Spielfeldes liegt

  if (getCell(row,column) == player)
  {

    int count = 1;       // Zähler initialisieren (mindestens 1 Stein)

    int sy1=row;              // Scankoordinaten
    int sx1=column;

    while ( getCell(sy1+dy,sx1+dx) == player )   // Erhöhe Zähler, solange von Referenzposition row,column ausgehend
    {                                           // in Richtung dy,dx weitere Steine von Spieler player folgen

      sy1+=dy;          // Scankoordinaten aktualisieren
      sx1+=dx;

      count++;         // Weiterzählen
    }

    int sy2=row;           // Scankoordinaten
    int sx2=column;

    while ( getCell(sy2-dy,sx2-dx) == player )       // Erhöhe Zähler, solange von Referenzposition row,column ausgehend
        {                                            // in Richtung -dy,-dx weitere Steine von Spieler player folgen

      sy2-=dy;    // Scankoordinaten aktualisieren
      sx2-=dx;

      count++;        // Weiterzählen
    }

    return count;      // Zähler zurückgeben

  }
  else
    return 0;

}

//-----------------------------------------------------------------------------

bool nInARow( int row, int column, BoardCell player, int n)
{
    assert(row &gt;= 0 &amp;&amp; row &lt; 6 &amp;&amp; column &gt;= 0 &amp;&amp; column &lt; 7);
    assert(board[row][column] == player);

    if (countPieces(row,column,1,0,player)&gt;=n) return true;     // Horizontaler Fall

    if (countPieces(row,column,0,1,player)&gt;=n) return true;    // Vertikaler Fall

    if (countPieces(row,column,1,1,player)&gt;=n) return true;    // Hauptdiagonale &quot;\&quot;

    if (countPieces(row,column,-1,1,player)&gt;=n) return true;  // Nebendiagonale &quot;/&quot;

    return false;       // Keiner der Fälle ist eingetreten =&gt; keine Gewinnsituation
}

//-----------------------------------------------------------------------------

bool boardIsFull()
{
    for ( int column = 0; column &lt; PLAYFIELD_WIDTH; column ++ )
    {
        if ( numFreeCells[column] &gt; 0 ) return false;  // Falls mindestens eine nicht volle Spalte gefunden wird
        }   // so ist das Brett nicht leer

    return true;      // Spielbrett voll
}

void banner()
{
       //Banner

        color(text);
     cout&lt;&lt;&quot;&quot;&lt;&lt;endl;   
     cout&lt;&lt;&quot; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°&quot;&lt;&lt;endl;
     color(bannerf2);
     cout&lt;&lt;&quot; ..............................................................................&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ..##............######...########.##......##.####.##....##.##....##.########..&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ..##....##.....##....##..##.......##..##..##..##..###...##.###...##....##.....&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ..##....##.....##........##.......##..##..##..##..####..##.####..##....##.....&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ..##....##.....##...####.######...##..##..##..##..##.##.##.##.##.##....##.....&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ..#########....##....##..##.......##..##..##..##..##..####.##..####....##.....&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ........##.....##....##..##.......##..##..##..##..##...###.##...###....##.....&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ........##......######...########..###..###..####.##....##.##....##....##.....&quot;&lt;&lt;endl;
     cout&lt;&lt;&quot; ..............................................................................&quot;&lt;&lt;endl;
     color(text);
     cout&lt;&lt;&quot; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°&quot;;
     color(bannerf2);
     cout&lt;&lt;&quot; by GSGT Games &quot;;
     color(text);
     cout&lt;&lt;&quot; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°&quot;&lt;&lt;endl;
     color(bannerf1);

}

void anleitung()
{
     system(&quot;cls&quot;);
     banner();

    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout&lt;&lt;&quot;\t\t\t\t *************&quot;&lt;&lt;endl;
    cout&lt;&lt;&quot;\t\t\t\t *&quot;;
    cout&lt;&lt;&quot; Anleitung &quot;;
    cout&lt;&lt;&quot;*&quot;&lt;&lt;endl;
    cout&lt;&lt;&quot;\t\t\t\t *************&quot;&lt;&lt;endl;

   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;  
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Ziel des Spieles ist es, als erster 4 Steine seiner Farbe in eine&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Reihe zu bekommen.&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Die Steinfarben sind f\x81r Spieler 1&quot;;
   color(player1);
   cout&lt;&lt;&quot; (GELB)&quot;;
   color(text);
   cout&lt;&lt;&quot; und Spieler 2&quot;;
   color(player2);
   cout&lt;&lt;&quot; (GR\x9aN)&quot;&lt;&lt;endl;
   color(text);
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Es wird abwechselnd je 1 Stein der eigenen Farbe&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  in die Felder fallen gelassen.&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Dies kann man tun mit den Tasten 0,1,2,3,4,5,6. &quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Wobei 0 f\x81r die ganz linke Spalte sowie 6 f\x81r ganz rechte Spalte steht.&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Durch Strategie und Taktik versucht man nun, mit den eigenen Steinen&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  eine 4er-Reihe zu bilden.&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Die Reihen k\x94nnen entweder&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  -senkrecht&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  -waagerecht&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  -diagonal&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  angeordnet sein.&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Dabei darf man aber nie den Gegner aus den Augen lassen,&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  denn wenn er eine Zwickm\x81hle bildet, kann bald alles zu sp\x84t sein!&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  Man muss also gleichzeitig verhindern, dass er zuvor eine&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;  4er-Reihe zustande bringt.&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;&quot;&lt;&lt;endl;
   cout&lt;&lt;&quot;                Beliebige Taste dr\201cken um zum Men\201 zugelangen&quot;&lt;&lt;endl;
     getch();

     system(&quot;cls&quot;);
}

int spiel(void)
{
    char taste;

    banner();

    initBoard();          // Initialisiere das Spielbrett und gebe es aus
    printBoard();

    BoardCell player = PLAYER1;    // Aktueller Spieler

    while ( true )
    {

        int column;    // Fordere Spieler zur Eingabe eines Spielzuges auf

        if (player == PLAYER1) 
{ 
color(player1);
cout &lt;&lt; &quot; Spieler 1:&quot; &lt;&lt; endl;
color(text);
}else 
{ 
color(player2);
cout &lt;&lt; &quot; Spieler 2:&quot; &lt;&lt; endl;
color(text);
}

        int res = scanf(&quot;%d&quot;, &amp;column);

        while ( res != 1 || column &lt; 0 || column &gt;= PLAYFIELD_WIDTH || numFreeCells[column] == 0 )        // Wiederhole, falls Eingabe ungültig
           {      // (kein Integer eingegeben  oder  ungültige Spaltennummer  oder  Spalte bereits voll)
            if ( res != 1 )
                fflush(stdin);
            cout &lt;&lt; &quot;Ung\201ltig. Nochmal : &quot;;
            res = scanf(&quot;%d&quot;, &amp;column);
        }

        numFreeCells[column] --;             // Aktualisiere den Zustand des Spielbrettes
        int row = numFreeCells[column];
        board[row][column] = player;

        system(&quot;cls&quot;);
        banner();
        printBoard();                 // Gebe das Spielbrett aus

        if ( nInARow(row, column, player,WIN_COUNT) )  // Beende das Spiel, falls eine Gewinnsituation aufgetreten ist oder das
              {                         // Spielbrett voll ist
            printf(&quot; Spieler %d hat gewonnen!\n&quot;, player);
            getch();
            break;
        }
        else if ( boardIsFull() )
        {
            printf(&quot;Unentschieden!\n&quot;);
            getch();
            break;
        }

        player = (player == PLAYER1) ? PLAYER2 : PLAYER1;             // der nächste Spieler ist an der Reihe

    }
}

//-----------------------------------------------------------------------------
// MAIN
//-----------------------------------------------------------------------------

int main()           /// Hauptprogramm
{
    char taste;

    menue:

    banner();

    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout&lt;&lt;&quot;\t\t\t\t *************&quot;&lt;&lt;endl;
    cout&lt;&lt;&quot;\t\t\t\t *&quot;;
    cout&lt;&lt;&quot;    Men\201 &quot;;
    cout&lt;&lt;&quot;  *&quot;&lt;&lt;endl;
    cout&lt;&lt;&quot;\t\t\t\t *************&quot;&lt;&lt;endl;

    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot; (S)piel starten&quot; &lt;&lt; endl;
     cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot; (A)nleitung&quot; &lt;&lt; endl;
     cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot; (B)eenden&quot; &lt;&lt; endl;

    taste = getch();

    switch(taste)
    {
        case 'S':
        case 's':
             system(&quot;cls&quot;);
             spiel();
             system(&quot;cls&quot;);
             goto menue;

        break;

        case 'A':
        case 'a':
             anleitung();
             system(&quot;cls&quot;);
             goto menue;
        break;

        case 'B':
        case 'b':
             return 0;

        default:
             system(&quot;cls&quot;);
             goto menue;
    }

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1706549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706549</guid><dc:creator><![CDATA[Harald44]]></dc:creator><pubDate>Wed, 06 May 2009 14:51:09 GMT</pubDate></item><item><title><![CDATA[Reply to Exit Funktion für 4 Gewinnt Spiel on Wed, 06 May 2009 14:56:28 GMT]]></title><description><![CDATA[<p>Vielleicht mit GetAsyncKeyState?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1706556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706556</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Wed, 06 May 2009 14:56:28 GMT</pubDate></item><item><title><![CDATA[Reply to Exit Funktion für 4 Gewinnt Spiel on Wed, 06 May 2009 15:01:13 GMT]]></title><description><![CDATA[<p>hmm gute frage. kenne mich damit eigentlich so gut wie gar nicht aus.</p>
<p>Habe c++ erst seit 2-3monate in der schule.davor noch nie was mit gemacht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1706560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706560</guid><dc:creator><![CDATA[Harald44]]></dc:creator><pubDate>Wed, 06 May 2009 15:01:13 GMT</pubDate></item><item><title><![CDATA[Reply to Exit Funktion für 4 Gewinnt Spiel on Wed, 06 May 2009 15:10:11 GMT]]></title><description><![CDATA[<p>Ich hoffe mal, dass dein Lehrer dir nicht solches C++ beigebracht hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Eine Tastenabfrage ist in C++ grundsätzlich nicht möglich. Über die WinAPI, welche du bereits zum Teil verwendest, kann man aber eben GetAsyncKeyState verwenden:<br />
<a href="http://msdn.microsoft.com/en-us/library/ms646293.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms646293.aspx</a></p>
<p>Du könntest es aber auch einfacher machen und zum Beispiel beim Abfragen der Kolonne eine negative Zahl als Abbruch deuten <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="😉"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1706564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706564</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 06 May 2009 15:10:11 GMT</pubDate></item><item><title><![CDATA[Reply to Exit Funktion für 4 Gewinnt Spiel on Wed, 06 May 2009 15:14:36 GMT]]></title><description><![CDATA[<p>ja die seite hatte ich vorhin auch gegooglet. aber leider weiss ich damit nicht viel anzufangen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1706566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706566</guid><dc:creator><![CDATA[Harald44]]></dc:creator><pubDate>Wed, 06 May 2009 15:14:36 GMT</pubDate></item><item><title><![CDATA[Reply to Exit Funktion für 4 Gewinnt Spiel on Wed, 06 May 2009 15:32:41 GMT]]></title><description><![CDATA[<p>Harald44 schrieb:</p>
<blockquote>
<p>ja die seite hatte ich vorhin auch gegooglet. aber leider weiss ich damit nicht viel anzufangen</p>
</blockquote>
<p>Dann frag was du nicht verstehst. Oder vielleicht hilft dir dieses Beispielprogramm:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

int main()
{
  while(!GetAsyncKeyState(0x41));

  return 0;
}
</code></pre>
<p>Das Programm läuft, bis jemand die Taste A drückt. Sowas ist zwar eher eine schlecht Methode, da es Polling ist und dadurch schnell zu einem Busy Waiting mutieren kann, wenn man nicht aufpasst (im Beispielcode ist es der Fall):<br />
<a href="http://de.wikipedia.org/wiki/Aktives_Warten" rel="nofollow">http://de.wikipedia.org/wiki/Aktives_Warten</a><br />
<a href="http://en.wikipedia.org/wiki/Busy_waiting" rel="nofollow">http://en.wikipedia.org/wiki/Busy_waiting</a></p>
<p>Aber da du Anfänger bist, will ich mal nicht komplexere Methoden vorschlagen. Du solltest sowieso wohl zuerst ein sinnvolles C++ Buch kaufen und vernünftiges C++ lernen ...</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1706585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706585</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 06 May 2009 15:32:41 GMT</pubDate></item></channel></rss>