<?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[4-Gewinnt Diagonal nach 4 gleichen Zeichen in einer Reihe Absuchen.]]></title><description><![CDATA[<p>Hallo C++ Community,</p>
<p>Ich habe ein Problem (klar sonst würde ich keine Frage stellen ;D)</p>
<p>Ich arbeite momentan an einem 4-Gewinnst spiel, was auch soweit funktioniert bis auf den Punkt das ich es nicht schaffe in den Diagonalen nach 4 gleichen Zeichen in einer Reihe zu suchen. Da ich nicht weis was ihr alles von meinem Code braucht lade ich mal den gesamten hoch.</p>
<pre><code>#include &lt;conio.h&gt;
#include &lt;iostream.h&gt;
#include &lt;string.h&gt;
#include &lt;math.h&gt;

/*4-Gewinnt */
//------------------------------------------------------------------------------
//Globale Variablen
//Initialisieren des Feldes   
char Feld [6][7];
int Runde = 0;

//Funktionen
void FeldAnzeigen();
void Verarbeiten(int);
int Kontrolle();
int Zug();

//Hauptprogramm
int main ()
{
//Sonstige Variablen
    int Zeile, Spalte;
    int ZugSpalte=0;
    int Kontrollwert=0;

cout&lt;&lt;&quot;===============================================================================&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;================================= 4-Gewinnt ===================================&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;===============================================================================&quot;&lt;&lt;endl&lt;&lt;endl&lt;&lt;endl;

cout&lt;&lt;&quot;================================== Regeln: ====================================&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;1. Spieler 1 ist [x] Spieler 2 ist [#].&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;2. Ziel des Spieles ist es 4 Steine seiner Form in eine Reihe zu bekommen.&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;3. Erlaubt sind Diagonal, Senkrecht und Wagerecht.&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;===============================================================================&quot;&lt;&lt;endl&lt;&lt;endl&lt;&lt;endl;

    cout&lt;&lt;&quot;1 - 2 - 3 - 4 - 5 - 6 - 7&quot;;
    for (Zeile = 0; Zeile &lt;= 5 ;Zeile++)
        {   
        cout&lt;&lt;endl;
        for (Spalte = 0; Spalte &lt;= 6; Spalte++)
            {
            Feld [Zeile][Spalte]=' ';
            cout&lt;&lt;Feld [Zeile][Spalte]&lt;&lt;&quot; | &quot;;
            }
        }
do
{        
ZugSpalte = Zug ();
Verarbeiten(ZugSpalte); 
FeldAnzeigen();

Runde++;

Kontrollwert=Kontrolle();
}
while(Kontrollwert == 0);

if(Kontrollwert == 1)
{
                   cout&lt;&lt;&quot;\nSpieler 1 [x] hat gewonnen!&quot;&lt;&lt;endl;
}
else if (Kontrollwert == 2)
{
                   cout&lt;&lt;&quot;\nSpieler 2 [#] hat gewonnen!&quot;&lt;&lt;endl;
}

getch();
}

//--------------------------FUNKTIONEN-----------------------------------------
//Grafische Ausgabe des Aktuellen Feldes
void FeldAnzeigen ()
{
cout&lt;&lt;&quot;===============================================================================&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;================================= 4-Gewinnt ===================================&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;===============================================================================&quot;&lt;&lt;endl;

    cout&lt;&lt;&quot;1 - 2 - 3 - 4 - 5 - 6 - 7&quot;;
    for (int Zeile = 0; Zeile &lt;= 5; Zeile++)
        {   
        cout&lt;&lt;endl;
        for (int Spalte = 0; Spalte &lt;= 6; Spalte++)
            {
            cout&lt;&lt;Feld [Zeile][Spalte]&lt;&lt;&quot; | &quot;;
            }        
        }
}

//Zug
//Eingabe des Zuges
int Zug ()
{
    int ZugSpalte=0;
    do
    {
    cout&lt;&lt;endl&lt;&lt;endl&lt;&lt;&quot;In welche Spalte wollen sie setzen?&quot;&lt;&lt;endl;    
    cin&gt;&gt;ZugSpalte;
    ZugSpalte=ZugSpalte-1;

//Kontrolle ob Spalte gültig
    if(ZugSpalte&lt;0 || ZugSpalte&gt;6)
      {
      cout&lt;&lt;&quot;Zahl zwischen 1 und 7 eingeben.&quot;&lt;&lt;endl;
      }
    if(Feld[0][ZugSpalte]!=' ' &amp;&amp; ZugSpalte&lt;0 || ZugSpalte&gt;6 &amp;&amp; Feld[0][ZugSpalte]!=' ')
      {
      cout&lt;&lt;&quot;Spalte ist bereits voll. Bitte andere Spalte ausw\x84hlen.&quot;&lt;&lt;endl;
      }
    }
    while(ZugSpalte&lt;0 || ZugSpalte&gt;6 || Feld[0][ZugSpalte]!=' ');

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

//Verarbeiten der Auswahl
void Verarbeiten (int ZugSpalte)   
{    
    bool Stopper=1;
    for(int i=6;i&gt;=0;)
    {   
    if(Feld [i][ZugSpalte]==' ' &amp;&amp; Stopper==1)
      {
            if (Runde % 2 == 0)
            {
               Feld [i][ZugSpalte]='x';
               Stopper=0;
            }
            else
            {
               Feld [i][ZugSpalte]='#';
               Stopper=0;                
            }     
      }
    else
      {
      i=i-1;
      }
    }
} 

//Kontrolle
int Kontrolle ()
{

//Kontrolle der Spalten
//------------------------------------------------------------------------------
    int Zeile = 0, Spalte = 0, Counter = 0;

    for (Spalte = 0; Spalte &lt;= 6; Spalte++)
        {   
        for (Zeile = 0; Zeile &lt;= 5 ;Zeile++)
            {
            if(Feld [Zeile][Spalte]=='x')
                    {
                    Counter++;        
                    }
                    else
                        {
                        Counter = 0;
                        }
            if (Counter == 4)
               {
               return 1;
               }
            }
        }            
Counter = 0;

    for (Spalte = 0; Spalte &lt;= 6; Spalte++)
        {   
        for (Zeile = 0; Zeile &lt;= 5 ;Zeile++)
            {
            if(Feld [Zeile][Spalte]=='#')
                    {
                    Counter++;        
                    }
                    else
                        {
                        Counter = 0;
                        }
            if (Counter == 4)
               {
               return 2;
               }
            }
        }
Counter = 0;
//------------------------------------------------------------------------------        

//Kontrolle der Zeilen
//------------------------------------------------------------------------------
    for (Zeile = 0; Zeile &lt;= 5 ;Zeile++)
        {   
        for (Spalte = 0; Spalte &lt;= 6; Spalte++)
            {
            if(Feld [Zeile][Spalte]=='x')
                    {
                    Counter++;        
                    }
                    else
                        {
                        Counter = 0;
                        }
            if (Counter == 4)
               {
               return 1;
               }
            }
        }            
Counter = 0;

    for (Zeile = 0; Zeile &lt;= 5 ;Zeile++)
        {   
        for (Spalte = 0; Spalte &lt;= 6; Spalte++)
            {
            if(Feld [Zeile][Spalte]=='#')
                    {
                    Counter++;        
                    }
                    else
                        {
                        Counter = 0;
                        }
            if (Counter == 4)
               {
               return 2;
               }
            }
        }
Counter = 0;
//------------------------------------------------------------------------------

//Kontrolle der Diagonalen
//------------------------------------------------------------------------------    
return 0;        
}
</code></pre>
<p>Es tut mir Leid das mein Problem so überhaupt nicht eingegrenzt ist aber ich weis halt echt nicht wie ich das machen soll. hab zwar schon folgendes Probiert:</p>
<pre><code>for (Spalte = 0, Zeile = 0; Spalte &lt;= 6 &amp;&amp; Zeile &lt;= 5; Spalte++, Zeile++)
        {   
        if(Feld [Zeile][Spalte]=='x')//bzw # für den anderen Spieler
                    {
                    Counter++;        
                    }
                    else
                        {
                        Counter = 0;
                        }
            if (Counter == 4)
               {
               return 1;
               }
        }
</code></pre>
<p>aber das kontrolliert halt nur von ganz oben rechts an....</p>
<p>Ich hoffe ihr könnt mir irgendwie helfen.</p>
<p>MfG.: Jörn G.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/312510/4-gewinnt-diagonal-nach-4-gleichen-zeichen-in-einer-reihe-absuchen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 18:46:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312510.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 06 Jan 2013 19:33:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 4-Gewinnt Diagonal nach 4 gleichen Zeichen in einer Reihe Absuchen. on Sun, 06 Jan 2013 19:33:58 GMT]]></title><description><![CDATA[<p>Hallo C++ Community,</p>
<p>Ich habe ein Problem (klar sonst würde ich keine Frage stellen ;D)</p>
<p>Ich arbeite momentan an einem 4-Gewinnst spiel, was auch soweit funktioniert bis auf den Punkt das ich es nicht schaffe in den Diagonalen nach 4 gleichen Zeichen in einer Reihe zu suchen. Da ich nicht weis was ihr alles von meinem Code braucht lade ich mal den gesamten hoch.</p>
<pre><code>#include &lt;conio.h&gt;
#include &lt;iostream.h&gt;
#include &lt;string.h&gt;
#include &lt;math.h&gt;

/*4-Gewinnt */
//------------------------------------------------------------------------------
//Globale Variablen
//Initialisieren des Feldes   
char Feld [6][7];
int Runde = 0;

//Funktionen
void FeldAnzeigen();
void Verarbeiten(int);
int Kontrolle();
int Zug();

//Hauptprogramm
int main ()
{
//Sonstige Variablen
    int Zeile, Spalte;
    int ZugSpalte=0;
    int Kontrollwert=0;

cout&lt;&lt;&quot;===============================================================================&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;================================= 4-Gewinnt ===================================&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;===============================================================================&quot;&lt;&lt;endl&lt;&lt;endl&lt;&lt;endl;

cout&lt;&lt;&quot;================================== Regeln: ====================================&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;1. Spieler 1 ist [x] Spieler 2 ist [#].&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;2. Ziel des Spieles ist es 4 Steine seiner Form in eine Reihe zu bekommen.&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;3. Erlaubt sind Diagonal, Senkrecht und Wagerecht.&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;===============================================================================&quot;&lt;&lt;endl&lt;&lt;endl&lt;&lt;endl;

    cout&lt;&lt;&quot;1 - 2 - 3 - 4 - 5 - 6 - 7&quot;;
    for (Zeile = 0; Zeile &lt;= 5 ;Zeile++)
        {   
        cout&lt;&lt;endl;
        for (Spalte = 0; Spalte &lt;= 6; Spalte++)
            {
            Feld [Zeile][Spalte]=' ';
            cout&lt;&lt;Feld [Zeile][Spalte]&lt;&lt;&quot; | &quot;;
            }
        }
do
{        
ZugSpalte = Zug ();
Verarbeiten(ZugSpalte); 
FeldAnzeigen();

Runde++;

Kontrollwert=Kontrolle();
}
while(Kontrollwert == 0);

if(Kontrollwert == 1)
{
                   cout&lt;&lt;&quot;\nSpieler 1 [x] hat gewonnen!&quot;&lt;&lt;endl;
}
else if (Kontrollwert == 2)
{
                   cout&lt;&lt;&quot;\nSpieler 2 [#] hat gewonnen!&quot;&lt;&lt;endl;
}

getch();
}

//--------------------------FUNKTIONEN-----------------------------------------
//Grafische Ausgabe des Aktuellen Feldes
void FeldAnzeigen ()
{
cout&lt;&lt;&quot;===============================================================================&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;================================= 4-Gewinnt ===================================&quot;&lt;&lt;endl;
cout&lt;&lt;&quot;===============================================================================&quot;&lt;&lt;endl;

    cout&lt;&lt;&quot;1 - 2 - 3 - 4 - 5 - 6 - 7&quot;;
    for (int Zeile = 0; Zeile &lt;= 5; Zeile++)
        {   
        cout&lt;&lt;endl;
        for (int Spalte = 0; Spalte &lt;= 6; Spalte++)
            {
            cout&lt;&lt;Feld [Zeile][Spalte]&lt;&lt;&quot; | &quot;;
            }        
        }
}

//Zug
//Eingabe des Zuges
int Zug ()
{
    int ZugSpalte=0;
    do
    {
    cout&lt;&lt;endl&lt;&lt;endl&lt;&lt;&quot;In welche Spalte wollen sie setzen?&quot;&lt;&lt;endl;    
    cin&gt;&gt;ZugSpalte;
    ZugSpalte=ZugSpalte-1;

//Kontrolle ob Spalte gültig
    if(ZugSpalte&lt;0 || ZugSpalte&gt;6)
      {
      cout&lt;&lt;&quot;Zahl zwischen 1 und 7 eingeben.&quot;&lt;&lt;endl;
      }
    if(Feld[0][ZugSpalte]!=' ' &amp;&amp; ZugSpalte&lt;0 || ZugSpalte&gt;6 &amp;&amp; Feld[0][ZugSpalte]!=' ')
      {
      cout&lt;&lt;&quot;Spalte ist bereits voll. Bitte andere Spalte ausw\x84hlen.&quot;&lt;&lt;endl;
      }
    }
    while(ZugSpalte&lt;0 || ZugSpalte&gt;6 || Feld[0][ZugSpalte]!=' ');

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

//Verarbeiten der Auswahl
void Verarbeiten (int ZugSpalte)   
{    
    bool Stopper=1;
    for(int i=6;i&gt;=0;)
    {   
    if(Feld [i][ZugSpalte]==' ' &amp;&amp; Stopper==1)
      {
            if (Runde % 2 == 0)
            {
               Feld [i][ZugSpalte]='x';
               Stopper=0;
            }
            else
            {
               Feld [i][ZugSpalte]='#';
               Stopper=0;                
            }     
      }
    else
      {
      i=i-1;
      }
    }
} 

//Kontrolle
int Kontrolle ()
{

//Kontrolle der Spalten
//------------------------------------------------------------------------------
    int Zeile = 0, Spalte = 0, Counter = 0;

    for (Spalte = 0; Spalte &lt;= 6; Spalte++)
        {   
        for (Zeile = 0; Zeile &lt;= 5 ;Zeile++)
            {
            if(Feld [Zeile][Spalte]=='x')
                    {
                    Counter++;        
                    }
                    else
                        {
                        Counter = 0;
                        }
            if (Counter == 4)
               {
               return 1;
               }
            }
        }            
Counter = 0;

    for (Spalte = 0; Spalte &lt;= 6; Spalte++)
        {   
        for (Zeile = 0; Zeile &lt;= 5 ;Zeile++)
            {
            if(Feld [Zeile][Spalte]=='#')
                    {
                    Counter++;        
                    }
                    else
                        {
                        Counter = 0;
                        }
            if (Counter == 4)
               {
               return 2;
               }
            }
        }
Counter = 0;
//------------------------------------------------------------------------------        

//Kontrolle der Zeilen
//------------------------------------------------------------------------------
    for (Zeile = 0; Zeile &lt;= 5 ;Zeile++)
        {   
        for (Spalte = 0; Spalte &lt;= 6; Spalte++)
            {
            if(Feld [Zeile][Spalte]=='x')
                    {
                    Counter++;        
                    }
                    else
                        {
                        Counter = 0;
                        }
            if (Counter == 4)
               {
               return 1;
               }
            }
        }            
Counter = 0;

    for (Zeile = 0; Zeile &lt;= 5 ;Zeile++)
        {   
        for (Spalte = 0; Spalte &lt;= 6; Spalte++)
            {
            if(Feld [Zeile][Spalte]=='#')
                    {
                    Counter++;        
                    }
                    else
                        {
                        Counter = 0;
                        }
            if (Counter == 4)
               {
               return 2;
               }
            }
        }
Counter = 0;
//------------------------------------------------------------------------------

//Kontrolle der Diagonalen
//------------------------------------------------------------------------------    
return 0;        
}
</code></pre>
<p>Es tut mir Leid das mein Problem so überhaupt nicht eingegrenzt ist aber ich weis halt echt nicht wie ich das machen soll. hab zwar schon folgendes Probiert:</p>
<pre><code>for (Spalte = 0, Zeile = 0; Spalte &lt;= 6 &amp;&amp; Zeile &lt;= 5; Spalte++, Zeile++)
        {   
        if(Feld [Zeile][Spalte]=='x')//bzw # für den anderen Spieler
                    {
                    Counter++;        
                    }
                    else
                        {
                        Counter = 0;
                        }
            if (Counter == 4)
               {
               return 1;
               }
        }
</code></pre>
<p>aber das kontrolliert halt nur von ganz oben rechts an....</p>
<p>Ich hoffe ihr könnt mir irgendwie helfen.</p>
<p>MfG.: Jörn G.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2286985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2286985</guid><dc:creator><![CDATA[Jörn Gummels]]></dc:creator><pubDate>Sun, 06 Jan 2013 19:33:58 GMT</pubDate></item><item><title><![CDATA[Reply to 4-Gewinnt Diagonal nach 4 gleichen Zeichen in einer Reihe Absuchen. on Sun, 06 Jan 2013 19:35:12 GMT]]></title><description><![CDATA[<p>Ich meinte das geht halt nur von ganz oben Links an....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2286988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2286988</guid><dc:creator><![CDATA[Jörn Gummels]]></dc:creator><pubDate>Sun, 06 Jan 2013 19:35:12 GMT</pubDate></item><item><title><![CDATA[Reply to 4-Gewinnt Diagonal nach 4 gleichen Zeichen in einer Reihe Absuchen. on Sun, 06 Jan 2013 21:49:31 GMT]]></title><description><![CDATA[<p>Ohne deinen Code angesehen zu haben ein kleiner Tipp: Du brauchst nicht das gesamte Feld zu durchsuchen sondern nur die Geraden und Diagonalen des letzten gesetzten Steins.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2287047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287047</guid><dc:creator><![CDATA[hmpff]]></dc:creator><pubDate>Sun, 06 Jan 2013 21:49:31 GMT</pubDate></item><item><title><![CDATA[Reply to 4-Gewinnt Diagonal nach 4 gleichen Zeichen in einer Reihe Absuchen. on Sun, 06 Jan 2013 21:59:52 GMT]]></title><description><![CDATA[<pre><code>int KontrolleDiagonal()
{
	for(int Spalte=0; Spalte&lt;=6; Spalte++)
	{
		for(int Zeile=0; Zeile&lt;=5; Zeile++)
		{
			int Counter=0;

			for(int x=Spalte, y=Zeile; x&lt;=6 &amp;&amp; y&lt;=5; x++, y++) //nach rechts unten
			{
				if(Feld[y][x]=='x')
				{
					Counter++;
				}
			}
			if(Counter&gt;=4)
				return 1;

			Counter=0;
			for(int x=Spalte, y=Zeile; x&gt;=0 &amp;&amp; y&lt;=5; x--, y++) //nach links unten
			{
				if(Feld[y][x]=='x')
				{
					Counter++;
				}
			}
			if(Counter&gt;=4)
				return 1;
		}
	}

	return 0;
}
</code></pre>
<p>Sollte so gehen. Du gehts einfach alle Felder durch und prüfst dabei von jedem aus nach links und rechts diagonal. Mag nicht die effizienteste Lösung sein aber es ist eine <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>Und nur mal so als Tipp, du solltest den Kontrollcode in eine extra Methode packen und ihr beim Aufrufen sagen welcher Spieler es ist und auf welches Zeichen geprüft wird, dann hast du den ganzen Kontrollcode nicht doppelt <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2287054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2287054</guid><dc:creator><![CDATA[DarkShadow44]]></dc:creator><pubDate>Sun, 06 Jan 2013 21:59:52 GMT</pubDate></item></channel></rss>