Hehe, an 4 Gewinnt sitze ich auch gerade um SDL kennen zu lernen.
Also ohne Code zu posten erklär ich einfach was ich mache, das solltest du dann ziemlich gut selber hinbekommen.
Du rufst deine Eingabefunktion mit der ausgewählten Spalte als Parameter auf, was dir fehlt ist die passende Reihe, um schließlich einen Spielstein zu setzen. Dieser soll natürlich ganz nach unten fallen. Da Du dein Spielfeldarray ja schon mit 0 initialisiert hast nehme ich an, dass diese ein leeres Feld repräsentieren soll. Dann kannst du 1 und 2 für Spieler 1 und 2 setzen.
Zur Bestimmung der Reihe. Mit einer Schleife kannst du von unten (also spielfeld[spalte][anzahlreihe-1] nach oben durchsehen, und wenn dort 0 steht den Stein setzen. Wenn das Feld !=0 steht da schon ne 1 oder 2, das Feld ist besetzt, und du nimmst dir das nächst höhere. Bist du ganz oben angekommen und hast noch kein freies Feld gefunden muss eine neue Spalteneingabe gemacht werden, und die Funktion muss erneut durchlaufen.
Ein Tipp zur Überprüfung: "0" als leeres Feld zu wählen ist sehr sinnvoll, da "0" als FALSE gewertet wird, alles andere als TRUE.
Code: Alles auswählen
if(!(spielfeld[y][x])) //TRUE wenn frei
stein setzen;
else
schleifendurchgang abbrechen, und nächste reihe versuchen.
Aber nun: muss da jetzt eine 1 oder eine 2 rein?
Ich mache das so, dass ich eine Variable c=0 als Counter angelegt habe, die mit sagt in welcher Runde ich bin. Dafür muss nachdem ich einen Stein gesetzt habe c inkrementieren.
c%2 liefert immer 0 oder 1, d.h. mit (c%2 + 1) immer 1 oder 2, und das ist genau das was in das Feld muss.
Danach wie gesagt c++; und die nächste Runde mit dem anderen Spieler ist dran. Die eigentliche Spielschleife fehlt dir ja noch, aber danach hast du ja auch nicht gefragt.
Übrigens ist ein Array, wenn ich das richtig verstehe immer mit [y][x] definiert, also in deinem Fall [spalte][reihe]. Das ist zwar nur Definitionssache, war aber bei mir immer ein Punkt, bei dem ich jedesmal überlegen musste, bzw kompilieren und dann tauschen. Gehen tut beides, aber du kannst deine Ausgabefunktion vereinfachen, indem du eine äußere und eine innere For-Schleife nimmst. also statt
Code: Alles auswählen
printf (" | %c | ", spielfeld[i][0]);
printf ("%c | ", spielfeld[i][1]);
printf ("%c | ", spielfeld[i][2]);
printf ("%c | ", spielfeld[i][3]);
printf ("%c | ", spielfeld[i][4]);
printf ("%c | ", spielfeld[i][5]);
printf ("%c | \n", spielfeld[i][6]);
kannst du auch eine zweite Schleife laufen lassen, in der du j (als zweite Zählvariable von 0 bis 6 laufen lässt und auf das Feld
[j] zugreifst.
Da printf und jeder Drucker zeilenweise und nicht spaltenweise ausgibt, spielt hier die richtige Reihenfolge nun doch eine Rolle.
Im Übrigen findest du hier im Allegro-Tutorial (unter Spieleprogrammierung) auch ein 4 Gewinnt. Das ist zwar in C++, und mit Grafikausgabe, aber für die Spielelogik auch in deinem Fall einen Blick wert. Naja, IMMER einen Blick wert, aber in deinem Fall auch von praktischem Wert.
Wünsche noch viel Erfolg...