mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Peter B. (funkheld)


Bewertung
-2 lesenswert
nicht 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)


Bewertung
5 lesenswert
nicht lesenswert
Schließ mal jeden case mit break ab. Dann klappts auch mit den Sprites 😀

von Peter B. (funkheld)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfe.

Gruss

von cppbert (Gast)


Bewertung
1 lesenswert
nicht 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
case 0
case 1
case 2:
  blub(); <-- kommt bei 0,1,2
  break;
case 3:
  tralala(); <-- kommt bei 3
  break;

von Nico W. (nico_w)


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

von cppbert (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Da wird ja wieder geistig von der Hand in den Mund programmiert.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.