Zeichen vom Bildschirm lesen
-
Ich brauch schon wieder eure Hilfe,
Ich will ein zeichen vom Bildschirm einlesen der sich breits dort befindet.
Im Detail will ich wenn ich mit meinen Cursor wenn ich an eine variablen Stelle komme ein Fehlermeldung erscheinen.
Nun habe ich mir gedacht das es eine Möglichkeit geben muss, mit der ich ein Zeichen das sich bereits auf dem Bildschirm befindet einlesen kann und diesen dann weiterbearbeiten kann.
-
Hallo,
Das ist stark von deiner Hardware abhängig. Benutzt du eine Grafikkarte die über einen eigenen Zeichengenerator verfügt und die Zeichen selbst im Bildwiederholspeicher hält, dann sollt es leicht möglich sein. Bei einem pixelorientierten Grafikdisplay solltest du die Zeichencodes vor der Ausgabe selbst in einer Matrix speichern.
-
So nun nach zahllosen neuen grauen Haaren und Stundenlangen rumprobieren habe ich mich jetzt in die mehrdimensionalen Vectoren eingelesen. Auch habe ich jetzt eine entsprechende Matrix kreiert.
Meine Matrix ist 80x80 groß und es soll der Schalter f auf 1 gesetzt werden sobald ich mit dem Cursor auf ein Feld komme das mit einen = gekennzeichnet ist.
dazu habe ich folgendes Prog geschriebenint g[80][80]; char la[80][80]; /* a und b sind die Koordinaten meines Cursors die ich über tasten steuere*/ /* die Koordinaten daß das zeichen = enthält wird per zufall bestimmt*/ for (k=0;k<80;k++) { for (l=0;l<80;l++) { if (la[k][l]=='='&&g[a][b]==la[k][l]) f=1; break; } }
Ich habe mal nicht den ganzen Programmtext dargestellt weil der Rest für diesen Teil nicht relavant ist.Da wird halt nur die Steuerung durch die tasten definiert. Ausserdem will euch nicht nicht länger als nötig mit meinen Newbie-Programmstil nerven
Leider wird mein f nicht auf 1 gesetzt wenn ich auf ein solches Feld komme.
Was mache ich falsch
-
Raorkon schrieb:
Leider wird mein f nicht auf 1 gesetzt wenn ich auf ein solches Feld komme.
Was mache ich falschholla,
ich schätze mal da fehlen ein paar 'curly braces'if (la[k][l]=='='&&g[a][b]==la[k][l]) { f=1; break; }
:xmas2:
-
int la[80][80]; /*Globale Variablen*/ int a,b,e,f; int main (void) /*hier steht mein Hauptprogramm mit dem ich dann in die Funktion hora springe*/ void hora(void) { int i,j,k,l; int ha,hb; int ea=0; int ha,hb; int ea=0; int fa=0; for (j=a;j>0;j--) { a=j; ha=a;hb=b; ea=kbhit(); if (ea==1) {e=getch(); break;} gotoxy(a,b); printf(">"); for (i=0;i<100000000;i++); /*nur eine Zeitschleife*/ gotoxy(ha,hb); printf("="); la[ha][hb]=1; for (k=0;k<80;k++) { for (l=0;l<80;l++) { if (la[a+1][b+1]=1) fa=1; break; } } } if (fa==1) {gotoxy(0,0);printf("Fehler");} if (j==0) {f=1;} return(e); }
ich habe mal den Code etwas abgeändert weil ich in der vorhergehende Beschreibung doch einige Zuweisungsfehler hatte.
Nun habe will ich eigentlich nur das wenn ich mit meinen Cursor, dessen Position mit a & b deklariert ist, eine Meldung erscheint. jetzt habe ich mir den o.g. Code erdacht. Nun der Code scheint so zu funktionieren jedoch wenn ich mit dem Corsor auf ein ein Feld das mit "1" makiert ist, bekomme ich keine Fehlermeldung. Wenn es hilft dann kann ich ja mal den gesamten code hier her kopieren.
-
Hi
1. Wie kommst du drauf, globale Variabeln nutzen zu müssen? Deine Funktion ist damit kein bisschen portabel. Nimm lieber nochmals Funktionen durch und versuch deine Variabeln an die Funktion weiterzugeben.2. Wieso funktioniert deine Funktion, wenn die erst hinter der main deklariert wurde?
3. Aus welchem Header hast du gotoxy her? Die Funktion würd' ich auch gerne mal benutzen können...
4. Mit deiner "Zeitschleife", verursachst du da nicht irgentwie ne menge CPU belastung?
5. Rück dein Code bitte besser ein und C/C++ Codetags wären auch nich falsch...
6. Wieso versuchst du nicht, das was vorher in der Console ausgegeben wurde, nicht schon vorher auf dein Programm umzuleiten und dann so zu filtern?
-
Ich fange mal von hinten an
6.wie bitte, aber ich lese mal in meinen Büchern nach
5. ja werde ich machen
4. ich weiß leider noch nicht wie ich sonst die Funktion verlangsamen kann3. - 1.
#include <stdio.h> #include <conio.h> #include <stdlib.h> void hora(void); /*Horizontal Richtung A*/ void horb(void); /*Horizontal Richtung B*/ void vera(void); /*Vertikal Richtung A*/ void verb(void); /*Vertikal Richtung B*/ int a,b,e,f; int la[80][80]; int main (void) { b=20; a=20; hora(); do { switch(e) { case'a': hora();break; case'd': horb();break; case'w': vera();break; case's': verb();break; } } while (f!=1); gotoxy(1,1); printf("Ausserhalb"); getch(); return 0; }
Ich bin der Meinung das ich in diesen Fall besser mit globalen Variablen arbeite. Mein Wissenstand reicht noch nicht aus, mehrere Variablen wieder zurückzugeben. (ich arbeite aber dran
).