Keyboard input mit Grafikbibliothek Allegro



  • Hallo zusammen,

    Ich programmiere gerne Spiele mit der Grafikbibliothek Allegro.
    Momentan versuche ich meine eigene Keyboard-Input Funktion zu schreiben,
    da sowas aus irgendeinem für mich nicht ganz ersichtlichen Grunde in
    Allegro nicht vorhanden ist.

    Ich erstelle eine struktur, in der die verschiedenen ASCII codes enthalten sind sowie ein char array, der das Wort am Ende speichern soll.

    Die Bedingung ((val & 0xff) == Letters.lettercode[x]) prüft, welcher Buchstabe gedrückt wurde und soll diesen anschließend in dem char array speichern.

    Allerdings überschreibt die for Schleife, die ich verwende das komplette Wort mit den gleichen Buchstaben, scheinbar wird sie jedesmal bis das Wort voll ist aufgerufen, wie muss ich es ändern, dass es das Wort vernünftig schreibt?

    Hier ist mein Code:

    #ifndef LETTERS_H_INCLUDED
    #define LETTERS_H_INCLUDED
    
    struct InputCode
    {
       int lettercode[74];
       char name[10];
    };
    
    #endif
    
    #include <stdio.h>
    #include <allegro.h>
    #include "Letters.h"
    
    int main(void)
    {
        // Allegro Initialisation
        allegro_init();
        install_keyboard();
        set_color_depth(16);
        set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
    
        BITMAP *buffer;
        buffer = create_bitmap(640 , 480);
    
        //Keystroke Wert
        int val;
    
        // ASCII Codes und Input
        struct InputCode Letters = {
                                        { 32, 33, 34, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 63, 65, 66,
                                          67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
                                          85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
                                          102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
                                          116, 117, 118, 119, 120, 121, 122
                                        },
    
                                        {"No Name"},
                                    };
    
        while (!key[KEY_ENTER] && (val = readkey()))
         {
         for (unsigned int y = 0; y < strlen(Letters.name); y++)
         {
          for (int x = 0; x < 74; x++)
          {
            if ((val & 0xff) == Letters.lettercode[x])
            {
             printf("Letter found!");
             Letters.name[y] = Letters.lettercode[x];
             break;
            }
           }
          }
    
             printf("The word is: %s", Letters.name);
    
         // Clears keybuffer
             clear_keybuf();
             blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
         }
    
        destroy_bitmap(buffer);
        return 0;
    }
    

    Vielen Dank im Voraus für jede Hilfe 😉


Log in to reply