Benutzer-Werkzeuge

Webseiten-Werkzeuge


api:projects:minesweeper:zelle:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
api:projects:minesweeper:zelle:start [2020/12/28 19:40] – angelegt Martin Pabstapi:projects:minesweeper:zelle:start [2021/12/29 11:29] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 ====== Projekt Minesweeper: Die Klasse Zelle ====== ====== Projekt Minesweeper: Die Klasse Zelle ======
 [[../start|Zurück zur Hauptseite des Projekts Minesweeper]] \\ \\  [[../start|Zurück zur Hauptseite des Projekts Minesweeper]] \\ \\ 
 +
 +Ein Objekt der Klasse Zelle stellt eine quadratische Zelle des Spielfelds dar. Mithilfe der Methode ''setZustand(int zellbild, boolean zugedeckt, boolean mitFahne)'' kann man sie in verschiedene Zustände versetzen. Dabei ist ''zellbild'' einer der in der Klasse ''ZellBild'' definierten ''int''-Werte. Hat ''zugedeckt'' den Wert ''true'', so ist die Zelle zugedeckt. Hat ''mitFahne'' den Wert ''true'', so wird auf der zugedeckten Zelle das Bild einer Fahne dargestellt.
  
 <HTML> <HTML>
Zeile 6: Zeile 8:
  
 <script type="text/plain" title="Zelle.java"> <script type="text/plain" title="Zelle.java">
 +// Kurzes Hauptprogramm zum Testen der Klasse Zelle und ihrer Methoden
 +Zelle zelle1 = new Zelle(0, 0, 0);
 +Zelle zelle2 = new Zelle(3, 2, 0);
 +
 +zelle1.aufdecken();
 +zelle2.setZustand(15, true, true);
 +
 +// Indizes der Sprites für die verschiedenen Zellbilder
 +class ZellBild {
 +   static int mine = 0;
 +   static int mine_entschärft = 1;
 +   static int mine_explodiert = 2; 
 +   static int fahne = 3;
 +   static int zahl_0 = 5;
 +   static int zahl_8 = 13;
 +   static int hintergrund_leer = 15;
 +   static int zugedeckt = 16;
 +}
 +
 +/**
 + * Die Klasse Zelle repräsentiert eine quadratische Zelle des Spielfeldes. Sie wird mithilfe von 
 + * zwei Sprites gezeichnet: dem Hintergrund (Zell-Objekt ist selbst ein Sprite) und dem Vordergrund 
 + * (gleichnamiges Attribut).
 + */
 +class Zelle extends Sprite {
 +   
 +   private int inhalt;          // Sprite-Index des Zell-Bildes, siehe Klasse ZellBild
 +
 +   private boolean zugedeckt;   // == true, solange die Zelle noch nicht aufgedeckt ist
 +   private boolean fahne;       // == true, falls die Zelle mit einer Fahne markiert ist
 +
 +   private Sprite vordergrund;
 +
 +   private int spalte;          // Position der Zelle auf dem Spielfeld
 +   private int zeile;
 +
 +   Zelle(int zustand, int spalte, int zeile) {
 +      super(spalte * 16 + 20, zeile *16 + 20, SpriteLibrary.Minesweeper, ZellBild.hintergrund_leer, ScaleMode.nearest_neighbour);
 +      vordergrund = new Sprite(spalte * 16 + 20, zeile *16 + 20, SpriteLibrary.Minesweeper, ZellBild.zugedeckt, ScaleMode.nearest_neighbour);
 +      this.spalte = spalte;
 +      this.zeile = zeile;
 +      setZustand(zustand, true, false);
 +   }
 +
 +   public int getInhalt() {
 +      return inhalt;
 +   }
 +
 +   public int getZeile() {
 +      return zeile;
 +   }
 +
 +   public int getSpalte() {
 +      return spalte;
 +   }
 +
 +   public boolean istZugedeckt() {
 +      return zugedeckt;
 +   }
 +
 +   public boolean hatFahne() {
 +      return fahne;
 +   }
 +
 +   /**
 +    * Ändert sich der Zustand der Zelle, so sorgt die Methode setZustand dafür,
 +    * dass die Bilder der Sprites entsprechend gesetzt werden.
 +    */
 +   public void setZustand(int inhalt, boolean zugedeckt, boolean fahne) {
 +      if(zugedeckt) {
 +         if(fahne) {
 +            vordergrund.setImageIndex(ZellBild.fahne);
 +         } else {
 +            vordergrund.setImageIndex(ZellBild.zugedeckt);
 +         }
 +      } else {
 +         vordergrund.setImageIndex(inhalt);
 +      }
 +      this.zugedeckt = zugedeckt;
 +      this.fahne = fahne;
 +      this.inhalt = inhalt;
 +   }
 +
 +   public void destroy() {
 +      super.destroy();
 +      vordergrund.destroy();
 +   }
 +
 +   /**
 +    * Wird vom Browser aufgerufen, wenn der Mauszeiger sich von außen in die Zelle hineinbewegt
 +    */
 +   public void onMouseEnter(double x, double y) {
 +      if(zugedeckt) {
 +         vordergrund.tint("#ff8080");
 +         getWorld().setCursor("pointer");
 +      }
 +   }
 +
 +   /**
 +    * Wird vom Browser aufgerufen, wenn der Mauszeiger sich aus der Zelle
 +    * hinausbewegt.
 +    */
 +   public void onMouseLeave(double x, double y) {
 +      vordergrund.tint("#ffffff"); 
 +      getWorld().setCursor("default");
 +   }
 +   
 +   /**
 +    * Wird vom Browser aufgerufen, wenn eine der Maustasten nach unten gedrückt wird.
 +    */
 +   public void onMouseDown(double x, double y, int key) {
 +      vordergrund.tint("#ff0000");
 +   }
 +
 +   /**
 +    * Wird vom Browser aufgerufen, wenn eine der Maustasten losgelassen wird.
 +    */
 +   public void onMouseUp(double x, double y, int key) {
 +   }
 +
 +   public void aufdecken() {
 +      setZustand(inhalt, false, false);
 +   }
 +
 +}
 </script> </script>
 </div> </div>
 </HTML> </HTML>
api/projects/minesweeper/zelle/start.1609180812.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki