tic tac toe



  • wie realisier ich ein spiel z.b. tic-tac-toe oder 4gewinnt auf konsolenbasis?
    ich mein konsole ist doch nur textausgabe da kann ich doch gar kein spielfeld basteln oder wie wird das gemacht?



  • Klar, Du kannst Dir aus einzelnen Zeichen -, +, |, X, O das Spielfeld darstellen und dann per std::cin Den Spieler nach dem Feld fragen, wo er/sie sein/ihr Kreuz/Kreis hinsetzen will.



  • Klar, Du kannst Dir aus einzelnen Zeichen -, +, |, X, O das Spielfeld darstellen

    Ok das bekomme ich hin aber wie definiere ich nachher die einzelnen Felder um zu prüfen, ob Beispielweise jemand gewonnen hat?



  • Indem du andersrum denkst 😉 Du brauchst eine Klasse "GameBoard" oder so, in dem du die einzelnen Spielfelder und deren Belegung speicherst. Nach jedem Zug kannst du darin ganz einfach prüfen, ob das Spiel gewonnen wurde oder sonst was auch immer. Die Konsolenausgabe realisierst du in einer Funktion (print, oder gleich operator<<), die das Feld auf die Konsole malt.



  • klopa schrieb:

    Ok das bekomme ich hin aber wie definiere ich nachher die einzelnen Felder um zu prüfen, ob Beispielweise jemand gewonnen hat?

    Die Ausgabe hat doch gar nichts mit der Siegbedingung zu tun. Intern verwendest du wohl ein 3x3 Array um dir zu merken wer wo etwas gesetzt hast. Dieses übergibst du auch deiner Zeichenroutine, damit sie weiß an welchen Stellen z.B. ein "X" und an welchen ein "O" zu setzen ist, und ebenso würde ich die Prüfung der Siegbedingung in eine Funktion auslagern, die dieses Array entgegen nimmt.



  • ja aber ich muss das auch irgendwieo so als feld definieren, dass man da irgendwie durch tappen kann.
    Weil am Anfang soll ja man ein leeres Spielfeld sehen, wo man sein Kreuz/Kreis machen kann.

    Wie macht man das, dass man da zwischen den Felder springen kann.



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Entweder den TAB-Key abfangen (kann C++ nicht, das ist Plattformabhängig) und dann entsprechend zeichnen. Oder weniger kompliziert: nummeriere deine Felder, wie bei nem Schachspiel. Der User gibt dann nur ein "C3", das musst du aufdröseln und das entsprechende Feld als "belegt durch PlayerXYZ" markieren.



  • nummeriere deine Felder
    

    Wie erstelle ich denn so ein Feldnetz, welche ansprechbar und mit einem Wert belegt sind.
    Denn wenn ich ein Feldnetz nur "male", kann ich es ja nicht ansprechen like "If B1==0.....



  • klopa schrieb:

    nummeriere deine Felder
    

    Wie erstelle ich denn so ein Feldnetz, welche ansprechbar und mit einem Wert belegt sind.

    Nochmal ganz an den Anfang zurück: In einen Konsolenprogramm (wir reden hier von Standard C++ Mitteln) können ausschließlich Textausgaben und eingaben gemacht werden. Nichts mit Anklicken usw.

    Das heißt du zeichnest das Feld etwa wie folgt:

    A   B   C
      |-----------|
    1 | @ | @ | @ |
      |-----------|
    2 | @ | @ | @ |
      |-----------|
    3 | @ | @ | @ |
      |-----------|
    

    Die "@" sind in diesem Fall Platzhalter für die konkrete Werte (Leerzeichen, X, O). Der Benutzer kann dann angeben wohin er seinen Stein setzen will ("Wohin wollen sie ihren Spielstein setzen?"...). Diese Eingabe (cin) musst du dann interpretieren (mittels if, std::map oder, oder, oder...).

    DU bist also dafür verantwortlich wie das Feld dann angesprungen wird. Und dies wird vermutlich über einen Indexzugriff erfolgen.



  • klopa schrieb:

    nummeriere deine Felder
    

    Wie erstelle ich denn so ein Feldnetz, welche ansprechbar und mit einem Wert belegt sind.
    Denn wenn ich ein Feldnetz nur "male", kann ich es ja nicht ansprechen like "If B1==0.....

    Natürlich kannst du das gemalte Feld nicht ansprechen. Das ginge theoretisch mit platztformabhängigen Libs wie ncurses unter Linux, oder (denke ich) WinAPI unter Windows.


Anmelden zum Antworten