4-gewinnt c#-Konsolen Spiel als ANFÄNGER // Hilfe gesucht

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Octupa
Beiträge: 1
Registriert: So Mär 27, 2022 4:38 pm

4-gewinnt c#-Konsolen Spiel als ANFÄNGER // Hilfe gesucht

Beitrag von Octupa » So Mär 27, 2022 4:57 pm

Hallo zusammen,
ich weiß es gibt unzählige Foren im Internet mit verschiedenen Codes dazu, aber ich möchte meinen eigenen enztwickeln und vorallem möchte ich die Logik dahinter verstehen.
Ich bin absolute Anfängerin und es fällt mir noch sehr schwer diese Sprache zu verstehen.
Außerdem will ich nicht, dass mir jemand diesen Code schreibt, sondern mir hilft, wie ich es besser machen kann und warum das Programm nicht funktioniert.

Kurz zu mir ( es kann ja sein, dass mein Lehrer auch mitliest) :geek: : Ich bin auf einer Abendschule und mache nebenberuflich meinen Techniker für Elektrotechnik. C#-Programmieren ist eben eines der Fächer, welches man hat.


Bisher kann ich das Spielfeld darstellen, allerdings wechselt er nicht den Spieler und sobald die erste Zeile voll ist, geht er zwar in die zweite, aber danach ändert er nichts mehr.
Ich denke, da ist etwas am Aufruf der Funktionen nicht ganz richtig? Hab gedacht, dass ich sobald ich zeile++ rechne, er dauerhaft weiterzählt. Für die Spaltenfüllung gibt es ein zweites int-Array, dass mir am Ende einfach sagen soll, ob die Spalte voll ist oder nicht.
Bitte nicht verunsichern lassen, weil meine Bedingungen unten immer richtig sind. Ich versuche mich Schritt für Schritt zu einer Lösung zu programmieren, die am Ende funktioniert.
Es sei dabei zu sagen, dass wir bisher nur Funktionen wie Schleifen hatten und if Bedingungen. Das nächste sind nunmehr die Funktionen und Aufrufe, um das Programm zu kürzen etc.
Bei diesen Dingen sollte es möglichst auch bleiben.


Ich hoffe ich bin hier richtig und jemand ist bereit mir zu helfen. Für viele sind die Fragen wahrscheinlich lächerlich und einfach, aber ich bin eben Anfänger.
Vielen Dank schonmal!
Hier mein bisheriger Code :

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
//Erst die zeilen, dann die spalten
char spielfeld [6] [7] = {{' ',' ',' ',' ',' ',' ',' '},
                          {' ',' ',' ',' ',' ',' ',' '},
                          {' ',' ',' ',' ',' ',' ',' '},
                          {' ',' ',' ',' ',' ',' ',' '},
                          {' ',' ',' ',' ',' ',' ',' '},
                          {' ',' ',' ',' ',' ',' ',' '}
                          };

int Feld [6] [7];

void Spielregeln(void)
{
    printf("Herzlich Willkommen beim Spiel 4-Gewinnt!\n\n\n");
    printf ("Spieler 1 bekommt das Zeichen X und Spieler 2 hat das Zeichen O!\n");
    printf ("Es muss immer jeweils eine Spalte gewählt werden, in welcher ihr setzen wollt!\n");
    printf("Sobald ein Spieler 4 gleiche Zeichen vertikal,horizontal oder diagonal gesetzt hat,\nhat der Spieler gewonnen!\n");
    printf ("Los geht's!\n\n\n\n");
    printf("Hier ist das Spielfeld :\n\n\n");
    printf("\t\t  1   2   3   4   5   6   7\n\n");


}
void grafik (void)
{
    int i=0;
    int j=0;
    for (i=6;i>=0;i--) //Wiederholen der Darstellung aller Zeilenreihen // hochzählen, damit er in Einwurf unten anfängt
    {
        printf("\t\t");

        for (int j = 0; j<= 6; j++) //Darstellen aller Spalten einer Zeile
        {
        printf("| %c ", spielfeld[i][j]);
        }

        printf("|\n");              //Abschlussstrich einer jeden Zeile
        printf("\t\t-----------------------------");    //Unterstriche unter jeder Zeile
        printf("\n");                                   // Schleife geht von vorne los
    }
    printf("\n");
}
void spielerwahl(void)
{

}

int feldvoll(void)
{
  return 1;
}

void einwurf(int spieler)
{
int spalte =0;
int zeile =0;
char coin;
int i;

printf("Spieler %i, du bist dran\n", spieler);
printf("Bitte gib deine Spalte an\n");

if (spieler == 1) //Wenn Spielernummer gleich 1 ist (Vergleich)
{
    coin = 'X';         //Char-Zeichen ist das X
}
else                    //ansonsten
{
    coin = 'O';         // wenn Spieler nicht 1 ist, ist das Char-Zeichen O
}
scanf ("%i" ,&spalte); // Spaltennummer wird abgefragt

if (Feld [zeile][spalte] == 1 ) //Abfrage ob im Feld was drin ist , d.h. wenn die in der Zeile, in der jeweiligen Spalte  etwas ist,...
{
 zeile++;                       //Addiert er auf die Variable Zeile 1 drauf, um sicherzustellen, dass die Variable an der Stelle belegt ist
}

spielfeld [zeile][spalte]=coin; // Variable Spielfeld wird an der jeweiligen Spaltenstelle mit dem Coin belegt
Feld [zeile] [spalte] =1;        // Das Int-Array bekommt an der ausgewählten Spalte den Wert 1
Feld [zeile+1] [spalte];

grafik ();                      //Funktion Grafik wird aufgerufen
spielerwechsel (spieler);
}

int gewinn (void)
{
  return 1;
}

void spielerwechsel(spieler)

{

    if (spieler ==1)
    {
    spieler=2;
    }
    else
    {
    spieler=1;
    }
}


int main()
{
  int ende;
  int spieler=1;
                //Füllen des Spielfeldes mit Leerzeichen
  Spielregeln();            //Anzeige Regeln und Spielfeld
  grafik();
  spielerwahl();
  while (ende <= 3)
  {
      einwurf (1);
     // grafik();
      ende = gewinn();
      ende = feldvoll();
      spielerwechsel();
  }

}

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: 4-gewinnt c#-Konsolen Spiel als ANFÄNGER // Hilfe gesucht

Beitrag von nufan » So Mär 27, 2022 6:06 pm

Hallo :)

Bist du dir sicher, dass du C# programmierst? :D Der von dir gepostete Code ist in C geschrieben.

Ich bin den Code nicht vollständig durchgegangen, habe aber schon ein paar grundlegende Probleme entdeckt:

Code: Alles auswählen

void spielerwechsel(spieler)
{
    if (spieler ==1)
    {
    spieler=2;
    }
    else
    {
    spieler=1;
    }
}


int main()
{
    // ...
      spielerwechsel();
    // ...
}
Du übergibst beim Aufruf in "main" keine Parameter. Dein Programm kann also nicht wissen, ob du "spieler", "ende" oder irgendeine andere Variable übergeben willst. Der Parameter deiner "spielerwechsel" Funktion hat auch keinen Typ angegeben. Die Variable "spieler" innerhalb von "spielerwechsel" ist nur eine Kopie und deshalb nur in dieser Funktion gültig, eine Zuweisung ändert den Wert außerhalb dieser Funktion nicht.

Dein Compiler sollte dir zu den oben genannten Problemen auf jeden Fall Warnungen anzeigen (ich hätte teilweise auch Fehler erwartet). Diese sind Hinweise darauf, dass in deinem Code etwas falsch sein könnte. Es zahlt sich auf jeden Fall aus, da mal einen Blick darauf zu werfen.

An dieser Stelle würde ich dir auch die Seite zu Funktionen in unserem Wiki ans Herz legen:
https://www.proggen.org/doku.php?id=c:t ... :functions

Weiter habe ich mir den Code noch nicht angesehen. Ich hoffe ich konnte dir die notwendigen Ansätze liefern, dass du alleine weiterkommst :) Bei konkreten Fragen kannst du dich natürlich jederzeit wieder melden.

Antworten