Game-Apps für Smartphones und Tablets |
|
Bern University oh Teacher Education |
16 Karten, von denen je zwei gleich sind, sind zu Beginn verdeckt aufgelegt. Zwei Spieler spielen abwechlungsweise und deckt mit einem Touch-Klick je zwei Karten auf. Das Ziel ist es, beim zweiten Klick die beim ersten Klick gewählte Karte zu finden. Wer mehr Karten aufgedeckt hat, hat gewonnen. Wenn Sie andere Memory-Karten verwenden möchten, müssen Sie die entsprechenden Sprite-Bilder auf die SD-Karte Ihres Smartphones spreichern. Eine Anleitung zur Verwendung von eigenen Bildern finden Sie unter Eigene Sprite-Bilder.
|
|
Programmcode:
// Memory.java package app.memory; import ch.aplu.android.*; import ch.aplu.android.GGNavigationListener.*; import ch.aplu.util.Monitor; import android.graphics.Color; public class Memory extends GameGrid implements GGTouchListener { private boolean isFirstCard = true; private MemoryCard card1; private MemoryCard card2; private MemoryCard[] cards = new MemoryCard[16]; int nb = 0; public Memory() { super(4, 4, cellZoom(115)); setScreenOrientation(ScreenOrientation.FIXED); } public void main() { for (int i = 0; i < 8; i++) { cards[i] = new MemoryCard(i); cards[15 - i] = new MemoryCard(i); } for (int i = 0; i < 16; i++) { cards[i].show(1); addActorNoRefresh(cards[i], getRandomEmptyLocation()); } refresh(); addTouchListener(this, GGTouch.click); while (true) { Monitor.putSleep(); delay(1000); card1.show(1); // Flip cards back card2.show(1); refresh(); setTouchEnabled(true); } } public boolean touchEvent(GGTouch mouse) { Location location = toLocation(mouse.getX(), mouse.getY()); MemoryCard card = (MemoryCard)getOneActorAt(location); if (card == null || card.getIdVisible() == 0) return true; card.show(0); // Show picture refresh(); if (isFirstCard) { isFirstCard = false; card1 = card; } else { isFirstCard = true; card2 = card; if (card1.getId() != card2.getId()) { setTouchEnabled(false); Monitor.wakeUp(); } } return true; } } class MemoryCard extends Actor { private int id; public MemoryCard(int id) { super("card" + id, "cardback"); this.id = id; } public int getId() { return id; } } |
Erklärungen zum Programmcode:
setScreenOrientation(ScreenOrientation.FIXED) | Das GameGrid-Fenster bleibt währen des ganzen Spieles im Hoch- bzw. Querformat, je nach dem in welcher Stellung es war, als das Spiel gestartet wurde. Das Bild dreht sich also nicht, wenn Smartphone gedreht wird (standardmässig ist es der Fall) |
Monitor.putSleep() | Haltet den Main-Thread an, bis die Karten zurückgedreht sind |
Monitor.wakeUp() | Der Main-Thread wird fortgesetzt |
setTouchEnabled(false) | Deaktiviert die Tauch-Events |