Tic - Tak -Toe



  • Erstens: Ein Parameter kann nicht "extern" sein (betrifft den Prototyp von zeigezug).

    Zweitens: Such dir ein gutes Buch über C und mach dir klar, wie eine Funktion aufgerufen werden muß (insbesondere muß man an die Funktion auch Parameter übergeben).



  • ach ja, das habe ich ganz vergessen ... ich habe jetzt in jede funktion feld[i] geschrieben, da jede funktion feld[i] braucht und zurückgeben muss. human() soll später auch den wert feld[i] zurückgeben, das mache ich aber erst, wenn der rest ok ist.

    #include <stdio.h>
    #include <time.h> // für rand(time(null))
    #include <stdlib.h>  // für rand
    
    int KI(char feld[9]) {
    int i;
    i=rand()%10;
    feld[i];
    
    if (xodero%2) {
     feld[i]='X';
    }
    
    else {
     feld[i]='O';
    }
    
    xodero++;
    return feld[i];
    
    }   // schließt KI
    
    int zeigezug(extern char feld[9]) {
    
      printf("     A  | B  | C  |");  
      printf("   +----+----+----+");
      printf(" 1 | %f | %f | %f |",feld[0],feld[1],feld[2]);
      printf("   +----+----+----+");
      printf(" 2 | %f | %f | %f |",feld[3],feld[4],feld[5]);
      printf("   +----+----+----+");
      printf(" 3 | %f | %f | %f |",feld[6],feld[7],feld[8]);
      printf("   +----+----+----+\n");
    
    // === HIER MUSS GEGUCKT WERDEN OB ALLE FELDER VOLL SIND, WENN JA SOLL BOOL EIN FALSH WERT AN DIE SCHLEIFE ZURÜCK GEBEN.
    
    }
    
    int human() {
    printf ("Humannnnnn");
    }
    
    int main() {
     int x,wahl;
     printf ("Gegen wen wollen Sie Spielen?:\n 1. Human vs. Human\n 2. Human vs. KI\n 3. KI vs. KI");
     scanf ("%f",&wahl); // ist das & richtig, oder zeigt es jetzt auf ein Speicher?
                        // "pointer" haben mich durcheinander gebracht :D
    
      switch(wahl) {
         case 1:
            int human(feld[i]);
            int zeigezug(feld[i]);
            x--;
         break;
    
         case 2:
            int human(feld[i]);
            int zeigezug(feld[i]);
            int KI(feld[i]);
            int zeigezug(feld[i]);
            int human(feld[i]);
            int zeigezug(feld[i]);
            int KI(feld[i]);
            int zeigezug(feld[i]);
            int human(feld[i]);
            int zeigezug(feld[i]);
            int KI(feld[i]);
            int zeigezug(feld[i]);
            int human(feld[i]);
            int zeigezug(feld[i]);
            int KI(feld[i]);
            int zeigezug(feld[i]);
            int human(feld[i]);
            int zeigezug(feld[i]);
          break;
    
         case 3:
           int KI(feld[i]);
           int zeigezug(feld[i]);
         break;
    
    default:
         printf ("ungültige option");
    }
    
    return 1;
    }
    


  • oh, ich habe große scheiße geschrieben. Ich werde mich morgen nochmal melden 😞



  • http://www.pronix.de/pronix-4.html
    das liest du jetzt von vorne bis hinten.

    und wenn du dir persoenlich einen gefallen tun willst, schreibst du dein programm neu.



  • Also, ich werde das ganz bestimmt kein 3 mal lesen. Ausserdem habe ich noch das buch "C - Programmieren von anfang an "gelesen. Kannst du/ihr mir nicht villeicht genauere Anweißungen geben? So in der art als würdet ihr mich beauftragen? Um so mehr fest ist umso weniger kann ich falsch machen. Das wäre echt super nett.



  • du willst lernen, oder?
    also kommst du an einem mindestmass an aufwand nicht vorbei.
    dazu gehoert auch, seine programme zu verstehen. besonders deine funktionsaufrufe sind falsch. CStoll hat dir mehrmals gesagt, was du falsch machst. ueberlies ihn doch bitte nicht so beharrlich.



  • Er hat z.B. geschrieben:

    Zweitens: Im Hauptprogramm mußt du die Funktionen AUFRUFEN, nicht neu deklarieren.

    Ich verstehe, dass ich die int´s vor den funktionen in dem main-teil weglassen soll, aber wenn ich das tue (ich habe das ja auch ohne int gelernt), kommen plotzlich 100 fehler mehr. Daraus kann man wohl schließen, dass die ints da stehen müssen, warum soll ich die dan wegmachen?
    mein verstand sagt mir auch, dass ich funktion(); schreiben muss und nicht int funktion(), aber mein compiler (gcc) meckert ....



  • noname34 schrieb:

    Er hat z.B. geschrieben:

    Zweitens: Im Hauptprogramm mußt du die Funktionen AUFRUFEN, nicht neu deklarieren.

    Ich verstehe, dass ich die int´s vor den funktionen in dem main-teil weglassen soll, aber wenn ich das tue (ich habe das ja auch ohne int gelernt), kommen plotzlich 100 fehler mehr. Daraus kann man wohl schließen, dass die ints da stehen müssen, warum soll ich die dan wegmachen?
    mein verstand sagt mir auch, dass ich funktion(); schreiben muss und nicht int funktion(), aber mein compiler (gcc) meckert ....

    falsch.
    daraus schliesst man, dass man 100 fehler gemacht hat.
    es heisst funktion(); ohne typ davor, wenn du funktion() aufrufen willst.
    dein gcc meckert wegen etwas anderem: zu strikte compilerflags, MEHR fehler im programm, kosmische strahlung,...



  • Danke erstmal, dass du mir geantwortet hast (ich weiß, dass es manchmal so wirkt als würde ich es nicht ernst meinen).

    dein gcc meckert wegen etwas anderem: zu strikte compilerflags, MEHR fehler im programm, kosmische strahlung,...

    Ich habe 0 ahnung was ich falsch machen. Parameter habe ich doch angegeben.

    Kannst du/ihr mir nicht villeicht genauere Anweißungen geben? So in der art als würdet ihr mich beauftragen? Um so mehr fest ist umso weniger kann ich falsch machen. Das wäre echt super nett.

    + + + + + + + + + + + + +

    und wenn du dir persoenlich einen gefallen tun willst, schreibst du dein programm neu.

    ??????
    ?????



  • *push*



  • also zu erst machst du funktionsaufrufe ohne typ davor. was an fehlern uebrig bleibt, arbeitest du fehler fuer fehler ab und probierst nach jedem fehler zu kompilieren.

    mit einer kompletten neufassung wuerdest du dir selbst aber einen gefallen tun. aber schreib dann nicht einfach das programm runter und hoffe dass es kompiliert. schreibe ein stueck und teste, ob es noch wie erwartet funktioniert. dann nochmal was hinzufuegen, nochmal testen, usw...



  • *push*



  • was willst du noch, verdammt?!?



  • Ich will doch nur eine GENAUE AUFGABENSTELLUNG. Ist das den so schwer?



  • aufgabenstellung also?
    schreibe ein tic-tac-toe programm, welches kompiliert.

    du hast jetzt zwei moeglichkeiten. waehle eine:

    * erstmal entfernst du die typen bei jedem funktionsaufruf. damit meine ich, dass du von "int funktion(param, param, param);" das "int " davor entfernen sollst.

    * du faengst bei null an und erweiterst in kleinen schritten, bis du das gewuenschte ergebnis hast. dabei pruefst du penibel nach jeder aenderung, ob das programm noch wie erwartet funktioniert.

    #include <stdio.h>
    
    int main(void)
    {
        puts("Hallo Welt!");
        return 0;
    }
    

Anmelden zum Antworten