Wie soll es weiter gehen .... ?
-
TIC _ Tac - TOE hört sich doch interessant an ... aber 1. Wie soll man das Feld und die spielsteine darstellen? 2. Wie soll man "sagen" wo man sein nächsten stein hinsetzten will?
Das programm muss ja einfach nur versuchen eine 3 reihezu bilden und verhindern, dass der gegner das selbe tut, oder?
-
ich was schrieb:
... aber 1. Wie soll man das Feld und die spielsteine darstellen? 2. Wie soll man "sagen" wo man sein nächsten stein hinsetzten will?...
Siehst du mal, nachdem du die Grundlagen von C++ gelernt hast, fängst du
jeeetzt in diesem Moment, zum ersten mal an auch zu programmieren(=denken).
-
ich was schrieb:
TIC _ Tac - TOE hört sich doch interessant an ... aber 1. Wie soll man das Feld und die spielsteine darstellen? 2. Wie soll man "sagen" wo man sein nächsten stein hinsetzten will?
Das programm muss ja einfach nur versuchen eine 3 reihezu bilden und verhindern, dass der gegner das selbe tut, oder?
- einfach ASCII-Ausgabe auf der Konsole
- numerier die Felder durch und lies eine Zahl von der Konsole ein
Kapsel die Ein/Ausgabe in eigene Funktionen/Klassen, dann kannste die auch später austauschen und grafisch machen. Implementier den Spieler als eigene Klasse, laß sowohl den Menschlichen Spieler, als auch den KI-Spieler davon erben. Dann kann Dein Programm gleich viel mehr: Human vs. Human, aber auch Human vs. KI und KI vs. KI
Mach Dir bei der KI erst große Gedanken, wenn Du schon was hast. Für den Anfang reicht es völlig zufällig zu setzen. Später vielleicht wenigstens gegnerische 3er Blocken. Und wenn alles fertig ist kannste was ausgeklügelteres nehmen.
Das wichtigste überhaupt ist, daß Du anfängst.
-
ich was schrieb:
TIC _ Tac - TOE hört sich doch interessant an ... aber 1. Wie soll man das Feld und die spielsteine darstellen? 2. Wie soll man "sagen" wo man sein nächsten stein hinsetzten will?
Das programm muss ja einfach nur versuchen eine 3 reihezu bilden und verhindern, dass der gegner das selbe tut, oder?
*g* Willkommen in der Welt der Programmierung
Ich glaub du erkennst jetzt so langsam, worums dabei wirklich geht
Aussehen koennte das Ganze z. B. so:
http://bluetiger.bauchlandung.org/img/coding/blueTicTacToe.jpg
(Screenshot aus dem TicTacToe, das ich vor Jahren mal geschrieben hab)
-
So ein programm würd ich mit ncurses machen.
Kannst dazu ja mal im web was suchen.Weiter oben schreibst du du willst plattformunabhänig programmieren, dass geht damit aber leider nicht!
Ich würd am Anfang aber sowieso erstmal was kleines auf der konsole machen, und da wirds erstmal egal sein ob des plattformunabhänig ist
-
Danke. Ihr seid ja alle voll nett ... wenn ich ein guten nick gefunden habe, werde ich mich mal anmelden
Also in der schule habe ich mir mal paar gedanken gemacht und ich weiß schon mehr oder weniger wie ich das amchen:
So soll das Feld aussehen:
Die / sollen eigentlich solche grade linien sein (Strg + Alt + < >) aber unter Linux kann ich die nicht da darstellen)
A / B / C /
+---+---+---+
1 / / / / Felder 1,2,3
+---+---+---+
2 / / / / Felder 4,5,6
+---+---+---+
3 / / / / Felder 7,8,9
+---+---+---+so, jedes Feld soll jetzt eine Variable bekommen (unsigned float): A1, A2, A3, B1, B2, B3, C1, C2, C3, ... oder auch einfach nur Feld[8] oder Feld[2][2], aber ich werde mal ersteres nehmen.
So ein code habe ich auch schon (ich wette ihr werdet grinsen, aber das ist auch mein "erst programmierter code" ... also seid rücksichtsvoll
- is ausserdem ein "low-Level code):
[cpp]
#include <stdio.h>zugabfrage(extern char nzug) {
..............
}
int setztezug(extern char nzug) {...........
printf(" A / B / C /");
printf(" +----+----+----+");
printf(" 1 / %f / %f / %f /",A1,B1,C1);
printf(" +----+----+----+");
printf(" 2 / %f / %f / %f /",A2,B2,C2);
printf(" +----+----+----+");
printf(" 3 / %f / %f / %f /",A3,B3,C3);
printf(" +----+----+----+");................
}int KI(bool xodero) {
..............
}int main() {
char janein, nzug; // janein frag immer ob man noch eine runde spielen will ; nzug speichert den nächsten zug
unsigned float wahl,schleife=9.0,A1,A2,A3,B1,B2,B3,C1,C2,C3 // wahl ´sagt´ wer gegen wen spielt,
int punkte // ja, was wohl ...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 gebrachtswitch(wahl) {
case 1:
while(schleife != 0) {
int zugabfrage(extern char nzug); // fragt immer den spieler ab (nzug) ... wir brauche noch eine bool variabel, //damit man jetzt weil ob O oder X dran ist.
int setztezug(extern char nzug); // setzt diesen zug dan auch ... muss dan auch die bool variable bekommen.
break;
}case 2:
while(schleife != 0) {
int zugabfrage(extern char nzug); // fragt immer den spieler ab (nzug) ... wir brauche noch eine bool variabel, //damit man jetzt weil ob O oder X dran ist.
int setztezug(extern char nzug); // setzt diesen zug dan auch ... muss dan auch die bool variable bekommen.
int KI(bool /*bekommt auch noch eine bool abfrage, die schau ob die zahl gleich null ist, wenn ja wird die funktion KI() und das 2te setztezug nicht ausgeführt+/);
int setztezug(extern char nzug);
break;
}case 3:
while(schleife != 0) {
int KI(extern char nzug); // setzt diesen zug dan auch ... muss dan auch die bool variable bekommen.
int setztezug(extern char nzug);
break;
}default:
printf ("ungültige option");
return 1;
}
-
Sorry ... hier noch einmal mit richtig gesetzten code tags ... das andere kann gelöscht werden
Danke. Ihr seid ja alle voll nett ... wenn ich ein guten nick gefunden habe, werde ich mich mal anmelden
Also in der schule habe ich mir mal paar gedanken gemacht und ich weiß schon mehr oder weniger wie ich das amchen:
So soll das Feld aussehen:
Die / sollen eigentlich solche grade linien sein (Strg + Alt + < >) aber unter Linux kann ich die nicht da darstellen)
A / B / C /
+---+---+---+
1 / / / / Felder 1,2,3
+---+---+---+
2 / / / / Felder 4,5,6
+---+---+---+
3 / / / / Felder 7,8,9
+---+---+---+so, jedes Feld soll jetzt eine Variable bekommen (unsigned float): A1, A2, A3, B1, B2, B3, C1, C2, C3, ... oder auch einfach nur Feld[8] oder Feld[2][2], aber ich werde mal ersteres nehmen.
So ein code habe ich auch schon (ich wette ihr werdet grinsen, aber das ist auch mein "erst programmierter code" ... also seid rücksichtsvoll
- is ausserdem ein "low-Level code):
#include <stdio.h> zugabfrage(extern char nzug) { .............. } int setztezug(extern char nzug) { ........... printf(" A / B / C /"); printf(" +----+----+----+"); printf(" 1 / %f / %f / %f /",A1,B1,C1); printf(" +----+----+----+"); printf(" 2 / %f / %f / %f /",A2,B2,C2); printf(" +----+----+----+"); printf(" 3 / %f / %f / %f /",A3,B3,C3); printf(" +----+----+----+"); ................ } int KI(bool xodero) { .............. } int main() { char janein, nzug; // janein frag immer ob man noch eine runde spielen will ; nzug speichert den nächsten zug unsigned float wahl,schleife=9.0,A1,A2,A3,B1,B2,B3,C1,C2,C3 // wahl ´sagt´ wer gegen wen spielt, int punkte // ja, was wohl ... 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: while(schleife != 0) { int zugabfrage(extern char nzug); // fragt immer den spieler ab (nzug) ... wir brauche noch eine bool variabel, //damit man jetzt weil ob O oder X dran ist. int setztezug(extern char nzug); // setzt diesen zug dan auch ... muss dan auch die bool variable bekommen. break; } case 2: while(schleife != 0) { int zugabfrage(extern char nzug); // fragt immer den spieler ab (nzug) ... wir brauche noch eine bool variabel, //damit man jetzt weil ob O oder X dran ist. int setztezug(extern char nzug); // setzt diesen zug dan auch ... muss dan auch die bool variable bekommen. int KI(bool /*bekommt auch noch eine bool abfrage, die schau ob die zahl gleich null ist, wenn ja wird die funktion KI() und das 2te setztezug nicht ausgeführt+/); int setztezug(extern char nzug); break; } case 3: while(schleife != 0) { int KI(extern char nzug); // setzt diesen zug dan auch ... muss dan auch die bool variable bekommen. int setztezug(extern char nzug); break; } default: printf ("ungültige option"); return 1; }
-
man bin ich blöd
... ich habe ja ganz vergessen euch fragen zu stellen
1. Wie erstellt man zufallszahlen? jaja, mit rand, aber wie macht man das genau? etwa so:
rand = variable;
????
und was für ein header brauche ich dafür? math.h ?
2. Wie kann man eine funktion dazu "bringen nochmal zu starten"??? Mit return 1; ???
-
Gut, bei der ersten farge hat mir die Bordsuche geholfen
int iZufallsZahl = rand()%9; in #include <cstdlib> ... das ist doch so richtig, oder?
-
Wetten du wirst nie mehr eine antwort von den anderen bekommen? Du hast zuviel gepostet ... ide checken das nicht
-
kenner des forums schrieb:
Wetten du wirst nie mehr eine antwort von den anderen bekommen? Du hast zuviel gepostet ... ide checken das nicht
haha und genau deswegen werde ich posten
Und eine Funktion kann sich selbst nochmal aufrufen. Du musst nur drauf achten, dass du keine Endlosschleife daraus bastelst.
void blub() { static bool again = true; if (again) { blub(); again = false; } else again = true; }
Keine Ahnung, ob das so stimmt
habs mir grad schnell ausgedacht. Die sollte sich immer nochmal ein Mal ausführen, wenn du sie aufrufst.
-
und genau jetzt hast du imho eine Endlosschleife geschaffen
da bei dem zweiten Aufruf eine neue lokale Variaqble again erstellt wird, in dieser steht dann wieder true also wird die Funktion nicht enden.
Um den fehler zu korrigieren müsstest du die variable again mit übergeben
-
Kann man das nicht mir goto machen? also mein genaues problem ist folgender: Wenn man eine Falscheingabe macht, soll die funktion nochmal widerholt werden, aber das ganze soll in der funktion selber passieren. Meint ihr ich soll nochmal ein topic im C forum erstellen?
-
Hotblack* schrieb:
und genau jetzt hast du imho eine Endlosschleife geschaffen
da bei dem zweiten Aufruf eine neue lokale Variaqble again erstellt wird, in dieser steht dann wieder true also wird die Funktion nicht enden.
Um den fehler zu korrigieren müsstest du die variable again mit übergebennein, sie ist static, sie wird nur einmal erstellt
-
was nun? schrieb:
Kann man das nicht mir goto machen? also mein genaues problem ist folgender: Wenn man eine Falscheingabe macht, soll die funktion nochmal widerholt werden, aber das ganze soll in der funktion selber passieren. Meint ihr ich soll nochmal ein topic im C forum erstellen?
Nein, erstens: NIEMALS gotos....
zweitens:
std::string eingabe; bool validInput = false; do { cout << "Eingabe: " << flush; cin >> eingabe; if (eingabe entspricht korrekter Eingabe) validInput = true; } while (!validInput);
-
tut mir leid, ich kann kein c++
-
was nun? schrieb:
tut mir leid, ich kann kein c++
dann lerns