TicTacToe in C



  • Hallo zusammen. Ich studiere seit ein paar Monaten Wirtschaftsinformatik und dabei lernen wir die Sprache C. Hab zu diesem Zweck spaßeshalber mal TicTacToe programmiert und stelle mir jetzt die Frage wie ich es hinbekomme, dass der Computer bei seinen Zügen schneller ist und nach mehreren Durchgängen keine halbe Ewigkeit benötigt seinen Zug zu machen?? Ich glaube die Art wie ich es programmiert habe ist etwas umständlich aber wie gesagt ich lerne ja noch. Würde mich über ein paar hilfreiche Tipps freuen. Hier ist mein code:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    int main()
    {
    system("color 7C");
    int i = 0, j = 0;
    char spiel[3][3] = {{32, 32, 32},{32, 32, 32},{32, 32, 32}};

    while(1){
    printf(" 0 1 2\n +-----+-----+-----+\n");
    printf("0 | %c | %c | %c |\n", spiel[0][0], spiel[0][1], spiel[0][2]);
    printf(" +-----+-----+-----+\n");
    printf("1 | %c | %c | %c |\n", spiel[1][0], spiel[1][1], spiel[1][2]);
    printf(" +-----+-----+-----+\n");
    printf("2 | %c | %c | %c |\n", spiel[2][0], spiel[2][1], spiel[2][2]);
    printf(" +-----+-----+-----+\n");

    if((spiel[0][0] == 'O' && spiel[0][1] == 'O' && spiel[0][2] == 'O') || (spiel[1][0] == 'O' && spiel[1][1] == 'O' && spiel[1][2] == 'O') || (spiel[2][0] == 'O' && spiel[2][1] == 'O' && spiel[2][2] == 'O') || (spiel[0][0] == 'O' && spiel[1][1] == 'O' && spiel[2][2] == 'O') || (spiel[0][0] == 'O' && spiel[1][0] == 'O' && spiel[2][0] == 'O') || (spiel[0][1] == 'O' && spiel[1][1] == 'O' && spiel[2][1] == 'O') || (spiel[0][2] == 'O' && spiel[1][2] == 'O' && spiel[2][2] == 'O'))
    {
    printf("Glueckwunsch. Der Computer hat gewonnen!\n");
    break;
    }
    if((spiel[0][0] != 32) && (spiel[0][1] != 32) && (spiel[0][2] != 32) && (spiel[1][0] != 32) && (spiel[1][1] != 32) && (spiel[1][2] != 32) && (spiel[2][0] != 32) && (spiel[2][1] != 32) && (spiel[2][2] != 32))
    {
    printf("\nUnentschieden!\n");
    break;
    }
    printf("Spieler X ist an der Reihe.\n");
    printf("Zeile:");
    fflush(stdin);
    scanf("%i", &i);
    printf("\nSpalte:");
    fflush(stdin);
    scanf("%i", &j);

    if(spiel[i][j] == 'O' || spiel[i][j] == 'X')
    {
    while((spiel[i][j]) != 32)
    {
    printf("\nFehler: Dieses Feld ist schon belegt!\n");
    printf("Zeile:");
    fflush(stdin);
    scanf("%i", &i);
    printf("\nSpalte:");
    fflush(stdin);
    scanf("%i", &j);
    }
    spiel[i][j] = 88;
    }
    else
    spiel[i][j] = 88;

    system("pause");
    system("cls");

    printf(" 0 1 2\n +-----+-----+-----+\n");
    printf("0 | %c | %c | %c |\n", spiel[0][0], spiel[0][1], spiel[0][2]);
    printf(" +-----+-----+-----+\n");
    printf("1 | %c | %c | %c |\n", spiel[1][0], spiel[1][1], spiel[1][2]);
    printf(" +-----+-----+-----+\n");
    printf("2 | %c | %c | %c |\n", spiel[2][0], spiel[2][1], spiel[2][2]);
    printf(" +-----+-----+-----+\n");

    if((spiel[0][0] == 88 && spiel[0][1] == 88 && spiel[0][2] == 88) || (spiel[1][0] == 88 && spiel[1][1] == 88 && spiel[1][2] == 88) || (spiel[2][0] == 88 && spiel[2][1] == 88 && spiel[2][2] == 88) || (spiel[0][0] == 88 && spiel[1][1] == 88 && spiel[2][2] == 88) || (spiel[0][0] == 88 && spiel[1][0] == 88 && spiel[2][0] == 88) || (spiel[0][1] == 88 && spiel[1][1] == 88 && spiel[2][1] == 88) || (spiel[0][2] == 88 && spiel[1][2] == 88 && spiel[2][2] == 88))
    {
    printf("Glueckwunsch. Spieler X hat gewonnen!\n");
    break;
    }
    if((spiel[0][0] != 32) && (spiel[0][1] != 32) && (spiel[0][2] != 32) && (spiel[1][0] != 32) && (spiel[1][1] != 32) && (spiel[1][2] != 32) && (spiel[2][0] != 32) && (spiel[2][1] != 32) && (spiel[2][2] != 32))
    {
    printf("\nUnentschieden!\n");
    break;
    }
    printf("Der Computer ist an der Reihe.\n");
    {
    time_t t;
    time(&t);
    srand((unsigned int)t);
    i = rand() % 2;
    j = rand() % 2;

    if(spiel[i][j] != 32)
    {
    while((spiel[i][j]) != 32)
    {
    time(&t);
    srand((unsigned int)t);
    i = rand() % 2;
    j = rand() % 2;
    }
    spiel[i][j] = 'O';
    }
    else
    spiel[i][j] = 'O';
    }
    system("pause");
    system("cls");
    }
    }



  • Keine Lust diesen unformatierten Müll durchzukauen.
    Benutze mal bitte Code-Tags und schreibe in ein paar Sätzen deine Vorgehensweise. Macht das lesen und verstehen fremden Codes erheblich einfacher.



  • Nicht immer neuen random-seed setzen in der Schleife!

    srand((unsigned int)t);

    Nur einmal initial bei Programmstart.
    Dann gehts auch schneller wenn der PC an der Reihe ist weil dann nicht nur im Sekundentakt neue "Zufallszahlen" kommen



  • Passt irgendwie zur Wirtschaftskrise...



  • TGGC schrieb:

    Passt irgendwie zur Wirtschaftskrise...

    "Glueckwunsch. Der Computer hat gewonnen!" 😃


Anmelden zum Antworten