0180 Pacman

En förenklad version av Pacman kommer att implementeras.

Banan kommer att läsas in från fil.

Nu till lösningen steg för steg.

Lägg till klasser enligt figuren ovan.

Klassen Food

Konstruktor

  ny bild med storleken 4 x 4
  sätt färg till vit
  fyll en cirkel med diametern 4
  anropa setImage

Klassen Wall

Konstrukor

  /**
  * A blue rectangle.
  * @param width, the width counted in number of cells
  * @param height, the height counted in number of cells
  * @param cellSize, the size of a cell
  */

  // ny bild med storleken width * cellSize o height * cellSize
  // sätt färg till RGB(0, 0, 140)
  // fyll bild med denna färg
  // anropa setImage

Pacman

Kopiera de tre bilderna på pacman från Itslearning.

Välj lämplig bild. Mer instruktioner följer längre ner.

Textfilen levelOne.txt

Kopiera filen levelOne.txt från Itslearning till din projektmapp.

Eller ...

Skapa en fil som heter levelOne.txt Fyll den med följande innehåll:

  xxxxxxxxxxxxxxxxxxxxxxxxxxxx
  x............xx............x
  x.xxxx.xxxxx.xx.xxxxx.xxxx.x
  x.xeex.xeeex.xx.xeeex.xeex.x
  x.xxxx.xxxxx.xx.xxxxx.xxxx.x
  x..........................x
  x.xxxx.xx.xxxxxxxx.xx.xxxx.x
  x.xxxx.xx.xxxxxxxx.xx.xxxx.x
  x......xx....xx....xx......x
  xxxxxx.xxxxx.xx.xxxxx.xxxxxx
  eeeeex.xxxxx.xx.xxxxx.x     
  eeeeex.xx..........xx.x     
  eeeeex.xx.xxx   xxx.xx.x        
  xxxxxx.xx.xeeeeeex.xx.xxxxxx
  teeeee....xeegeeex....eeeeet
  xxxxxx.xx.xeeeeeex.xx.xxxxxx
  eeeeex.xx.xxxxxxxx.xx.x     
  eeeeex.xx..........xx.x
  eeeeex.xx.xxxxxxxx.xx.x
  xxxxxx.xx.xxxxxxxx.xx.xxxxxx
  x............xx............x
  x.xxxx.xxxxx.xx.xxxxx.xxxx.x
  x.xxxx.xxxxx.xx.xxxxx.xxxx.x
  x...xx........p.......xx...x
  xxx.xx.xx.xxxxxxxx.xx.xx.xxx
  xxx.xx.xx.xxxxxxxx.xx.xx.xxx
  x......xx....xx....xx......x
  x.xxxxxxxxxx.xx.xxxxxxxxxx.x
  x.xxxxxxxxxx.xx.xxxxxxxxxx.x
  x..........................x
  xxxxxxxxxxxxxxxxxxxxxxxxxxxx

Ta bort två inledande blanksteg på varje rad.

Klassen MyWorld

Lägg till följande metod.

  /**
  * Läs från fil.
  * namnge fil att läsa från
  */
  public void readFromFile(String file)
  {
      //Det kan uppstå fel vid läsning från fil.
      //Försöker göra koden i try-blocket nedan. Om något går fel i 
      //try-blocket körs koden
      //i catch-blocket som följer direkt efter try-blocket nedan
      try
      {
          //Skapa ett objekt av klassen FileReader, med filnamnet 
          //som parameter.
          //Genom detta objekt ges möjlighet att skapa en ström av 
          //tecken från filen fil.
          //Om filen redan finns i samma mapp som programmet öppnas 
          //en kanal till den. 
          //Om filen inte finns genereras ett fel som måste hanteras. 
          //Detta görs nedan i ett catch-block
          FileReader fr = new FileReader(file);

          //För att effektivisera läsningen från filen skapas en 
          //buffert. Kan då läsa från 
          //filen med jämna mellanrum istället för att läsa tecken 
          //för tecken.
          BufferedReader inFile = new BufferedReader(fr);

          //läs in texten från filen rad för rad och skriv ut den 
          //till terminalfönstret
          String row = inFile.readLine();
          int x = 0;
          int y = 0;
          while(row != null)
          {
              x = 0;
              //row.trim();//ta bort blanksteg
              if (row.length() != 0)//gör inget om det är blankrad
              {
                  //System.out.println(row);
                  char [] charsInRow = row.toCharArray();
                  for(char c : charsInRow)
                  {
                      // Skriv din kod här

                      // om c är lika med 'x'
                          addObject(new Wall(1, 1, CELL_SIZE), x, y);
                      // annars om c är 'p'
                          // lägg till ny pacman på x, y
                      // annars om c är '.'
                          // lägg till ny mat på x, y

                      x = x + 1;
                  }
              }
              row = inFile.readLine();
              y = y + 1;
          }
      //stäng strömmen av data från filen
      inFile.close();
      }
      //fånga felet: filen hittas ej
      catch(FileNotFoundException nfe)
      {
      System.out.println("File not found");
      }
      //fånga övriga fel
      catch(IOException ioe)
      {
      System.out.println("error; "+ ioe);
      }
  }

Konstruktor

Implementera nedanstående.

  super(28, 33, 16);
  //gör bakgrundsbilden svart genom att
  //hämta bakgrundsbild
  //sätt färg till svart
  //fyll bakgrundsbilden

  // anropa readFromFile med "levelOne.txt" som parameter

Testa att din värld ser ut ungefär som världen ovan.

Klassen Pacman igen

Objektvariabler

  nextDirection är ett heltal
  score är ett heltal

Konstruktor

  anropa setRotation - för att peka vänster
  nextDirektion blir 180
  score blir 0

Metoden act

  anropa move
  anropa eat
  anropa animate

Metoden move

  om pil upp
      nextDirection = 270
  om pil ner
      nextDirection = 90
  om pil vänster
      nextDirection = 180
  om pil höger
      nextDirection = 0

  om canMove nextDirection
      setRotation nextDirection
      move 1
  annars om canMove getRotation
      move 1

Metoden canMove

  /*
   * @param direction 0, 90, 180 or 270
   */
  public boolean canMove(int direction)
  {
      // -1, 0, eller 1
      int deltaX = (int)(Math.cos(Math.toRadians(direction)));

      // - 1, 0 eller 1
      int deltaY = (int)(Math.sin(Math.toRadians(direction)));

      om vägg finns vid offset deltaX, deltaY 
          returnera false
      annars
          returnera true
  }

Metoden eat

  om vidrör mat
      ta bort mat
      öka poäng med 10
      visa ny poäng

Metoden animate

Lägg till en objektvariabel time. Låt den vara 0 från start.

Implementera följande.

  om time är 0
      visa bild 0
      öka time med 1
  annars om time är 1
      visa bild 1
      öka time med 1
  annars om time är 2
      visa bild 2
      sätt time till 0

Lägg till mer

Lägg till mer efter eget huvud.

Gå över skärmkant

Gå ut till vänster och kom in till höger och vise versa.

Spöken

Körsbär