Maus Position Hilfe
-
Hey Leute, ich bin neu hier im Forum und auch nicht wirklich lange im Programmierungs Geschäft, ich versuche gerade ein kleines Spiel zu schreiben, klappt alles, außer die Sache mit der Maus. ich versuche gerade, wenn die Maus an einer bestimmten Position ist, eine Aktion ausführt, klappt aber nicht recht, denn wenn ich auch nur irgendwo hinklicke, wird nur die erste ausgeführt und ich hab kein Plan, wie ich das beheben kann.
Sorry für den langen code, hab hier kein Spoiler gefunden.
Und danke im Vor_raus
Edit: ich hab in der header.h alles includiert
Edit2: ich benutze Microsoft Visual c++ 2010 express, und mache eine konsolenanwendeung
Edit3: Code GekürztDWORD mouseInit () { DWORD mode; GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),&mode); SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),mode|ENABLE_MOUSE_INPUT); DWORD buttons; GetNumberOfConsoleMouseButtons(&buttons); return buttons; } void showCursor (bool show = true) { ShowCursor(show); } int main() { srand((unsigned)time(0));//Die Uhr des Computer, sonst hätte man keinen wert Neustart();//führt int Neustart() aus } int Neustart() { system("cls"); cout << "|*************************|" << endl; //cout bedeuted Ausgeben, also es gibt einen Text oder Variablen aus cout << "| Zahlenraten |" << endl; cout << "| By ME |" << endl; cout << "| |" << endl; cout << "|*************************|" << endl; int versuche = 0;//Versuche werden auf 0 gesetzt cout << "Bitte Nur!! Kleinbuchstaben!! und kein Buchstabe anstatt Zahl eingeben!" << endl; cout << "Unendlich Versuche? (A) \n10 Versuche? (B)\n15 Versuche? (C)\n20 Versuche? (D)\nEigene Versuchsanzahl? (E)\nBeenden? (F)" << endl; mouseInit(); showCursor(); bool running = true; do { DWORD count; INPUT_RECORD ir; ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE),&ir,1,&count); switch(ir.EventType) { case KEY_EVENT: cin >> Auswahl_Anfang;//cin erfordet eine Eingabe von euch switch(Auswahl_Anfang)//switch ist ein schalte, jenachdem was ihr eingegeben habt führt er aus. { case('a')://wenn ihr "a" eingegeben habt system("cls"); cout << " Ihr Habt Unendlich Versuche gewaehlt" << endl; max_versuche = 1000000000;//versuchsanzahl wird an ZahlenRaten() weitergegeben ZahlenRaten(); case('b')://wenn ihr "b" eingegeben habt system("cls"); cout << " Ihr Habt 10 Versuche gewaehlt" << endl; max_versuche = 10; ZahlenRaten();//führt ZahlenRaten() aus case('c')://wenn ihr "c" eingegeben habt system("cls"); cout << " Ihr Habt 15 Versuche gewaehlt" << endl; max_versuche = 15; ZahlenRaten(); case('d'): system("cls"); cout << " Ihr Habt 20 Versuche gewaehlt" << endl; max_versuche = 20; ZahlenRaten(); case('e'): system("cls"); cout << " Ihr gebt eure Eigene Versuchsanzahl an " << endl; Versuche_Eigene();//führt Versuche_Eigene() aus case('f'): exit(0);// Gibt dem Programm den Befehl, zu Beenden default://Falls keines der oben stehenden Möglichkeiten zutrifft cout << "Falsche Eingabe!\n(A), (B) oder (C) oder (D) oder (E) in Kleinbuchstaben bitte" << endl;//führt er cout aus, also gibt den TExt wieder Falsche_Eingabe_Anfang();//und führt danach Falsche_Eingabe_Anfang aus. } case MOUSE_EVENT: if((ir.Event.MouseEvent.dwMousePosition.X = 32) & (ir.Event.MouseEvent.dwMousePosition.Y = 280)&& (ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)) { system("cls"); cout << "Unendlich versuche wurden gewaehlt" << endl; max_versuche = 1000; ZahlenRaten(); } if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 281) && ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED) { system("cls"); cout << " Ihr Habt 10 Versuche gewaehlt" << endl; max_versuche = 10; ZahlenRaten(); } if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 283) && ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED) { system("cls"); cout << " Ihr Habt 15 Versuche gewaehlt" << endl; max_versuche = 15; ZahlenRaten(); } if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 284) && ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED) { system("cls"); cout << " Ihr Habt 10 Versuche gewaehlt" << endl; max_versuche = 20; ZahlenRaten(); } if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 285) && ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED) { system("cls"); cout << " Ihr gebt eure Eigene Versuchsanzahl an" << endl; Versuche_Eigene(); } if((ir.Event.MouseEvent.dwMousePosition.X = 32) && (ir.Event.MouseEvent.dwMousePosition.Y = 286) && ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED) { exit(0); } break; } } while(running); }
-
=ist was anderes als==...Ansonsten: Einen "all-in-one" Header zu machen ist ziehmlich unsauber. Gewoehn dir das ab.
Und wenn du schon WinAPI benutzt (mit Standard-C++ hat das nich mehr viel zu tun), dann nutze sie bitte auch zum Bildschirmloeschen anstattsystem("cls");.Und hast du ueberhaupt auch nur eine Zeile Code von dem verstanden, was
mouseInit()odershowCursor()macht?BTW, es heisst voRaus mit einem r (die Variante mit 2 ist jugendgefaehrdend und muss daher hier zensiert werden.
-
Und exit() macht man nicht in C++. Ein ordentliches C++ Programm beendet, indem main() returned...
-
Sorry, bin halt noch neu^^
Hab noch nicht soo viel Ahnung
und wegen dem "voraus" hab ich mich gewundert xD hab anscheinend vergessen, das es mit einem "s" geschrieben wird, hab die 2 in deutsch nicht verdient.
Aber ich hab auch mit == oder = bzw. && oder & getestet, hat eigentlich nichts gebracht, außer das es bei == überhaupt keine Maus erkannt hat bzw. die Funktion nicht ausgeführt hat.
return 0 kehrt doch eigentlich nur zu der vorherigen Funktion zurück, ist bei mir so, deswegen exit(0).
Ich kann eigentlich nur raten, was das zu Bedeuten hat, aber ich dachte mir, dass es so klappt, tut es aber nicht
Hab sogar else if oder nur if verwendet, klappt aber nixmouseInit(); showCursor(); bool running = true; do { DWORD count; INPUT_RECORD ir; ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE),&ir,1,&count); ir.Event.MouseEvent.dwMousePosition.X = x; ir.Event.MouseEvent.dwMousePosition.Y = y; switch(ir.EventType) { case KEY_EVENT: // hab das hier Rausgenmommen, im eigentlichen Quellcode noch drinnen case MOUSE_EVENT: { if((ir.Event.MouseEvent.dwMousePosition.X == 32) && (ir.Event.MouseEvent.dwMousePosition.Y == 280) && (ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)) { system("cls"); cout << "Unendlich versuche wurden gewaehlt" << endl; max_versuche = 1000; ZahlenRaten(); }else if((ir.Event.MouseEvent.dwMousePosition.X == 32) && (ir.Event.MouseEvent.dwMousePosition.Y == 281) && (ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)) { system("cls"); cout << " Ihr Habt 10 Versuche gewaehlt" << endl; max_versuche = 10; ZahlenRaten(); }else if((ir.Event.MouseEvent.dwMousePosition.X == 32) && (ir.Event.MouseEvent.dwMousePosition.Y == 282) && (ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)) { system("cls"); cout << " Ihr Habt 15 Versuche gewaehlt" << endl; max_versuche = 15; ZahlenRaten(); }else if((ir.Event.MouseEvent.dwMousePosition.X == 32) && (ir.Event.MouseEvent.dwMousePosition.Y == 283) && (ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)) { system("cls"); cout << " Ihr Habt 10 Versuche gewaehlt" << endl; max_versuche = 20; ZahlenRaten(); }else if((ir.Event.MouseEvent.dwMousePosition.X == 32) && (ir.Event.MouseEvent.dwMousePosition.Y == 284) && (ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)) { system("cls"); cout << " Ihr gebt eure Eigene Versuchsanzahl an" << endl; Versuche_Eigene(); }else if((ir.Event.MouseEvent.dwMousePosition.X == 32) && (ir.Event.MouseEvent.dwMousePosition.Y == 285) && (ir.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)) { exit(0); }else if((x == 3) && (y == 280)) { cout << "Position: X=" << ir.Event.MouseEvent.dwMousePosition.X << " Y=" << ir.Event.MouseEvent.dwMousePosition.Y<< endl; }