c++ tic tac toe gegen komputer



  • Hallo. Ich arbeite grad an einem tictactoe spiel gegen computer und habe folgendes problem. Ich habe eine Funktion geschriebn, die zufällig ein Kreis in einem der Fälder setzt. Nur leider fängt die Funktion erst ein Kreis zu setzen, wenn cih ein zweites X gesetzt habe. Ich finde einfach das Problem nicht. Bevor hier einige gleich anfangen, wieso machst du dies nicht oder jenes nicht: ich bin ein Anfänger und mache es so gut ich es kann. Hier istder code. Das programm ist noch nicht fertig, aber es ist soweit fertig, das man in den Feldern Zeichen setzen kann.

    #include "Header.h"

    int main()
    {
    srand(time(NULL));
    Ausgabe();

    while (true)
    {

    Eingabe();
    Ausgabe();
    ComputerZug();

    }

    system("pause");
    return 0;
    }

    #include <iostream>
    #include <ctype.h>
    #include <time.h>

    using namespace std;

    char matrix[3][3] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };//Matrix mit 3mal3 Feldern, die mit Zahl 1 - 9 gefühlt werden
    char spieler = 'X'; //Zeichen für den Spieler
    char computer = 'O'; //Zeichen für Computer
    int i, j;

    void Ausgabe()//Funktion für Das Spielbrett
    {
    system("cls");//Jedes mal, wenn das Spielbrett neu ausgegeben wird, werden die vorigen Inhalte gelöscht
    cout << "\t\t\t" << "\n\n\nPraktikum 6 Tic Tac Toe Proejct.\n\n\n";
    cout << "\t\t\t" << ".---.---.---." << endl;
    cout << "\t\t\t" << "| " << matrix[0][0] << " | " << matrix[0][1] << " | " << matrix[0][2] << " | " << endl;//erste Zeile
    cout << "\t\t\t" << ":---+---+---:" << endl;
    cout << "\t\t\t" << "| " << matrix[1][0] << " | " << matrix[1][1] << " | " << matrix[1][2] << " | " << endl;//zweiteZeil
    cout << "\t\t\t" << ":---+---+---:" << endl;
    cout << "\t\t\t" << "| " << matrix[2][0] << " | " << matrix[2][1] << " | " << matrix[2][2] << " | " << endl;//dritte Zeile
    cout << "\t\t\t" << " --- --- --- \n\n\n";
    }

    void Eingabe()//Dammit beim drücken der 1, auch das X in dem Kästchen mit der 1 erscheint. Sonst würde er bei der 2 rauskommen
    {
    int a;
    cout << "Drücke die entsprechende Zahl auf der Tastatur für die Eingabe: ";
    cin >> a;

    if (a == 1)
    {
    matrix[0][0] = spieler;
    }

    else if (a == 2)
    matrix[0][1] = spieler;
    else if (a == 3)
    matrix[0][2] = spieler;
    else if (a == 4)
    matrix[1][0] = spieler;
    else if (a == 5)
    matrix[1][1] = spieler;
    else if (a == 6)
    matrix[1][2] = spieler;
    else if (a == 7)
    matrix[2][0] = spieler;
    else if (a == 😎
    matrix[2][1] = spieler;
    else if (a == 9)
    matrix[2][2] = spieler;
    }

    void ComputerZug()
    {
    srand(time(NULL));
    int AI;
    AI = 0;

    while (AI == 0)
    {

    i = rand() % 3;
    j = rand() % 3;

    if ((matrix[i][j] == 'X') || (matrix[i][j] == 'O'))
    {
    AI = 0;
    }
    else
    {

    matrix[i][j] = 'O';
    AI++;
    }
    }

    }

    Ich habe das Programm so gut ich aknn geschrieben. Ich bin für jede hilfe dankbar.



  • Falsches Unter-Forum, hier ist C++/CLI, eine .NET Sprache. Dein Beitrag ist besser im C++ Unter-Forum aufgehoben.

    Edit:
    Ausserdem solltest du dir die Mühe machen und dein Code ein wenig leserlicher formatieren und die C++ Tags des Forums verwenden.



  • Genau es gehört nicht in's .NET forum.

    Ich werde dir trotz der Tatsache dass das Problem eigentlich sehr simpel zu lösen ist und dass es eine 'Praktikums Aufgabe' ist die Frage beantworten :

    Nachdem der Computer seinen Zug gemacht lässt du direkt wieder den echten Spieler seinen Zug machen. Also hat der AI zwar seinen Zug gemacht aber es wurde noch nicht ausgegeben (Zeile 22):

    void ComputerZug()
    {
    	srand(time(NULL));
    	int AI;
    	AI = 0;
    
    	while (AI == 0)
    	{
    
    		i = rand() % 3;
    		j = rand() % 3;
    
    		if ((matrix[i][j] == 'X') || (matrix[i][j] == 'O'))
    		{
    			AI = 0;
    		}
    		else
    		{
    			matrix[i][j] = 'O';
    			AI++;
    			Ausgabe(); // aktualisieren
    		}
    	}
    
    }
    

Anmelden zum Antworten