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ürzt

    DWORD 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 anstatt system("cls"); .

    Und hast du ueberhaupt auch nur eine Zeile Code von dem verstanden, was mouseInit() oder showCursor() 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 nix

    mouseInit(); 
        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;
    				}
    

Anmelden zum Antworten