Forum: PC-Programmierung Sprite bewegt sich nicht mit "A" und "W" ?


von Peter B. (funkheld)


Lesenswert?

Hallo,guten Tag.

Das Sprite bewegt sich nicht mit den Buchstaben "A" nach links und "W" 
nach oben.
Nur mit "S" nach unten und mit "D" nach rechts.

Was ist da bitte falsch?

Danke.

---------------------------------------------
#include <dos.h>
#include <conio.h>
#include <iostream.h>
#include <ctype.h>

#define VIDEO_SEGMENT  0xA000
#define SCREEN_WIDTH   320

void SetTextMode ()
{
    _AH = 0;
    _AL = 0x03;
    geninterrupt (0x10);
}

void SetMode13h ()
{
    _AH = 0;
    _AL = 0x13;
    geninterrupt (0x10);
}

void PutPixel (int x, int y, unsigned char color)
{
    pokeb (VIDEO_SEGMENT, (y * SCREEN_WIDTH) + x, color);
}

void sprite(int zx ,int zy)
{
  int x,y;

  for (y = zy; y <= zy+16; y++)
   {
    for (x =zx+32; x <= zx+16+32; x++)
    {
      PutPixel (x,y,14);
    }
  }
}

int main ()
{
    int x, y, zx ,zy;
    char cmd;

    SetMode13h ();

     zx=150;
     zy=100;
     sprite(zx,zy);

      do
      {
        cmd = toupper(getch());

        switch (cmd)
        {
         case 'W': zy=zy-2;
         case 'S': zy=zy+2;
         case 'A': zx=zx-2;
         case 'D': zx=zx+2;
         case 'E':break;
        }

        sprite(zx,zy);

    } while (cmd != 'E');

    SetTextMode();
}
-------------------------------------------------------

: Bearbeitet durch User
von Hermann G. (df2ds)


Lesenswert?

Schließ mal jeden case mit break ab. Dann klappts auch mit den Sprites ?

von Peter B. (funkheld)


Lesenswert?

Ahhh....danke.

Jetzt funktioniert es.

Ich dachte mit break verlässt man die ganze Whileschleife und das 
Programm beendet sich.

Gruss

von Rolf M. (rmagnus)


Lesenswert?

break wirkt bei Schleifen und bei switch, aber es springt immer nur eine 
Ebene raus, also in dem Fall nur aus dem Switch.

von Peter B. (funkheld)


Lesenswert?

Danke für die Hilfe.

Gruss

von cppbert (Gast)


Lesenswert?

Peter B. schrieb:
> Ich dachte mit break verlässt man die ganze Whileschleife und das
> Programm beendet sich.

wenn du nach dem case kein break machst kommst du ins nächste case
1
case 0
2
case 1
3
case 2:
4
  blub(); <-- kommt bei 0,1,2
5
  break;
6
case 3:
7
  tralala(); <-- kommt bei 3
8
  break;

von Nico W. (nico_w)


Lesenswert?

Warning beim Compiler einschalten kann auch helfen. Afaik ab GCC 
7.irgendwas wird dann auch ein implicit fall through angemeckert.

von cppbert (Gast)


Lesenswert?

Nico W. schrieb:
> Warning beim Compiler einschalten kann auch helfen. Afaik ab GCC
> 7.irgendwas wird dann auch ein implicit fall through angemeckert.

Aber ganz bestimmt nicht bei seinem Turbo C 3 :)

von Fehlanzeige (Gast)


Lesenswert?

Da wird ja wieder geistig von der Hand in den Mund programmiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.