Unteres Fenster Ende wird nicht erkannt
-
Hallo,
ich will ein ganz simples snake Programm schreiben. Die "Schlange" soll wenn sie am rechten rand anlangt am linken wieder rauskommen, mit oben und unten das gleiche. Das mit links und rechts funktioniert super, nur oben und unten funktioniert nicht(außerdem startet die Schlange nach meinem befinden nicht genau in der Mitte wo sie sollte sondern ca. 30 Pixel tiefer(höhe bzw tiefe 300)). Wenn ich nun das Fenster größenverstellbar compiliere passiert das gleiche, nur wenn ich die größe verändere funktioniert es plötzlich. Hier ein bischen von meinem code:
... #define BREITE 300 #define HOEHE 300 class snake { public: int xPos; int yPos; int Radius; int Direct; // 0 = right, 1 = up, 2 = left, 3 = down void createsnake(){ xPos = BREITE / 2; yPos = HOEHE / 2; Radius = 5; Direct = 0; } void changeDirect(int Dir) { Direct = Dir; } }; ... hWnd = CreateWindow( szAppName, szAppName, WS_OVERLAPPED, CW_USEDEFAULT, CW_USEDEFAULT, BREITE, HOEHE, NULL, NULL, hInstance, NULL); ... In der WM_PAINT: if(_snake.xPos > BREITE - 2) _snake.xPos = 2; if(_snake.xPos < 2) _snake.xPos = BREITE - 2; if(_snake.yPos > HOEHE - 2) _snake.yPos = 2; if(_snake.yPos < 2) _snake.yPos = HOEHE - 2; ...Danke schonmal im Vorraus
<< Edit: warum wird V.o.r.raus zensiert?mfg nob
-
bin zwar ein anfänger in solchen sachen, aber mein erster gedanke ist, dass bei der höhe auch der rand oben mitgerechnet wird in der fenstergrösse..
kann aber auch total daneben liegen. währe aber ca 30pixel gross..
-
dann müßte der startpunkt der schlange 30 pixel weiter oben erscheinen

und die schlange irgendwann oben wieder raus kommen das macht sie aber leider ned
-
definiere breite und höhe nicht zu beginn, sondern speichere sie unter WM_SIZE:
xSize = LOWORD(lParam); ySize = HIWORD(lParam);so hast du immer die aktuellen werte und kannst auf grössenveränderungen des fensters reagieren.
-
Das Fenster soll aber nicht größenverstellbar sein, das war nur ein test ob es etwas mit dem WS_OVERLAPPED zu tun hat.

-
hab ja auch nicht gesagt, dass es größenverstellbar sein muss

-
dann brauch ich auch ned auf größenveränderungen zu reagieren bzw die aktuellen werte hab ich ja selbst definiert

-
... aber dabei nicht bedacht, dass dein Client-Bereich kleiner ist

-
jo das hab ich bemerkt. klärt leider immernoch nicht die frage warum es nicht funktioniert

-
Was genau funktioniert denn nicht bzw. was macht er - dein Code ist da irgendwie nicht besonders aufschlussreich...
-
Via Pfeiltasten kann man die Schlange in alle Richtungen steuern(nicht diagonal). Dazu hab ich nen Timer durch den je nach aktueller Richtung die x bzw y Koordinate erhöht bzw verringert wird. Wenn die Schlange nun auf den Rand trifft soll sie Gegenüber wieder raus kommen. Mehr soll erstmal nicht passieren. Zur hilfe kann ich auch den ganzen code posten weiß aber nichtmehr die Seite wo das ging, da er hierfür n bischen zu lang ist glaub ich.
Edit:
Fehler gefunden. Danke
-
Noch eine Frage. In welchem Header finde ich eine random Funktion? in der math.h scheint keine zu sein ausser sie hat einen anderen namen ?_?
-
vielleicht meinst du rand() ?!? in der time.h
http://cplus.kompf.de/artikel/random.html
-
Jou die ist ned schlecht. Aber kann man bei der RAND_MAX während des Programmablaufs auch inerhalb von Funktionen ändern? Ich brauche nämlich unterschiedliche Grenzen nach oben und die wechseln in der Funktion.
Thx
-
schreib doch anstatt rand_max einfach deine werte rein. benutz einfach mal die forensuche dann wirst sicher einiges brauchbares finden.