[C++] Probleme mit der Rückgabe

CodeCrafterCpp

Erfahrenes Mitglied
Hallo,
Ich hab mal wieder ein Problem und nach knapp 1 Stunde habe ich mich entschlossen euch zu fragen. Mein Problem liegt bei der Funktion gewinnPruf und der Rückgabe von gewinn.

Code:
#include <iostream>
#include <conio.h>
#include <Windows.h>
 
using namespace std;
 
void Render(char *f);
char Setzen(char eingabe, char *f, bool player_turn, char zeichen);
int gewinnPruf(char *f, int gewinn, bool player_turn);
void neuesSpiel(int gewinn, char eingabe);


int main()
{
    //********************************************//
    //Variablen
    //********************************************//
    bool player_turn = true;
    int gewinn = 0;
    char ki;
	char zeichen = ' ';
    char eingabe = ' ';
    bool exit = false;
    char f[9];
    for(int i = 0; i < 9; i++)
    {
        f[i] = i+'1';
    }
 
    cout << "TicTacToe" << endl;
    cout << "Waehle eine Spiel Modus aus:" << endl
         << "0: mehr Spieler Modus" << endl
         << "1: gegen Computer einfach" << endl
         << "2: gegen Computer schwerer als einfach" << endl
         << "3: gegen Computer mittel" << endl
         << "4: gegen Computer leichter als schwer" << endl
         << "5: gegen Computer schwer" << endl;
    ki = getch();
 
 
    //********************************************//
    //Game_Loop
    //********************************************//
	
        
        if(ki == '0')
        {
        while(!exit)
        {
                system("cls");
                Render(f);
                Setzen(eingabe, f, player_turn, zeichen);
				gewinnPruf(f, gewinn, player_turn);
				neuesSpiel(gewinn, eingabe);
				cout << gewinn;
				getch();
				player_turn = !player_turn;
 
            }
        }
        else if(ki == '1')
        {
            while(!exit)
            {
 
            }
        }
        else if(ki == '2')
        {
            while(!exit)
            {
 
            }
        }
        else if(ki == '3')
        {
            while(!exit)
            {
 
            }
        }
        else if(ki == '4')
        {
            while(!exit)
            {
 
            }
        }
        else if(ki == '5')
        {
            while(!exit)
            {
 
            }
        }
 
 
 
    return 0;
}
 
 
 
void Render(char *f)
{
	for(int i = 1; i <=9; i++)
	{
		cout << f[i - 1];
		if(!(i % 3)) cout << endl << "-+-+-" << endl;
		else cout << "|";
	}
}
char Setzen(char eingabe, char *f, bool player_turn, char zeichen)
{

	if(player_turn)
	{
		cout << "Spieler 1 ist dran. Bitte waehle ein Feld: ";
		zeichen = 'x';
	}
	if(!player_turn)
	{
		cout << "Spieler 2 ist dran. Bitte waehle ein Feld: ";
		zeichen = 'o';
    }
    eingabe = getch();


	while(true)
	{
		int zahl = eingabe - 49;
		if(eingabe >= 49 && eingabe <= 57)
		{
			if(f[zahl] == eingabe)
			{
				f[zahl] = zeichen;
				system("cls");
				Render(f);
				break;
			}
			else
			{
				system("cls");
				Render(f);
				cout << "Dieses Feld ist besetzt. Waehle ein neues: ";
				eingabe = getch();
			}
		}
		else
		{
			system("cls");
			Render(f);
			cout << "Flasche Eingabe" << endl
				 << "Waehle ein neues Feld: ";
			eingabe = getch();
		}
	}
    return eingabe, *f, zeichen;
}
int gewinnPruf(char *f, int gewinn, bool player_turn)
{
	
	int c;
	for(c = 0;c<=8;c++)
	{
		if(f[ c]==f[c+1]&&f[c+1]==f[c+2])
		{
			if(player_turn)gewinn=1;
			if(!player_turn)gewinn=2;
		}
		else if(f[ c]==f[c+3]&&f[c+3]==f[c+6])
		{
			if(player_turn)gewinn=1;
			if(!player_turn)gewinn=2;
		}
		else if(f[0]==f[4]&&f[4]==f[8])
		{
			if(player_turn)gewinn=1;
			if(!player_turn)gewinn=2;
		}
		else if(f[2]==f[4]&&f[4]==f[6])
		{
			if(player_turn)gewinn=1;
			if(!player_turn)gewinn=2;
		}
		else if( f[0] != '1' && f[1] != '2' && f[2] != '3' &&
				 f[3] != '4' && f[4] != '5' && f[5] != '6' &&
				 f[6] != '7' && f[7] != '8' && f[8] != '9' )
		{
			gewinn = 3;
		}
	}
	return gewinn;
}

void neuesSpiel(int gewinn,char eingabe)
{
	if(gewinn == 1 || gewinn == 2)
	{
		system("cls");
		cout << "Spieler "<< gewinn << " hat gewonnen!" << endl << "Neues Spiel?(Y für Ja und N für Nein)";
		getch();
	}

}

Ich höffe der Fehler ist nicht ganz zu doof :)

mfG
 
Du gibst bei der Funktion zwar gewinn zurück, speicherst den Wert im main() aber nicht!

Code:
 while(!exit)
        {
                system("cls");
                Render(f);
                Setzen(eingabe, f, player_turn, zeichen);
                gewinnPruf(f, gewinn, player_turn);
                neuesSpiel(gewinn, eingabe);
                cout << gewinn;
                getch();
                player_turn = !player_turn;
 
            }
        }

Wie du hier siehst, wird nur die Funktion ausgeführt, der Wert von gewinn wird aber nirgends gespeichert.

Du müsstest schreiben:

Code:
while(!exit)
        {
                system("cls");
                Render(f);
                Setzen(eingabe, f, player_turn, zeichen);
                gewinn = gewinnPruf(f, gewinn, player_turn);   // gewinn den Rückgabewert der Funktion zuweisen!
                neuesSpiel(gewinn, eingabe);
                cout << gewinn;
                getch();
                player_turn = !player_turn;
 
            }
        }
 
Zurück