Pfeiltasten-/WASD-Steuerung in einem Array



  • Ich hab mal eine Frage...ich will Solitaire als Console-Application realisieren und bin jetz bei der Steuerung auf folgendes Problem gestoßen:

    - wenn ich [←] oder [A] betätige springt der cursor wie gewünscht nach links
    - wenn ich [↑] oder [W] betätige springt der cursor wie gewünscht nach oben

    Bis jetzt ist noch alles korrekt!

    aber sobald ich [→] bzw. [↓] oder [D] bzw. [S] drücke, macht das Programm einen Scheiß, entweder springt der Cursor total komisch oder der Cursor verschwindet.

    ich hoff ihr könnt mir helfen, da ich echt am Verzweifeln bin, da es logischerweise funktionieren müsste

    hier ist mein Quelltext:

    #include <cstdlib>
    #include <iostream>
    #include <conio.h>
    #include <stdio.h>
    #include <windows.h>
    
    #ifndef SPIEL_HPP
    #define SPIEL_HPP
    int Feld [7][7];
    
    int cspiel;
    
    void spielen()
    {
      bool back=true;
      system("cls");
      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
      printf("SPIEL STARTEN\n");
      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);
      printf("[M]enu\n");
      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6);
      printf("________________________________________________________________________________\n");
      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
      printf("Spiel ist noch in Arbeit!\n\n\n");
    
      //Jedem Teil int des Arrays wird einzeln der Wert zugewiesen
      for (int iy=0;iy<7;iy++)
      {
        for (int ix=0;ix<7;ix++)
        {
          Feld[ix][iy]=0;
        }
      }
    
      Feld[0][0]=2;
      Feld[0][1]=2;
      Feld[0][5]=2;
      Feld[0][6]=2;
      Feld[1][0]=2;
      Feld[1][1]=2;
      Feld[1][5]=2;
      Feld[1][6]=2;
      Feld[5][0]=2;
      Feld[5][1]=2;
      Feld[5][5]=2;
      Feld[5][6]=2;
      Feld[6][0]=2;
      Feld[6][1]=2;
      Feld[6][5]=2;
      Feld[6][6]=2;
      Feld[3][3]=1;
      //Ausgabe von "O" von den Teil int des Arrays wenn der Wert 7 ist und zwar in Feld Form
    
      while (back)
      {
        for (int iy=0;iy<7;iy++)
        {
          printf(" ");
    
          for (int ix=0;ix<7;ix++)
          {
            if (Feld[ix][iy]==0)
            {
              printf("  O");
            }
    
            else if (Feld[ix][iy]==2)
            {
              printf("   ");
            }
    
            else if (Feld[ix][iy]==1)
            {
              printf("  X");
            }
    
          }
          printf("\n\n"); // Zeilenwechsel
        }
        fflush(stdin);
        // Taste Egal welche wird mit entsprechendem Code gesp
        cspiel=getch();
        if (cspiel == 224 || cspiel == 0) cspiel=getch();
        for (int iy=0;iy<7;iy++)
        {
          for (int ix=0;ix<7;ix++)
          {
            switch (cspiel)
            {
            case 'w':
            case 72: //oben
              if (Feld[ix][iy]==1)
              {
                int iw=Feld[ix][iy];
                Feld[ix][iy]=Feld[ix][iy-1];
                Feld[ix][iy-1]=iw;
              }
              break;
            case 's':
            case 80: //unten
              if (Feld[ix][iy]==1)
              {
                int is=Feld[ix][iy];
                Feld[ix][iy]=Feld[ix][iy+1];
                Feld[ix][iy+1]=is;
              }
              break;
            case 'd':
            case 77: //rechts
              if (Feld[ix][iy]==1)
              {
                int ia=Feld[ix][iy];
                Feld[ix][iy]=Feld[ix+1][iy];
                Feld[ix+1][iy]=ia;
              }
              break;
            case 'a':
            case 75: //links
              if (Feld[ix][iy]==1)
              {
                int id=Feld[ix][iy];
                Feld[ix][iy]=Feld[ix-1][iy];
                Feld[ix-1][iy]=id;
              }
              break;
            case 27: //Taste ESC
              back=false;
              break;
            default:
              break;
            }
          }
        }
        system("cls");
      }
    
      //          break;
    }
    
    #endif
    


  • Ich sehe da so direkt nix. Aber probier da mal mit dem Debugger da durch zu gehen.



  • wat fürn debugger?



  • Den den du hast. z.Bsp. gdb.
    Welchen Compiler/IDE verwendest du denn?



  • ich verwend den Dev-C++


Anmelden zum Antworten