TicTacToe - Konsolenanwendung - weiteres Fenster öffnen?
-
Moin Leute ...
Brauche mal wieder euren Rat.
Bin mit meinem TicTacToe Spiel soweit fertig. Nun habe ich überlegt ob es Möglich wäre, ein weiteres Fenster zu programmieren - welches die offenstehenden Zugmöglichkeiten anzeigt. Versucht habe ich das via
#define neuesfenster() system("start cmd /K") ... int main() _beginthread (möglichkeiten, 0, NULL); ... ... void möglichkeiten ( void *dummy) { neuesfenster(); printf ("neues Fenster"); _endthread(); }
Aber das funktioniert natürlich nicht so wie ich mir das gedacht habe. Wie auch? Ist es denn möglich die printf Anweisung auf das zweite Fenster umzulenken?
Oder sollte ich das komplett anders machen? Für Tips wäre ich echt dankbar. (Klar ist der Aufwand für ein solches "Project" zu groß, aber ich bin eben Anfänger und möchte versuchen meine Ideen umzusetzen ...)
-
Frag in WinAPI oder in W32-Konsole nach.
Mit ANSI-Mitteln hast du strenggenommen gar keine Konsole, sondern nur ein paar
I/O-Kanäle. Die kann man aber umleiten.
-
Okay mach ich. Dachte ich wäre hier richtig.
-
Ich weis ja nicht wieviel Platz du für die Darstellung des
Spielplans benötigst?Wenn das nur um TicTacToe geht, sollte auf der 1. Konsole genug
Platz für das Spiel und eventuell einem einfachen Spielplan mit
Vorschau sein.MfG f.-th.
-
mmh ... da habe ich auch schon dran gedacht. Nur sind die Möglichkeiten der Bildschirmsteuerung - die ich im Moment kenne nicht gerade praktisch. Eben darum bin ich auf den Gedanken gekommen - ein weiteres Fenster zu Programmieren.
Würdest du eine von diesen Methoden bevorzugen?
ANSI Steuerung
API - Aufrufe
Inline Assembler ... unter Windows?
über Interupts?Welche wird am häufigsten verwendet? Dann würd ich mich mal einarbeiten.
-
shaun1981 schrieb:
mmh ... da habe ich auch schon dran gedacht. Nur sind die Möglichkeiten der Bildschirmsteuerung - die ich im Moment kenne nicht gerade praktisch. Eben darum bin ich auf den Gedanken gekommen - ein weiteres Fenster zu Programmieren.
Dann solltest du deinen Eifer vielleicht besser darauf verwenden, deine Moeglichkeiten der "Bildschirmsteuerung" innerhalb einer Konsole zu erweitern, statt zu versuchen, mit 2 Konsolen zu werkeln, was nicht nur in der Benutzung, sondern auch in der (low level-) Programmierung ekliger ist.
Nur so ein Gedanke.shaun1981 schrieb:
Würdest du eine von diesen Methoden bevorzugen?
ANSI Steuerung
API - Aufrufe
Inline Assembler ... unter Windows?
über Interupts?Welche wird am häufigsten verwendet? Dann würd ich mich mal einarbeiten.
Weiss zwar nicht, was "ANSI Steuerung" meint (standard C-"Befehle"?), aber unter Windows benutzt man keine Softwareinterrupts und Inline-Assembler wird eigentlich hoechstens zur Optimierung benutzt, nicht zur Konsolensteuerung oder Interaktion mit dem OS.
Bleibt also nur "API - Aufrufe".
-
shaun1981 schrieb:
...
Welche wird am häufigsten verwendet? Dann würd ich mich mal einarbeiten....
Hi!
Für Linux ist die ncurses Bibliothek, für Windows die WinApi ( speziel Console Functions ) gut geeignet. Damit kannst du auch z.B. die Größe des Konsolenfensters steuern, usw.Gruß,
B.B.
-
Neues Problem - finde den Fehler nicht:
char feld[3][3] = {{'.','.','.'}, {'.','.','.'}, {'.','.','.'}}; int prüffeld[3][3] = {{2,1,2}, {1,3,1}, {2,1,2}};
Habe zwei Arrays definiert und initialisert (s.o.). Die Werte der Arrays werden bei Programmablauf geändert via:
prüffeld[1][0] = 3; feld[1][1] = 'X'
Da nun bei Programmende alle Werte verändert wurden, möchte ich die Standardwerte mit dieser Funktion wieder herstellen:
void cleararay(void) { int a,b; for (a=0;a<3;a++) { for (b=0;b<3;b++) { feld [a][b] = '.'; } } int prüffeld[3][3] = {{2,1,2}, {1,3,1}, {2,1,2}}; return; }
Das Array "Feld" wird wie gewollt bearbeitet. Nur "Prüffeld" nimmt einfach nicht die Standardwerte an. Was muss ich bitte ändern?
-
Das Feld in Zeile 14 ist nur innerhalb der Funktion cleararray sichtbar.
-
Big Brother schrieb:
Das Feld in Zeile 14 ist nur innerhalb der Funktion cleararray sichtbar.
Okay. Leuchtet ein. Nur sind die Arrays doch global definiert ?! Versuche ich nun in der Funktion cleararay folgendes:
prüffeld[3][3] = 2,1,2,1,3,1,2,1,2;
komme ich auch nicht zu dem gewünschten Ergebnis. Wo liegt mein Denkfehler?
-
Hast du in einer Datei zwei Variablen mit gleichem Namen, eine global außerhalb der Funktion xyz und die andere lokal innerhalb xyz: In der Funktion xyz wird die lokale bearbeitet, die globale bleibt unverändert.
-
Das ist mir schon bekannt. Nur wie weise ich dem globalen Array nun die neuen Werte zu. Scheine ein Brett vor dem Kopf zu haben - eben weil mir nicht einleuchtet - warum die Werte beim Array FELD geändert werden. Beide sind doch global.
-
Das ist mir schon bekannt. Nur wie weise ich dem globalen Array nun die neuen Werte zu.
Du benennst einfach das lokale um, sodass es das globale nicht mehr maskiert.
Psychologie ist das Problem - für wessen Lösung sie sich hällt
Wenn schon zitieren, dann bitte richtig:
Die Fackel, 15. Jg., Nr. 376-377 vom 30.5.1913, S. 21 schrieb:
Psychoanalyse ist jene Geisteskrankheit, für deren Therapie sie sich hält.
-
bgdnoy schrieb:
Das ist mir schon bekannt. Nur wie weise ich dem globalen Array nun die neuen Werte zu.
Du benennst einfach das lokale um, sodass es das globale nicht mehr maskiert.
Psychologie ist das Problem - für wessen Lösung sie sich hällt
Wenn schon zitieren, dann bitte richtig:
Die Fackel, 15. Jg., Nr. 376-377 vom 30.5.1913, S. 21 schrieb:
Psychoanalyse ist jene Geisteskrankheit, für deren Therapie sie sich hält.
Ein indirektes Zitat Ohne Quellenangaben geht schon in Ordnung - denke ich.
-
Ein indirektes Zitat Ohne Quellenangaben geht schon in Ordnung - denke ich.
Aber sicher! Deshalb auch: bitte.
<pedantic>
Ich würde trotzdem dessen für wessen und hält für hällt setzen.
-
Nun zurück zum Problem:
Du benennst einfach das lokale um, sodass es das globale nicht mehr maskiert.
Das Problem war, dass ich das globale Prüffeld Array mit den neuen/alten Werten versehen wollte. Es soll kein zweites lokales Array mit gleichem Namen erstellt werden. Aus der Funktion cleararray heraus - soll das globale Prüffeld-Array mit neuen Werten versehen werden.
Drücke ich mich so ungenau aus? (Lese gleich nochmal nach ...)
-
Noch mal die Frage an euch:
Wie initialisiere ich ein globales Array neu - aus einer Funktion heraus?
-
shaun1981 schrieb:
Wie initialisiere ich ein globales Array neu - aus einer Funktion heraus?
initialisieren geht nur beim programmstart. sonst kannst du es nur manuell platt machen, z.b. mit 'memset' o.ä.
-
Moment:
Meine Funktion sieht so aus:
// Array Daten entfernen // void cleararay(void) { int a,b; for (a=0;a<3;a++) { for (b=0;b<3;b++) { feld [a][b] = '.'; } } prüffeld [3][3] = 2,1,2,1,3,1,2,1,2; return;
Array FELD wird hier doch auch neu inititalisiert? Oder nutze ich den falschen Begriff? Abgesehen davon arbeitet mein Programm mit diesen globalen Array´s - innerhalb der Funktionen. Ich find den Faden einfach nicht ... verdammt!
-
Oh mein Gott ... so ein blutiger Anfänger Fehler!
sollte das ganze nicht so oder ähnlich aussehen?
prüffeld [0][0] = 2; prüffeld [1][0] = 1; prüffeld [2][0] = 2; prüffeld [0][1] = 1; prüffeld [1][1] = 3; prüffeld [2][1] = 1; prüffeld [0][2] = 2; prüffeld [1][2] = 1; prüffeld [2][2] = 2;