Arbeiten mit Klassen: ein simples Malprogramm zur Erklärung

Aus DDSWiki
Wechseln zu: Navigation, Suche
  • Wir erstellen ein einfaches Mal-Programm und lernen dabei den Mehrwert von Klassen zu schätzen.

Malprogramm.png

Video-Erklärung

Der Code aus den Videos zum selbst ausprobieren

Button farbButton = new Button("Rot", 1, 0, 0, 100, 50);
int farbe = 1;
int pinselStaerke = 1;
color col = color(255, 0, 0);

Button pinselButton = new Button("Pinsel: " + pinselStaerke, 2, farbButton.getWidth(), 0, 100, 50);

long buttonLastPressed = 0;

void setup() {
  size(800, 400);
  background(240);
}

void draw() {
  
  // Zeichnen eines Punktes bei gedrückter Maustaste
  if (mousePressed) {
    strokeWeight(pinselStaerke);
    stroke(col);
    point(mouseX, mouseY);
  }
  
  buttonAuswerten(farbButton.anzeigen());
  buttonAuswerten(pinselButton.anzeigen());
}

// Hilfsfunktion, die je Knopfzustand (gedrückt oder nicht) verschiedene Aktionen durchführt
void buttonAuswerten(int b) {
  switch(b) {
    case -1:
      // do nothing
      break;
    case 1:
      // Knopf mit Id #1 ist gedrückt
      if (millis() - buttonLastPressed>500) {
        println("KNOPF 1 GEDRÜCKT !!");
        farbe++;
        if (farbe>4) {
          farbe = 1;
        }
        if (farbe==1) {
          farbButton.setLabel("Rot");
          col = color(255,0,0);
        }
        if (farbe==2) {
          farbButton.setLabel("Grün");
          col = color(0,255,0);
        }      
        if (farbe==3) {
          farbButton.setLabel("Gelb");
          col = color(255,255,0);
        }        
        if (farbe==4) {
          farbButton.setLabel("Radierer");
          col = color(240);
        }            
        buttonLastPressed = millis();
      }  
      break;
    case 2:
      if (millis() - buttonLastPressed>500) {
        println("KNOPF 2 GEDRÜCKT !!");
        pinselStaerke++;
        if (pinselStaerke > 9) {
          pinselStaerke = 1;
        }
        pinselButton.setLabel("Pinsel: "+ pinselStaerke);
        buttonLastPressed = millis();
      }  
      break;
  } 
}

// Die Klasse Button
class Button {
  // Klassenvariablen
  String label;
  int id;
  int xPos, yPos, width_, height_;
  
  
  // Constructor
  Button(String l, int id_, int x, int y, int w, int h) {
    label = l;
    id = id_;
    xPos = x;
    yPos = y;
    width_ = w;
    height_ = h;
  }
  
  // Zeigt den Knopf am Canvas an
  // Gibt -1 zurück, wenn der Knopf nicht gedrückt ist
  // Gibt die Id des Knopfes zurück, wenn er gedrückt ist
  int anzeigen() {
    int r = -1;
    if ((mouseX>=xPos) && (mouseX<=xPos+width_) && (mouseY>=yPos) && (mouseY<=yPos+height_)) {
      stroke(204,102,0);
      fill(255);
      if (mousePressed) {
        fill(120);
        r = id;
      }
    } else {
      stroke(0,0,0);
      fill(255);
    }
    //fill(255);
    strokeWeight(1);
    rect(xPos, yPos, width_, height_);
    fill(0);
    textAlign(CENTER, CENTER);
    text(label, xPos+width_/2, yPos+height_/2);
    return r;
  }
  
  int getWidth() {
    return width_;
  }
  
  int getHeight() {
    return height_;
  }
  
  void setLabel(String l) {
    label = l;
  }
}