Game-Apps für Smartphones und Tablets

Bern University oh Teacher Education  
HomeOnline-Editor startenDruckenAndroid-TurtlegrafikJava-Online

Memory

 

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.

 

Beispiel im Online-Editor bearbeiten

App installieren auf Smartphone oder Tablet

QR-Code

Sources downloaden (Memory.zip)

 

 

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 = 0; i < 8; i++)
    {
      cards[i] = new MemoryCard(i);
      cards[15 - i= new MemoryCard(i);
    }
    for (int = 0; i < 16; i++)
    {
      cards[i].show(1);
      addActorNoRefresh(cards[i], getRandomEmptyLocation());
    }
    refresh();
    addTouchListener(thisGGTouch.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