Code wird nicht erreicht



  • Hallo,
    Ich habe bei einer if-Anweisung ein Problem. Und zwar werden if-Anweisungen nicht erreicht sonder einfach übersprungen. Habe im vc2010 Haltepunkte gesetzt und gesehen dass er einfach von der ersten Konsolenausgabe zur nechsten springt ohne die Bedingungen überhaubt zu prüfen.
    Habe dazu mal ein bild mit reingepackt.

    http://s1.directupload.net/file/d/3304/kwuw3ipg_png.htm

    Hoffe mir kann wer helfen, ich weiss nähmlich nicht, auch nach googlen, was ich tun soll.

    LG

    Cata



  • Was der Debugger meldet wird dann wohl stimmen. Ist der Optimizer eingeschaltet? Kann der Compiler erkennen, dass die Werte so nie vorhanden sein können?

    Nur mit einem Bild von einem Codeschnipsel kann man nicht viel sagen.


  • Mod

    if (spieler == 1) spieler = 2;
    if (spieler == 2) spieler = 1;
    

    Das macht nicht das, was du möchtest.



  • SeppJ schrieb:

    if (spieler == 1) spieler = 2;
    if (spieler == 2) spieler = 1;
    

    Das macht nicht das, was du möchtest.

    Klar, wenn spieler vorher gleich 1 ist, dann ists auch nachher gleich 1, aber zwischendurch mal kurz 1...



  • @ SeppJ
    Ups, stimmt. Ändert ja aber nichts an meinem Problem.

    @manni66
    Die Werte können stimmen. Ich kann ja auch gerne mal den ganzen Code hier reinstellen. Ist aber natürlich noch nicht fertig 😉
    Es sollte ein kleines tic tac tou mit der SDL werden.

    #include <SDL.h>
    #include <SDL_ttf.h>
    
    #include <iostream>
    
    int Spielfeld[2][2];
    int Spieler = 1;
    bool SpielEnde = false;
    
    bool GameRunn = true;
    SDL_Event event;
    SDL_Surface *screen = NULL;
    
    SDL_Surface *Feld = NULL;
    SDL_Rect FeldPosition;
    SDL_Surface *Kreis = NULL;
    SDL_Rect KreisPosition;
    SDL_Surface *Kreuz = NULL;
    SDL_Rect KreuzPosition;
    SDL_Surface *pos = NULL;
    SDL_Rect posPosition;
    
    bool keyPressed[SDLK_LAST];
    
    double P1;
    double P2;
    
    void BildErstllen(int x, int y, SDL_Surface* source, SDL_Surface* destination)
    {
    	SDL_Rect rect;
    	rect.x = x;
    	rect.y = y;
    
    	SDL_BlitSurface(source,NULL,destination,&rect);
    }
    
    int main(int argc, char* argv[])
    {
    	//initialisieren
    	SDL_Init(SDL_INIT_VIDEO);
    	TTF_Init();
    
    	//Daten Laden
    	screen = SDL_SetVideoMode(450,475,32,SDL_SWSURFACE);
    	Feld = SDL_LoadBMP("Feld.bmp");
    	Kreis = SDL_LoadBMP("Kreis.bmp");
    	Kreuz = SDL_LoadBMP("Kreuz");
    	pos = SDL_LoadBMP("pos.bmp");
    
    	//Standartwerte setzen
    	FeldPosition.x = 25;
    	FeldPosition.y = 50;
    	posPosition.x = 195;
    	posPosition.y = 220;
    
    	//Loop
    	while(GameRunn)
    	{
    		memset(keyPressed, 0, sizeof(keyPressed));
    
    		if(SDL_PollEvent(&event))
    			switch(event.type)
    			{
    				case SDL_QUIT:
    					GameRunn = false;
    					break;
    				case SDL_KEYDOWN:
    					keyPressed[event.key.keysym.sym] = true;
    					break;
    				case SDL_KEYUP:
    					keyPressed[event.key.keysym.sym] = false;
    					break;
    			}
    
    		if((keyPressed[SDLK_LEFT]) && (posPosition.x != 80)) posPosition.x -= 115;
    		if((keyPressed[SDLK_RIGHT]) && (posPosition.x != 310)) posPosition.x += 115;
    		if((keyPressed[SDLK_UP]) && (posPosition.y != 105))  posPosition.y -= 115;
    		if((keyPressed[SDLK_DOWN]) && (posPosition.y !=335)) posPosition.y += 115;
    
    		if(keyPressed[SDLK_RETURN])
    		{
    			std::cout << "keyPresses[SDLK_RETURN] true";
    			if((posPosition.x == 80) && (posPosition.y == 105)) 
    				Spielfeld[0][0] == Spieler;
    			if((posPosition.x == 195) && (posPosition.y == 105))
    				Spielfeld[1][0] == Spieler;
    			if((posPosition.x == 310) && (posPosition.y == 105))
    				Spielfeld[2][0] == Spieler;
    			if((posPosition.x == 80) && (posPosition.y == 220))
    				Spielfeld[0][1] == Spieler;
    			if((posPosition.x == 195) && (posPosition.y == 220))
    				Spielfeld[1][1] == Spieler;
    			if((posPosition.x == 310) && (posPosition.y == 220))
    				Spielfeld[2][1] == Spieler;
    			if((posPosition.x == 80) && (posPosition.y == 335))
    				Spielfeld[0][2] == Spieler;
    			if((posPosition.x == 195) && (posPosition.y == 335))
    				Spielfeld[1][2] == Spieler;
    			if((posPosition.x == 310) && (posPosition.y == 335))
    				Spielfeld[2][2] == Spieler;
    
    			if (Spieler == 1) Spieler = 2;
    			else
    			if (Spieler == 2) Spieler = 1;
    
    			std::cout << "Spieler " << Spieler << " ist dran" << std::endl; 
    		}
    
    		//Überprüfung
    		if ((Spielfeld[0][0] == Spieler) && (Spielfeld[1][0] == Spieler) && (Spielfeld[2][0] == Spieler))
    			SpielEnde = true;
    		if ((Spielfeld[0][1] == Spieler) && (Spielfeld[1][1] == Spieler) && (Spielfeld[2][1] == Spieler))
    			SpielEnde = true;
    		if ((Spielfeld[0][2] == Spieler) && (Spielfeld[1][2] == Spieler) && (Spielfeld[2][2] == Spieler))
    			SpielEnde = true;
    		if ((Spielfeld[0][0] == Spieler) && (Spielfeld[0][1] == Spieler) && (Spielfeld[0][2] == Spieler))
    			SpielEnde = true;
    		if ((Spielfeld[1][0] == Spieler) && (Spielfeld[1][1] == Spieler) && (Spielfeld[1][2] == Spieler))
    			SpielEnde = true;
    		if ((Spielfeld[2][0] == Spieler) && (Spielfeld[2][1] == Spieler) && (Spielfeld[2][2] == Spieler))
    			SpielEnde = true;
    		if ((Spielfeld[0][0] == Spieler) && (Spielfeld[1][1] == Spieler) && (Spielfeld[2][2] == Spieler))
    			SpielEnde = true;
    		if ((Spielfeld[2][0] == Spieler) && (Spielfeld[1][1] == Spieler) && (Spielfeld[0][2] == Spieler))
    			SpielEnde = true;
    
    		if(SpielEnde)
    			std::cout << "Spieler " << Spieler << " hat gewonnen";
    
    		//Fensterinhalt
    		SDL_FillRect(screen,0,SDL_MapRGB(screen->format, 0, 0, 255));
    		SDL_BlitSurface(Feld, 0, screen, &FeldPosition);
    		SDL_BlitSurface(pos,0, screen, &posPosition);
    
    		if (Spielfeld[0][0] == 1)
    			SDL_BlitSurface(Kreis,0,screen, &posPosition);
    		//Fenster anzeigen
    		SDL_Flip(screen);
    	}
    
    	//Beenden
    	TTF_Quit();
    	SDL_Quit();
    	return 0;
    }
    


  • Du hast mehrere Zeilen mit Code nach folgendem Prinzip drin:

    if((posPosition.x == 80) && (posPosition.y == 105))
        Spielfeld[0][0] == Spieler;
    

    Dort hast du offenbar den Vergleichsoperator mit dem Zuweisungsoperator verwechselt. Im Rumpf des ifs steht also nur ein Ausdruck ohne Effekt (in C++ zulässig), der aber vermutlich wegoptimiert wurde. Das könnte auch der Grund sein, warum der Debugger meint, dass am Haltepunkt kein ausführbarer Code vorhanden ist.



  • @GyroGearloose
    Ich weiss leider nicht genau was du meinst..
    Dort wird doch geprüft ob posPosition.x gleich 80 ist und posPosition.y gleich 105.
    Wie würde der code denn dann aussehen?

    LG


  • Mod

    Cata schrieb:

    @GyroGearloose
    Ich weiss leider nicht genau was du meinst..
    Dort wird doch geprüft ob posPosition.x gleich 80 ist und posPosition.y gleich 105.
    Wie würde der code denn dann aussehen?

    LG

    Es geht um das, was danach kommt.



  • Ups.. Warum ist mir das nicht aufgefallen... (facepalm)

    Danke für die mühen. 🙂


Anmelden zum Antworten