Kis feladat: játszunk egy játékot!

Képzeld, vannak játékok, amiket egyetlen gombbal kell játszani! Igaziból sok ilyen van, az egyik legegyszerűbb a Canabalt!

Menj ide http://www.adamatomic.com/canabalt/ a progi indításához. A szóköz gombbal tudsz ugrani, a feladatod az, hogy minél messzebbre juss.

Ha valami okból a Canabalt nem indul el, egy hozzá hasonló játék a T-rex runner.

Próbáld meg!

Figyeld meg, hogy az ugrás nagysága attól függ, mennyi ideig nyomod a szóközt. Hmm, de mi ezt nem tudtuk így csinálni... eddig.

A Canabalt játék

Azt kellene tenni, hogy amikor az A-starra kötött gombot megnyomják, küldjünk a gépnek egy "most megnyomták a szóközt" üzenetet. Aztán, ha elengedték, küldjünk egy "nincs semmi megnyomva" üzenetet. A gép tudni fogja, hogy amíg nem kapott "nincs semmi megnyomva" üzenetet, addig a gombon taposol.

Erre a println() helyett a press() metódust fogjuk használni, ami csak azt az üzenetet küldi be, hogy egy gombot megnyomtak (és még mindig nyomják). A release() metódus pedig azt az üzenetet küldi be, hogy a gombot elengedték. A releaseAll() pedig azt mondja a gépnek, hogy most minden gombot elengedtek.

A progit írd át, hogy szóközt küldjön okosan, majd ha a gombunkat elengedték, akkor egy "semmi sincs megnyomva" üzenetet:

void setup() {
    pinMode(0,INPUT_PULLUP);
    Keyboard.begin(); // indítsuk el az USB kezelését
}

void loop() {
    if (digitalRead(0)==0) {
        Keyboard.press(' ');        
        while(digitalRead(0)==0) {
            delay(10);
        }
        Keyboard.release(' ');        
    }
}

Na így már tudsz hatalmasakat ugrani!

Fontos: az A-star a gombnyomásokat abba az ablakba továbbítja, ami az aktív ablak. Ha a játék ablakára kattintasz, akkor a játékot vezérled, de ha mondjuk egy Word ablaka az aktív, akkor oda fog a programunk szóközöket írni. Kattints a játék ablakára tehát!

Kapd el a csillagot!

Egy másik aranyos egygombos játék a http://flabbyphysics.com/. Itt egy golyóval kell elkapni egy csillagot. Ehhez is a szóköz gomb kell: megnyomva a golyó alatti párnákat lehet összenyomni. Amikor elengeded a gombot, a párnák rugalmasan visszaalakulnak, és a golyót ellökik!

A Canabalt játék

Nagyon kafa!

Mutasd, mit tudsz a dobokon!

Menj ide http://makeymakey.com/bongos/ és itt találsz egy egyszerű dobolós flash progit. Kattints rá, és ezután a szóköz és a balra nyíl gombokkal tudsz játszani a két bongó dobon!

Játssz a bongón!

Természetesen, ha az A-starra rakott gombot nyomod meg, az is szóköz, és az is dobol. Miért ne kössünk még egy gombot a panelre, hogy mindkét dobot lehessen használni?

A másik gomb az 1-es port és a GND közé jön, és balra-nyíl gombot küld a gépnek. De hopp, mit írjunk be a balra nyílra? Olyan betű nincs is!

Igaziból nagyon-nagyon sok gomb van a gombozaton, aminek nincs betű megfelelője. Pld. a visszatörlés gombot, vagy a Shift gombot sem lehet egyszerűen a press()-ben használni, mert... mert nem tudod leírni a programban, hogy shift gomb.

Ezekre gondos kezek készítettek egy csomó konstanst nekünk. A KEY _ LEFT _ ARROW például a balra mutató nyíl kódja. Az összes speciális gombnak van egy-egy konstans.

void setup() {
    pinMode(0,INPUT_PULLUP);
    pinMode(1,INPUT_PULLUP);
    Keyboard.begin(); // indítsuk el az USB kezelését
}

void loop() {
    if (digitalRead(0)==0) {
        Keyboard.press(' ');        
        while(digitalRead(0)==0) {
            delay(10);
        }
        Keyboard.release(' ');        
    }

    if (digitalRead(1)==0) {
        Keyboard.press(KEY_LEFT_ARROW);        
        while(digitalRead(1)==0) {
            delay(10);
        }
        Keyboard.release(KEY_LEFT_ARROW);        
    }

}
Safri Duo - a dobok mesterei

Mit tanultunk ebből?

Igazából a gombozat gomb megnyomás és gomb elengedés üzeneteket küldözget, nem szövegeket. A legtöbb gombnak (pld. F12, Shift) nincs is szöveges megfelelője. Ezért használunk gomb-kódokat, mint pld. KEY_LEFT_ARROW a betűk helyett.