Infos zu GetDC()



  • Huhu, ich habe einen bot für minesweeper geschrieben...

    momentan sieht die hauptschleife so aus:

    //LETS DO THIS!!!!!
    
    //init spielfeld array
    char **paSpielfeld;
    paSpielfeld = new char*[gm[cGm].fieldW];
    for(int i = 0; i < gm[cGm].fieldW; i++)
    {
    	paSpielfeld[i] = new char[gm[cGm].fieldH];
    }
    //habe nun array -> paSpielfeld[gm[cGm].fieldW][gm[cGm].fieldH] <-
    int nPlayactions;
    int wins = 0;
    int games = 0;
    long nStartTimer = clock();
    long nTimer = clock();
    int delay = 60000;
    while(1)
    {
    
    	nTimer = clock();
    	if(nTimer-nStartTimer > delay && !pause)
    	{
    		pause = true;
    		printf("Wins in %i seconds: %i (%i games)\n", delay/1000, wins, games);
    	}
    	waw_WindowSetPos(hWinHandle,NULL,nX,nY);
    	if(!pause && waw_CompareColor(MINE,GetPixel(cDC,nX+139,nY+73)))
    	{
    // ACHTUNG hier überprüfe ich ob ich verloren habe, indem ich einen pixel von dem "smiley" vom spielneustartbutton mit der farbe schwarz vergleiche. dieser pixel ist nur dann schwarz, wenn man verloren hat!
    		//pause = true;
    		waw_MouseMoveToLinear(nX+140, nY+64, mouseSpeed);
    
    		waw_MouseClickLeft();
    
    		printf("I lost!\n"); 
    		Sleep(1);
    	}
    	if(!pause)
    	{
    //normaler zug
    		scanPlayfield(paSpielfeld, gm[cGm].fieldW, gm[cGm].fieldH, nX, nY);
    		nPlayactions = play(paSpielfeld, gm[cGm].fieldW, gm[cGm].fieldH, nX, nY);
    		if(nPlayactions == 0 && !pause)
    		{
    
    			//no action-> stuck!
    			//printf("No possible action found!\n");
    			//pause = true;
    			randomSelect(paSpielfeld, gm[cGm].fieldW, gm[cGm].fieldH, nX, nY);
    
    		}
    		else if(nPlayactions == -1 && !pause)
    		{
    			//newGame - alle felder sind verdeckt
    			printf("New Game Started!\n");
    			LeftClickField(rand() % gm[cGm].fieldW, rand() % gm[cGm].fieldH, nX, nY);
    			games++;
    		}
    		else if(nPlayactions == -2 && !pause)
    		{
    			// win - keine verdeckten felder mehr		
    			printf("I Win!!\n");
    			waw_MouseMoveToLinear(nX+140, nY+64, mouseSpeed);
    
    			waw_MouseClickLeft();
    			Sleep(1);
    			wins++;
    			//pause = true;
    		}
    
    	}
    
    	if ( GetAsyncKeyState( VK_F12 ) & 0x0001)
    	{
    		nStartTimer = clock();
    		nTimer = clock();
    		wins = 0;
    		games = 0;
    		printf("PAUSE toggled\n");
    		pause = !pause;
    	}
    
    	Sleep(1);
    }
    

    jetzt passiert aber häufiger folgendes:
    das ganze läuft die 60 sekunden wunderbar, dann starte ich es erneut indem ich f12 drücke und das geht auch erstmal ganz normal... aber so nach ca 2 minuten oder so bekomme ich nurnoch "I lost!" Oo vollkommen absurd, da ich auch keinen zusammenhang mit irgendeiner aktion feststellen konnte. es passiert einfach irgendwann. Den dc (hDc) hole ich mir vor der schleife ganz normal mit "GetDC(0)"

    ich finde keine andere erklärung, ausser das mit dem dc irgendwas nicht stimmt

    oder übersehe ich etwas?

    btw: der bot schafft so ca. 10 spiele / sekunde xD


Log in to reply