<?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[Zahlen verschieben bei 4 GEwinnt]]></title><description><![CDATA[<p>original sah das spielfeld so aus:</p>
<p>------<br />
123456</p>
<p>ich habe die spielfelder nun etwas breiter gemacht in dem ich eine lücke reingebaut habe sieht also so aus:</p>
<p>- - - - - -<br />
1 2 3 4 5 6</p>
<p>blos wenn ich jetzt ein stein legen will und auf die 6 klicke legt der den stein nicht auf die 6 sondern irgendwo bei zwischen 3und4.<br />
das heisst der hat den LEERZEICHEN ABSTAND für die zahlen nicht genommen.</p>
<p>screens:</p>
<p>hier habe ich den stein auf die 6 gelegt:</p>
<p><a href="http://www.pic-upload.de/view-2055580/Unbenannt.jpg.html" rel="nofollow"></a><a href="http://www.pic-upload.de/07.05.09/sj8kdv.jpg" rel="nofollow">http://www.pic-upload.de/07.05.09/sj8kdv.jpg</a></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;
#include &quot;vollbild.h&quot;

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; &quot;-&quot;;
    }
    cout &lt;&lt; endl;

    for (int column = 0; column &lt; PLAYFIELD_WIDTH; column ++ )  // Spaltennummern ausgeben
    {
        cout &lt;&lt; &quot; &quot;;
        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();

    char spieler1[15], spieler2[15];
    cout &lt;&lt; &quot;&quot;&lt;&lt; endl;
    cout &lt;&lt; &quot; Bitte Namen eingeben&quot;&lt;&lt; endl;
    cout &lt;&lt; &quot;&quot;&lt;&lt; endl;
    color(player1);
    cout &lt;&lt; &quot; Spieler 1:&quot;;
    cout &lt;&lt; &quot; &quot;;
    cin  &gt;&gt; spieler1;
    cout &lt;&lt; &quot;&quot;&lt;&lt; endl;
    color(player2);
    cout &lt;&lt; &quot; Spieler 2:&quot;;
    cout &lt;&lt; &quot; &quot;;
    cin  &gt;&gt; spieler2;
    color(text);

    system(&quot;cls&quot;);
    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; &quot;;
cout &lt;&lt; spieler1&lt;&lt;&quot;: &quot;;
color(text);
}else
{
color(player2);
cout &lt;&lt;&quot; &quot;;
cout &lt;&lt; spieler2&lt;&lt;&quot;: &quot;;
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; &quot;;
            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;

    vollbild(true);

    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/240499/zahlen-verschieben-bei-4-gewinnt</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 00:03:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240499.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 May 2009 10:40:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zahlen verschieben bei 4 GEwinnt on Thu, 07 May 2009 10:40:49 GMT]]></title><description><![CDATA[<p>original sah das spielfeld so aus:</p>
<p>------<br />
123456</p>
<p>ich habe die spielfelder nun etwas breiter gemacht in dem ich eine lücke reingebaut habe sieht also so aus:</p>
<p>- - - - - -<br />
1 2 3 4 5 6</p>
<p>blos wenn ich jetzt ein stein legen will und auf die 6 klicke legt der den stein nicht auf die 6 sondern irgendwo bei zwischen 3und4.<br />
das heisst der hat den LEERZEICHEN ABSTAND für die zahlen nicht genommen.</p>
<p>screens:</p>
<p>hier habe ich den stein auf die 6 gelegt:</p>
<p><a href="http://www.pic-upload.de/view-2055580/Unbenannt.jpg.html" rel="nofollow"></a><a href="http://www.pic-upload.de/07.05.09/sj8kdv.jpg" rel="nofollow">http://www.pic-upload.de/07.05.09/sj8kdv.jpg</a></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;
#include &quot;vollbild.h&quot;

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; &quot;-&quot;;
    }
    cout &lt;&lt; endl;

    for (int column = 0; column &lt; PLAYFIELD_WIDTH; column ++ )  // Spaltennummern ausgeben
    {
        cout &lt;&lt; &quot; &quot;;
        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();

    char spieler1[15], spieler2[15];
    cout &lt;&lt; &quot;&quot;&lt;&lt; endl;
    cout &lt;&lt; &quot; Bitte Namen eingeben&quot;&lt;&lt; endl;
    cout &lt;&lt; &quot;&quot;&lt;&lt; endl;
    color(player1);
    cout &lt;&lt; &quot; Spieler 1:&quot;;
    cout &lt;&lt; &quot; &quot;;
    cin  &gt;&gt; spieler1;
    cout &lt;&lt; &quot;&quot;&lt;&lt; endl;
    color(player2);
    cout &lt;&lt; &quot; Spieler 2:&quot;;
    cout &lt;&lt; &quot; &quot;;
    cin  &gt;&gt; spieler2;
    color(text);

    system(&quot;cls&quot;);
    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; &quot;;
cout &lt;&lt; spieler1&lt;&lt;&quot;: &quot;;
color(text);
}else
{
color(player2);
cout &lt;&lt;&quot; &quot;;
cout &lt;&lt; spieler2&lt;&lt;&quot;: &quot;;
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; &quot;;
            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;

    vollbild(true);

    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/1707029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707029</guid><dc:creator><![CDATA[Harald44]]></dc:creator><pubDate>Thu, 07 May 2009 10:40:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlen verschieben bei 4 GEwinnt on Thu, 07 May 2009 11:41:51 GMT]]></title><description><![CDATA[<p>ist das spiel von dir? denke mal nicht.<br />
zeile 93,</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;  &quot;;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1707064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707064</guid><dc:creator><![CDATA[esskar]]></dc:creator><pubDate>Thu, 07 May 2009 11:41:51 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlen verschieben bei 4 GEwinnt on Thu, 07 May 2009 12:10:44 GMT]]></title><description><![CDATA[<p>was muss ich mit dem code den genau machen damit die zahlen auch eine leerstelle kriegen?</p>
<p>Habe daraus das gmacht:</p>
<p>else<br />
cout &lt;&lt; &quot; &quot;;<br />
cout &lt;&lt; &quot; &quot;;<br />
cout &lt;&lt; &quot; &quot;;</p>
<p>jetzt haben die zahlen zwar lücken aber jetzt passt gar nix.</p>
<p>wenn ich 0 klicke schmeisst der die 0 links neben der dargestellten 0.</p>
<p>nur die 1 klappt. klicke ich auf 1 tut er diesen auch auf die 1 rauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707086</guid><dc:creator><![CDATA[Harald44]]></dc:creator><pubDate>Thu, 07 May 2009 12:10:44 GMT</pubDate></item></channel></rss>