Mit Esc Programm beenden || Tipps für Ki?

Also für mich hört sich das mit den Thread auch besser an weil das übersichtlicher ist.


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);
char kiSetzen(char eingabe, char *f, bool player_turn, char zeichen, int kiEingabe, int ki);
int gewinnPruf(char *f, int gewinn, bool player_turn);
int neuesSpiel(int gewinn, char eingabe, char *f);
char meneu(char ki);
void gameloop(bool player_turn, int gewinn, char ki, char zeichen, char eingabe, bool exit, char *f);
int kiEingabe(char *f, int ki, char eingabe);


int main()
{
    //********************************************//
    //Variablen
    //********************************************//
    bool player_turn = 0;
    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';
    }
	ki = meneu(ki);
	gameloop(player_turn, gewinn, ki, zeichen, eingabe, exit, f);

	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;
}
char kiSetzen(char eingabe, char *f, bool player_turn, char zeichen, int kiEingabe, int ki)
{

	if(player_turn)
	{
		zeichen = 'x';
		cout << "Spieler 1 ist dran. Bitte waehle ein Feld: ";
		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();
		}
	}

	if(!player_turn)
	{
		zeichen = 'o';
		int zahl = kiEingabe(f, ki, eingabe);
		f[zahl] = zeichen;
	}
    return *f;
}
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;
}
int neuesSpiel(int gewinn,char eingabe, char *f)
{
	while(true)
	{
	if(gewinn == 1 || gewinn == 2)
	{
		system("cls");
		cout << "Spieler "<< gewinn << " hat gewonnen!" << endl << "Neues Spiel?(Y fuer Ja und N fuer Nein)";
		eingabe = getch();
		if(eingabe == 'Y'|| eingabe == 'y')
		{
			gewinn = 0;
			for(int i = 0; i < 9; i++)
			{
				f[i] = i+'1';
			}


			break;
		}
		else if( eingabe == 'N' || eingabe == 'n')
		{
			exit(0);
		}
	}
	else if(gewinn == 3)
	{

	}
	else
	{
		break;
	}
	}
	return gewinn;
}
char meneu(char ki)
{
	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();
 
	return ki;
}
void gameloop(bool player_turn, int gewinn, char ki, char zeichen, char eingabe, bool exit, char *f)
{

	    if(ki == '0')
        {
        while(!exit)
        {
                system("cls");
                Render(f);
                Setzen(eingabe, f, player_turn, zeichen);
				gewinn = gewinnPruf(f, gewinn, player_turn);
				gewinn = neuesSpiel(gewinn, eingabe, f);
				player_turn = !player_turn;
            }
        }
        else if(ki == '1')
        {
            while(!exit)
            {
				system("cls");
				Render(f);

            }
        }
        else if(ki == '2')
        {
            while(!exit)
            {
 
            }
        }
        else if(ki == '3')
        {
            while(!exit)
            {
 
            }
        }
        else if(ki == '4')
        {
            while(!exit)
            {
 
            }
        }
        else if(ki == '5')
        {
            while(!exit)
            {
 
            }
        }
 
 
 

}
int kiEingabe(char *f, int ki, char eingabe)
{

	return eingabe;
}



PS: Was ist hier schon wieder für ein Fehler?

Code:
	if(!player_turn)
	{
		zeichen = 'o';
		int zahl = kiEingabe(f, ki, eingabe);
		f[zahl] = zeichen;
	}
 
Wenn ich mir die Funktion kiEingabe() ansehe, tut die ja nichts, außer eingabe zurückzugeben. Und eingabe ist ein char und bekommt den Rückgabewert von getch(), bevor kiEingabe() aufgerufen wird. Das heißt in eingabe steht eine Zahl als Zeichen (z.B.: '2'). Wenn du das in ein int konvertierst, wird in dem int der ASCII-Code des Zeichens abgespeichert, der bei einer Zahl glaube ich so um 50 herum liegt. Das Array f hat nur 9 Element und in zahl steht ein Wert um 50, das ist das Problem.

Lg
 
@ ibafluss: Das wollte ich auch noch machen. Aber das ist nicht mein Fehler!

Ich bekomme den Error: 1 IntelliSense: Der Ausdruck muss einen (pointer-to-)Funktionstyp aufweisen. c:\users\zensur\desktop\alles\ent\tictactoemitki\tictactoemitki\main.cpp 138

mfG
 
Das Problem ist, dass du eine Variable namens kiEingabe ebenfalls der Funktion kiSetzen() übergibst. Die Variable benötigst du aber nicht, streich das einfach und das Problem ist erledigt.

Lg
 
Achso Danke wie doof von mir :D
Jetzt möchte ich eben nochmal das Thema Thread aufnehmen. Und zwar hab ich überhaupt keine Ahnung wie ich die erstelle und wollte mal fragen ob ich gutes Tut habt bzw. wie man msdn verstehen soll da ich dort garnichts verstehe.
 
Zurück