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.
-
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
-
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.
