TicTacToe - Konsolenanwendung - weiteres Fenster öffnen?
-
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;
-
shaun1981 schrieb:
Array FELD wird hier doch auch neu inititalisiert?
ja, das ist aber kein globales feld, wie in deiner frage davor.
shaun1981 schrieb:
sollte das ganze nicht so oder ähnlich aussehen?
als initialisierung dann etwa so:
feld [3][3] = {{1,2,3},{4,5,6,},{...},...};
-
Aber so funktioniert das nicht ... das ist mein Problem. Ob ich versehentlich ein lokales erzeugt habe ?!
-
shaun1981 schrieb:
Aber so funktioniert das nicht ... das ist mein Problem. Ob ich versehentlich ein lokales erzeugt habe ?!
probier mal dies:
int main(void) { int feld[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; // <-- initialisierung int s; for (s=0; s<9; s++) printf ("%d ", ((int*)feld)[s]); puts(""); // spaeter gehen nur noch zuweisungen feld[0][0] = 666; feld[1][1] = 777; feld[2][2] = 888; // usw... for (s=0; s<9; s++) printf ("%d ", ((int*)feld)[s]); puts(""); }