0140 genomgång kap 7

Programmet gör

Nyckelpigan (Walker) kan flyttas med piltangenterna. Om nyckelpigan puttar på ett körsbär underifrån, flyttas samtliga körsbär uppåt.

Nyheter

  • Anrop av metod på annat objekt.

  • Datastrukturer i form av lista, klassen List.

  • Använda biblioteksklasser, i detta exemplet klassen List. Görs med import.

  • for-each-slinga

  • null

Koden följer nedan

Klassen Walker

import greenfoot.*;
import java.util.List;

/**
 * En nyckelpiga som kan flyttas med piltangenterna.
 * 
 * @author Rikard Karlsson
 * @version 2016-02-07
 */
public class Walker extends Actor
{
  /**
   * Anropas av Greenfoot varje gång som en ny filmruta 
   * ska ritas.
   */
  public void act() 
  {
    checkKeys();
  }
  /**
   * Kontrollera om någon piltangent är intryckt.  
   * Flytta i så fall i given riktning.
   */
  private void checkKeys()
  {
    if (Greenfoot.isKeyDown("up"))
    {
      setLocation(getX(), getY() - 5);
      checkIntersectionUp();
    }
    else if (Greenfoot.isKeyDown("down"))
    {
      setLocation(getX(), getY() + 5);
    }
    else if (Greenfoot.isKeyDown("left"))
    {
      setLocation(getX() - 5, getY());
    }
    else if (Greenfoot.isKeyDown("right"))
    {
      setLocation(getX() + 5, getY());
    }
  }
  /**
   * Flytta på alla körsbär uppåt, om nyckelpigan går på dem 
   * underifrån.
   */
  private void checkIntersectionUp()
  {
    if (isTouching(Cherry.class))
    {
      World theWorld = getWorld();
      List<Cherry> cherryList;
      cherryList = theWorld.getObjects(Cherry.class);
      if (cherryList != null)
      {
        for (Cherry currentCherry: cherryList)
        {
          currentCherry.moveUp(5);
        }
      }
    }
  }
}

Klassen Cherry

import greenfoot.*;

/**
 * Ett körsbär.
 * 
 * @author Rikard Karlsson
 * @version 2016-02-07
 */
public class Cherry extends Actor
{
  public void moveUp(int amount)
  {
    setLocation(getX(), getY() - amount);
  }
}