Tik Tak Toe Spiel
-
Gude ich hab ein kleines Tik-Tak-Toe -Spiel programmiert, mein Problem dabei ist, wenn ich eine Eingabe also in der Zeile: 84 mache speichert mein Array nicht die Eingabe und in der Zeile107 gibt mir das Programm mein Feld normal wie am Anfang aus, obwohl an der Stelle [2][2] ein x stehen sollte, ich glaube, das Problem liegt in er Zeile 94 aber, was genau dort das Problem ist, da komme ich nicht drauf...
Header Datei:
//Alle Funktionen: void menue(); void spielfeldErstellen(); void spielfeldAusgeben(); void werIstDran(); void losgehts(); //Array erstellen (3*3 array) //erst die zeile dann die spalte angeben char myArray[3][3]; void spielfeldErstellen(){ std::cout << "|----|---|----|---|" << std::endl; std::cout << "| 0 | 1 | 2 | 3 |" << std::endl; std::cout << "|----|---|----|---|" << std::endl; std::cout << "| 1 | | | |" << std::endl; std::cout << "|----|---|----|---|" << std ::endl; std::cout << "| 2 | | | | " << std::endl; std::cout << "|----|---|----|---|" << std::endl; std::cout << "| 3 | | | | " << std::endl; std::cout << "|----|---|----|---|" << std::endl; } void spielfeldAusgeben() { std::cout << std:: endl << std:: endl; spielfeldErstellen(); std::cout << std::endl; } //menue void menue() { char eingabe; std::cout << " ***********************************" << std::endl; std::cout << " *Willkommen bei Tic Tak Toe Spiel:*" << std::endl; std::cout << " ***********************************" << std::endl << std::endl; do { std::cout << "Menue: " << std::endl; std::cout << "- Gegen Computer spielen Taste (g) drecke " << std::endl; std::cout << "- Mehrspieler spielen Taste (m) druecken " << std::endl; std::cout << "- Spiel Beenden Taste (x) druecken " << std::endl; std::cin >> eingabe; switch (eingabe) { case 'g': { //Später machen (Wahrscheinlich mit random funktion! }break; case 'm': { char spielerEingabe; int x,y; int counter = 1; std::cout << "Sie haben die Option mit Mehreren Spielern spielen ausgeweahlt " << std::endl; //Solange nicht die Buchstabe x oder o eingegeben wurden läuft //die While Schleife do { std::cout << std::endl << std::endl; std::cout << "Welchen Buchstaben wollen Sie sein? " << std::endl; std::cout << " Ein 'x' oder ein 'o' ?" << std::endl; std::cin >> spielerEingabe; } while (spielerEingabe != 'x' and spielerEingabe != 'o'); //schauen ob er mich richtig abfragt //solange 9 kleiner oder gleich 9 ist soll die schleife laufen while (counter <= 9){ switch (spielerEingabe) { case'x': { spielfeldAusgeben(); std::cout << "Spieler " << spielerEingabe << " ist dran" << std::endl; std::cout << "Eingabe: "; std::cin >> x >> y; if (x == 2 && y == 2) { //std::cout << "falsche Eingabe!\a" << std::endl; myArray[2][2] = 'x'; } spielfeldAusgeben(); spielerEingabe -= 9; counter++; }break; case'o': { spielfeldAusgeben(); std::cout << "Spieler " << spielerEingabe << " ist dran" << std::endl; std::cout << "Eingabe: "; std::cin >> myArray[x][y]; spielerEingabe += 9; counter++; }break; } } }break; } //Das Spielende wenn eingabe x ist } while (eingabe != 'x'); std::cout << "Programm beendet :( " << std::endl; }
cpp Datei:
#include <iostream> #include "tik_tak_toe.h" int main() { menue(); return 0; }
-
Du darfst in spielfeldAusgeben() nicht spielfeldErstellen() aufrufen sondern musst schon mal das Spielfeld auch ausgeben mit den Werten die in deinem Array gespeichert sind.
Warum du in Zeile 91 testest ob x und y == 2 ist und dann auch im Array nur auf diese Position schreibst, ist mir nicht klar. Du solltest doch da eher testen ob die Eingabe im Bereich des Array sind also größer 0 und kleiner 3 und dann auch auf die gewünschte Position.
-
@CTecS meinst du, ich soll mein array ausgeben?
hmm stimmt das muss ich auch noch machen ...
-
@adii950 sagte in Tik Tak Toe Spiel:
@CTecS meinst du, ich soll mein array ausgeben?
hmm stimmt das muss ich auch noch machen ...Sollte irgendwie von Vorteil sein bevor du weiter nach Fehlern suchst
-
@adii950 Oh okay ich schaue mal danach, sobald ich damit fertig bin schicke ich den code wieder hier rein
-
Außerdem ist deine "tik_tak_toe.h" Datei keine Headerdatei, sondern eine Source-Datei, d.h. diese sollte "tik_tak_toe.cpp" heißen und zu deiner "main.cpp" dazu kompiliert werden (anstatt per
#include
eingebunden) - nur die Funktionsdeklarationen am Anfang sollten in die Headerdatei!
-
*@CTecS @Th69 jetzt habe ich zwar das Problem behoben, aber das nächste Problem ist das mein (x) falsch gesetzt wird z. B. Eingabe: (2/2) → auf der Konsole auf der Position: (3/2), was in meinem Fall falsch ist, ich denke, es liegt an einem 2D-Array 🥲
Hier nochmal mein Code:Header Datei:*
#pragma once #include<array> // menue funktion // spielfeld erstellen // Spielfeld ausgeben // Spielfeld leer räumen // spieler gewinnt oder verliert // Punktestand (Bonus wenn man bock hat. //wegen farben schauen //Mehrspieler spielen //Gegen Computer spielen (Bonus) //Alle Funktionen: void menue(); void spielfeldErstellen(); void spielfeldAusgeben(); void werIstDran(); void losgehts(); //Array erstellen (3*3 array) //erst die zeile dann die spalte angeben char myArray[4][4]; void spielfeldErstellen(){ /* std::cout << "|----|---|----|---|" << std::endl; std::cout << "| 0 | 1 | 2 | 3 |" << std::endl; std::cout << "|----|---|----|---|" << std::endl; std::cout << "| 1 | | | |" << std::endl; std::cout << "|----|---|----|---|" << std ::endl; std::cout << "| 2 | | | | " << std::endl; std::cout << "|----|---|----|---|" << std::endl; std::cout << "| 3 | | | | " << std::endl; std::cout << "|----|---|----|---|" << std::endl; */ char leeres_feld = '.'; //0 Reihe myArray[0][0] = '1'; myArray[0][1] = leeres_feld; myArray[0][2] = leeres_feld; myArray[0][3] = leeres_feld; //1 Reihe myArray[1][0] = '2'; myArray[1][1] = leeres_feld; myArray[1][2] = leeres_feld; myArray[1][3] = leeres_feld; //2 Reihe myArray[2][0] = '3'; myArray[2][1] = leeres_feld; myArray[2][2] = leeres_feld; myArray[2][3] = leeres_feld; //3 Reihe myArray[3][0] = '4'; myArray[3][1] = leeres_feld; myArray[3][2] = leeres_feld; myArray[3][3] = leeres_feld; } void spielfeldAusgeben(){ std::cout << " 0 " << " 1 " << " 2 " << " 3 " << std::endl; for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { std::cout << " " << myArray[i][j] << " "; } std::cout << std::endl; } } //menue void menue() { char eingabe; std::cout << " ***********************************" << std::endl; std::cout << " *Willkommen bei Tic Tak Toe Spiel:*" << std::endl; std::cout << " ***********************************" << std::endl << std::endl; do { std::cout << "Menue: " << std::endl; std::cout << "- Gegen Computer spielen Taste (g) drecke " << std::endl; std::cout << "- Mehrspieler spielen Taste (m) druecken " << std::endl; std::cout << "- Spiel Beenden Taste (x) druecken " << std::endl; std::cin >> eingabe; switch (eingabe) { case 'g': { //Später machen (Wahrscheinlich mit random funktion! }break; case 'm': { char spielerEingabe; int x,y; int counter = 1; std::cout << "Sie haben die Option mit Mehreren Spielern spielen ausgeweahlt " << std::endl; //Solange nicht die Buchstabe x oder o eingegeben wurden läuft //die While Schleife do { std::cout << std::endl << std::endl; std::cout << "Welchen Buchstaben wollen Sie sein? " << std::endl; std::cout << " Ein 'x' oder ein 'o' ?" << std::endl; std::cin >> spielerEingabe; } while (spielerEingabe != 'x' and spielerEingabe != 'o'); //schauen ob er mich richtig abfragt //solange 9 kleiner oder gleich 9 ist soll die schleife laufen while (counter <= 9){ switch (spielerEingabe) { case'x': { spielfeldErstellen(); std::cout << "Spieler " << spielerEingabe << " ist dran" << std::endl; std::cout << "Eingabe: "; std::cin >> x >> y; if (x == 0 && y == 0) { //std::cout << "falsche Eingabe!\a" << std::endl; myArray[2][2] = 'x'; //spielfeldAusgeben(); } spielerEingabe -= 9; counter++; }break; case'o': { spielfeldAusgeben(); std::cout << "Spieler " << spielerEingabe << " ist dran" << std::endl; std::cout << "Eingabe: "; std::cin >> myArray[x][y]; spielerEingabe += 9; counter++; }break; } } }break; } //Das Spielende wenn eingabe x ist } while (eingabe != 'x'); std::cout << "Programm beendet :( " << std::endl; }
CPP Datei:
#include <iostream> #include "tik_tak_toe.h" #include <array> int main() { menue(); return 0; }
-
@adii950 sagte in Tik Tak Toe Spiel:
ich denke, es liegt an einem 2D-Array
Es ,liegt daran, dass du nicht weißt wie du dein Array aufgebaut hast.
Warum gehören die Zeilennummern zum Array, die Spaltennummern aber nicht?
Wie wäre es mit Buchstaben-Zahlen wie beim Schach.
Oder durchnummerieren wie auf der Zehnertastatur.Und nochmal: Definitionen (also alles was Speicher verbraucht wie Funktionen oder Variablen) haben in einer Header-Datei nichts zu suchen.
Die Funktionsdeklarationen in den Zeilen 13 bis 18 sind das Einzige was in den Header gehört.