Längere Variable



  • Hi,

    Ich möchte ein TicTacToe Programmieren, und komme nicht weiter.

    Also ich hab ein Feld anzeigen lassen, worauf steht, welche Zahlen welche Felder sind. Das soll IMMER über dem Spielfeld stehen.

    Danach soll mit "cin" eine Eingabe gemacht werden, in einer Variable gespeichert werden, und der komplette Bildschirm neu aufgebaut werden.

    Oder gibt es eine andere möglichkeit, ohne den Bildschirm zu löschen, dass die Überschrift bleibt, aber das Spielfeld sich verändert (eingabe des pc's)

    Also ich hatte für jedes Feld (1-9) Variablen angelegt, die den Wert " ", also ein Leerzeichen enthalten. Dann weiss ich aber nicht weiter: Das Spielfeld soll in einer Variable sein, die die anderen neun Variablen erhält. Und nach jedem Zug wird diese verändert und neu Aufgebaut. Aber wie mach ich das?

    Ich hab mal was von Variablen gelesen, die in einen Block " { } " gefasst sind, aber weiss auch nicht wie die eingesetzt werden.



  • Such in Deinem Lieblings-C++-Buch/-Tutorial mal nach den Begriffen Array und Class. Das sind da die beiden Schlagworte die für dein Problem mit der "Langen Variable" helfen sollten.

    Das "selektive" Neuzeichnen des BIldschirmes ist mit Standard C++ auch nicht möglich, schau dazu am besen mal ins Konsolen oder Linux Forum je nachdem ob Du für die Windows Konsole oder Linux Codest



  • Feld: \n
    ------------- \n
    | 7 | 8 | 9 | \n
    ------------- \n
    | 4 | 5 | 6 | \n
    ------------- \n
    | 1 | 2 | 3 | \n
    ------------- \n\n
    

    Ich mein sowas.

    Wie kann ich das mit einer Klasse machen? Geht das? Also ich dachte in einer Klasse kann man Objekte anlegen und da gibts Vererbung Polymorphie u. Kapselung...

    Wie geht das jetz mit dem Array, mein Buch hilft mir auch net weiter...

    char Feld1[2] = " ";
    char Feld2[2] = " ";
    char Feld3[2] = " ";
    char Feld4[2] = " ";
    char Feld5[2] = " ";
    char Feld6[2] = " ";
    char Feld7[2] = " ";
    char Feld8[2] = " ";
    char Feld9[2] = " ";
    

    Der Code ist auch etwas unübersichtlich.

    char Spielfeld[500] =
    

    So, jetz weiss ich auch nichtmehr weiter...

    Die Variable Spielfeld enthält dann das Spielfeld.

    Dann sind dort diese "---------------" und dazwischen kommen noch diese "|"

    Aber zwischen den "|" soll dann die "Feld1" Variable...

    Das krieg ich nicht hin. Soll also eine Variable in einer anderen Variable angezeigt werden...



  • Mal ein Anriss fürs Array:

    char Spielfeld[3][3];
    
    //Mache hier alle Spielfelder =' '
    
    for(int zeile=0;zeile<=2;zeile++)
    {
      cout << "-------------" << endl;
      cout << "| " << Spielfeld[zeile][0] << " | " << Spielfeld[zeile][1] << " | " << Spielfeld[zeile][2] << " |" << endl;
    }
    cout << "-------------" << endl;
    


  • int Zeile, und dann int i 😃

    statt zeile musst'e i nehmen, dann geht's!

    Ivch wusste nicht, dass ich auch [3][3] nehmen kann



  • Statt i Zeile LOL



  • Autsch... liegt daran daß ich zuerst mit i geschrieben habe und dann wegen der lesbarkeit auf zeile geändert habe... Da übersieht man schnell was, naja, hast es ja gefunden 🙂 ich ändere das mal...



  • char Spielfeld[1][1] = { "O" };
    char Spielfeld[1][2] = { "x" };
    
    for(int zeile=0;zeile<=2;zeile++)
    {
      cout << "-------------" << endl;
      cout << "| " << Spielfeld[zeile][0] << " | " << Spielfeld[zeile][1] << " | " << Spielfeld[zeile][2] << " |" << endl;
    }
    cout << "-------------" << endl;
    

    Nur mal als bsp. ...

    Wieso gibt das ein Fehler?



  • bei der wertzuweisung für die array- elemente muß es heißen

    char blablabla[x][y] = '0';

    und entsprechend.

    soweit ich weiß jedenfalls...



  • Japp bei einem einzelnem Element aus einem Chararray muss der Wert zwischen einzelnen Hochkommata stehen ('), ein String dagegen steht zwischen doppelten Hochkommata (")



  • #include <iostream.h>
    #include <conio.h>
    #define FARBE    ( system("color 1f") )
    #define LINIE    ( cout << "-------------" << endl )
    #define CLS      ( system("cls") )
    #define HEADLINE ( cout <<" ***** Tic-Tac-Toe ***** \n\n" )
    using namespace std;
    //------------------------------------------------------------------------------
    // Globale Variablen
    char Spielfeld[3][3];
    int Eingabe;
    //------------------------------------------------------------------------------
    // Prototypen
    int BeispielFeld(void);
    int SpielFeld(void);
    //------------------------------------------------------------------------------
    int main()
    {
    
    while (true)
    {
    CLS;
    FARBE;
    HEADLINE;
    BeispielFeld();
    SpielFeld();
    cin >> Eingabe;
    
    switch (Eingabe)
    {
    case 1: Spielfeld[2][1] = 'X'; break;
    case 2: Spielfeld[2][2] = 'X'; break;
    case 3: Spielfeld[2][3] = 'X'; break;
    case 4: Spielfeld[1][1] = 'X'; break;
    case 5: Spielfeld[1][2] = 'X'; break;
    case 6: Spielfeld[1][3] = 'X'; break;
    case 7: Spielfeld[0][1] = 'X'; break;
    case 8: Spielfeld[0][2] = 'X'; break;
    case 9: Spielfeld[0][3] = 'X'; break;
    }
    
    } // End While
    
    system("pause");
    return 0;
    }
    //------------------------------------------------------------------------------
    
    // Funktion: Beispielfeld
    // Bewirkt: Anzeigen eines Beisp. Feld, was die Tastenbelegung anzeigt
    
    int BeispielFeld()
    {
    cout <<"Tastenbelegung: \n";
    cout <<"------------- \n";
    cout <<"| 7 | 8 | 9 | \n";
    cout <<"------------- \n";
    cout <<"| 4 | 5 | 6 | \n";
    cout <<"------------- \n";
    cout <<"| 1 | 2 | 3 | \n";
    cout <<"------------- \n\n";
    return 0;
    }
    
    // Funktion: SpielFeld
    // Bewirkt: Anzeige des Spielfeld, mit den Array's
    
    int SpielFeld()
    {
    for(int zeile = 0; zeile <= 2; zeile++)
    {
    LINIE;
    cout << "| " << Spielfeld[zeile][1] << " | " << Spielfeld[zeile][2] << " | " << Spielfeld[zeile][3] << " | " << endl;
    }
    LINIE;;
    return 0;
    }
    

    Soweit bin ich jetz...

    Jetz will ich noch den Zug des PC's Programmieren.

    Sowas wird doch mit Zufalsszahlen (Zwischen 1 u. 9 ) gemacht, oder?

    Wie krieg ich es jetz hin, das der PC mein Feld nicht überdeckt? Soll also nur freie Felder wählen...



  • Das er nicht überdschreibt reicht ein einfaches if zielfeld = 'X' und zu den Arrays! Wenn Du ein Array anlegst mit [3][3] sprichst Du die elemente selbst mit [0 bis 2][0 bis 2] an. Also ein Array der Größe N geht immer von 0 bis N-1 (eins nicht "l" 🙂



  • Entspricht der Code eigentlich dem Standart? Geht nur bei Borland C++ Builder... DJGPP kompiliert ihn net!



  • Nein, natürlich nicht.

    <iostream.h> muss <iostream> heißen und dafür steht alles im Namensraum std.

    <conio.h> ist eine Borland-spezifische Bibliothek, die Teilweise auch bei andern Compiler beiliegt.


Anmelden zum Antworten