Variable ändert sich
-
Hallo zusammen
Ich bin neu hier, da ich mich für einen C++ Kurs angemeldet habe, möchte ich mich nun ein bisschen vorbereiten und bin daran ein Snake in C++ zu schreiben.
Leider habe ich das Problem, dass eine Variable irgendwoher geändert wird, aber ich finde nicht heraus wieso dies passiert.
Gibt es in Visual Studio 2008 eine möglichkeit einen Wert einer Variable zu überwachen und das Programm anzuhalten, sobald dies passiert ist?Es geht um die Variable PassCount vielleicht sieht ja irgendwer das Problem gleich.
// Snake_2009-12-09.cpp : Definiert den Einstiegspunkt f r die Konsolenanwendung. // #include "stdafx.h" #include <iostream> #include <string> #include "windows.h" #include <conio.h> using namespace std; int arrSpielfeld[80][24]; int arrOldSpielfeld[80][24]; //Breite 80 Spalten 0-79 //Hoehe 25 Zeilen 0-24 //Position der Schlange //maximale Länge = 50 int PosSnakeX[50]; int PosSnakeY[50]; //Richtung der Schlange --> Siehe Tasten int SnakeDirection = 75; //Anzahl Durchläufe int PassCount = 0; //Fehlercode 0 = OK / 1 = in Wand gefahren oder in die schlange selbst int ErrorCode = 0; //Spielgeschwindigkeit int GameSpeed = 1; //Drckbare Tasten als Konstanten definieren. #define KEY_UP 72 #define KEY_DOWN 80 #define KEY_LEFT 75 #define KEY_RIGHT 77 #define KEY_Q 113 #define KEY_P 112 //Wert 0 = Leeres Feld //Wert 1 = Kopf der Schlange //Wert 2 = Nachfolgende Segmente der Schlange //Wert 50 = Frucht //Wert 90 = Rand void PrintAtPosition(const char *c, int x, int y) { COORD Koordinaten; Koordinaten.X=x; //koordinaten x Koordinaten.Y=y; //koordinaten y //jetz position setzen SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Koordinaten ); cout << c; } void SyncField() { for (int i = 0; i < 80; i++) { for (int ii = 0; ii < 25; ii++) { arrOldSpielfeld[i][ii] = arrSpielfeld[i][ii]; } } } void DrawField() { char chr[] = " "; for (int i = 0; i < 80; i++) { for (int ii = 0; ii < 25; ii++) { if (arrSpielfeld[i][ii] != arrOldSpielfeld[i][ii]){ if (arrSpielfeld[i][ii] == 0){ chr[0] = ' '; } if (arrSpielfeld[i][ii] == 1){ chr[0] = 'Û'; } if (arrSpielfeld[i][ii] == 2){ chr[0] = '²'; } if (arrSpielfeld[i][ii] == 50){ chr[0] = '@'; } if (arrSpielfeld[i][ii] == 90){ chr[0] = 'Û'; } PrintAtPosition(&chr[0], i, ii); } } } } void InitFieldAndSnake() { //Ganzes Feld leeren char chr[] = " "; for (int i = 0; i < 80; i++) { for (int ii = 0; ii < 25; ii++) { arrSpielfeld[i][ii] = 0; } } //Oberer Balken for (int i = 0; i < 80; i++) { arrSpielfeld[i][0] = 90; } //Unterer Balken for (int i = 0; i < 80; i++) { arrSpielfeld[i][24] = 90; } //Linker Balken for (int ii = 0; ii < 25; ii++) { arrSpielfeld[0][ii] = 90; } //Rechter Balken for (int ii = 0; ii < 25; ii++) { arrSpielfeld[79][ii] = 90; } //Schlange initialisieren l„nge auf Zwei festsetzen PosSnakeX[0] = 40; PosSnakeY[0] = 10; for (int i = 1; i < sizeof(PosSnakeX) / sizeof(PosSnakeX[0]) ; i++) { PosSnakeX[i] = 0; PosSnakeY[i] = 0; } //Schlange im Spielfeld einsetzen arrSpielfeld[PosSnakeX[0]][PosSnakeY[0]] = 1; } void Move_Up() { for (int i = 0; i > sizeof(PosSnakeY) / sizeof(PosSnakeY[0]); i++ ) { PosSnakeY[i+1] = PosSnakeY[i]; } --PosSnakeY[0]; SyncField(); if (arrSpielfeld[PosSnakeX[0]][PosSnakeY[0]] == 0) { arrSpielfeld[PosSnakeX[0]][PosSnakeY[0]] = 1; } else { ErrorCode = 1; } DrawField(); SnakeDirection = KEY_UP; } void Move_Down() { for (int i = 0; i > sizeof(PosSnakeY) / sizeof(PosSnakeY[0]); i++ ) { PosSnakeY[i+1] = PosSnakeY[i]; } ++PosSnakeY[0]; SyncField(); if (arrSpielfeld[PosSnakeX[0]][PosSnakeY[0]] == 0) { arrSpielfeld[PosSnakeX[0]][PosSnakeY[0]] = 1; } else { ErrorCode = 1; } DrawField(); SnakeDirection = KEY_DOWN; } void Move_Left() { for (int i = 0; i > sizeof(PosSnakeX) / sizeof(PosSnakeX[0]); i++ ) { PosSnakeX[i+1] = PosSnakeX[i]; } --PosSnakeX[0]; SyncField(); if (arrSpielfeld[PosSnakeX[0]][PosSnakeY[0]] == 0) { arrSpielfeld[PosSnakeX[0]][PosSnakeY[0]] = 1; } else { ErrorCode = 1; } DrawField(); SnakeDirection = KEY_LEFT; } void Move_Right() { for (int i = 0; i > sizeof(PosSnakeX) / sizeof(PosSnakeX[0]); i++ ) { PosSnakeX[i+1] = PosSnakeX[i]; } ++PosSnakeX[0]; SyncField(); if (arrSpielfeld[PosSnakeX[0]][PosSnakeY[0]] == 0) { arrSpielfeld[PosSnakeX[0]][PosSnakeY[0]] = 1; } else { ErrorCode = 1; } DrawField(); SnakeDirection = KEY_RIGHT; } //Main int _tmain(int argc, _TCHAR* argv[]) { PassCount = 0; //_setcursortype(_NOCURSOR); //Array bef llen for (int i = 0; i < 80; i++) { for (int ii = 0; ii < 25; ii++) { arrSpielfeld[i][ii] = 1; } } //Array old mit anderen Werten bef llen for (int i = 0; i < 80; i++) { for (int ii = 0; ii < 25; ii++) { arrOldSpielfeld[i][ii] = arrSpielfeld[i][ii]+1; } } char chrArr[] = "1"; PrintAtPosition(chrArr , 12, 10); InitFieldAndSnake(); DrawField(); int i1 = 0; while(ErrorCode == 0) { PassCount++; switch(PassCount) { case 10: GameSpeed++; break; case 20: GameSpeed++; break; case 30: GameSpeed++; break; case 40: GameSpeed++; break; case 50: GameSpeed++; break; } /* PassCount++; if (PassCount == 10) { GameSpeed++; } */ if (_kbhit()) { i1 = _getch(); if (i1 != 224) { if (i1 == KEY_UP){ //cout << "KEY_UP" << endl; Move_Up(); } if (i1 == KEY_RIGHT){ Move_Right(); } if (i1 == KEY_LEFT){ Move_Left(); } if (i1 == KEY_DOWN){ Move_Down(); } if (i1 == KEY_Q){ cout << "KEY_Q" << endl; } if (i1 == KEY_P){ cout << "KEY_P" << endl; } Sleep( 1000/GameSpeed ); } continue; } else { if (SnakeDirection == KEY_UP){ //cout << "KEY_UP" << endl; Move_Up(); } if (SnakeDirection == KEY_RIGHT){ Move_Right(); } if (SnakeDirection == KEY_LEFT){ Move_Left(); } if (SnakeDirection == KEY_DOWN){ Move_Down(); } Sleep( 1000/GameSpeed ); } //gewisse Zeit Warten } //PrintAtPosition(chrArr , 12, 10); string Ausgabe = "Ups, das ging wohl zu schnell"; COORD Koordinaten; Koordinaten.X=10; //koordinaten x Koordinaten.Y=12; //koordinaten y SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Koordinaten ); cout << Ausgabe; system("PAUSE > NUL"); return 0; }Gruss Pardalis
-
Debugger(F5) + Breakpoint(F9) auf die Stelle setzen wo du den RAM-Wert der Variable haben möchtest,
-
Hallo
Danke für die Antwort, dies ist mir schon klar, aber gibt es keine Möglichkeit einen Wert einer Variable zu überwachen und bei einer Änderung zu stoppen?
Es geht mir darum die Variable PassCount zu überwachen, leider hat diese auf einmal den Wert 90 und nicht mehr 1 wie die Variable ursprünglich gesetzt wurde.Gruss Pardalis
-
if(PassCount != 1) std::cout<< "|Funktions- oder Blockname]" <<std::endl;
-
for (int i = 0; i < 80; i++) { for (int ii = 0; ii < 25; ii++) { arrSpielfeld[i][ii] = 0; } }Und wie gross war
arrSpielfelddoch gleich?Und verwende nicht so viele globale Variablen! Gerade diese sorgen dafür, dass Änderungen und Zugriffe von überall her erfolgen können und nur sehr schwer nachvollziehbar sind. Arbeite lieber mehr mit Funktionsparametern, dann kannst du Fehler lokal halten.
-
Besten Dank, werde mir das mit den Variablen zu Herzen nehmen

Nun funktionierts
-
Besten Dank, werde mir das mit den Variablen zu Herzen nehmen

Nun funktionierts