====== Knopfdruck/Input verarbeiten ====== Da wir nun erstmal Gebilde auf den Bildschirm gebracht haben, wäre es nun noch schön, wenn wir diese Gebilde auch zum Beispiel auf dem Bildschirm bewegen könnten, in Abhängigkeit von Benutzereingaben. Schließlich soll ein Spiel interaktiv sein. Die Knöpfe werden ebenfalls in einem Register jeweils als Bit repräsentiert. Das Register hat die Adresse //0x04000130//. Wenn wir darauf einen Integer-Zeiger legen und mit dem Bit, was uns interessiert verunden, können wir abfragen ob ein Knopf gedrückt wurde oder nicht. Die Knöpfe haben dabei folgenden "Wert": ^ Knopf ^ "Wert" ^ | A | 1 | | B | 2 | | SELECT | 4 | | START | 8 | | Steuerkreuz Rechts | 16 | | Steuerkreuz Links | 32 | | Steuerkreuz Hoch | 64 | | Steuerkreuz Runter | 128 | | R | 256 | | L | 512 | Das können wir also so als Konstanten in einer Header-Datei definieren; die Verwendung der Konstanten wird es uns deutlich einfacher machen, den geschriebenen Code später wieder zu lesen. #define KEY_A 1 #define KEY_B 2 #define KEY_SELECT 4 #define KEY_START 8 #define KEY_RIGHT 16 #define KEY_LEFT 32 #define KEY_UP 64 #define KEY_DOWN 128 #define KEY_R 256 #define KEY_L 512 Wollen wir nun überprüfen ob ein Knopf gedrückt wurde, so genügt es den Inhalt des oben genannten Registers mit dem Wert der Knöpfe zu vergleichen. Wollen wir zum Beispiel wissen, ob das A-Knopf gedrückt wurde, dann geht das so: int* keys=(int*) 0x04000130; if ( !(*keys&KEY_A) ) { /** **/ } Wollen wir mehrere Knöpfe gleichzeitig abfragen (zum Beispiel sollen gleichzeitig die zwei Schultertasten gedrückt werden), dann verknüpft man die Abfragen mit dem logischen UND-Operator: int* keys=(int*) 0x04000130; if ( !(*keys&KEY_R) && !(*keys&KEY_L) ) { /** **/ }