窓ふき

雑巾で窓をふいてきれいにするだけのゲームです。マウスを押しながら移動すると雑巾がけをします。
クラスに慣れるためのシンプルなサンプルです。
wipeclean

1つの汚れをDirtクラスで表現しています。最初の汚れ度合いは25とし、マウスが半径30位内の場所に来た時に汚れを落としています。cleanメソッドで汚れを落とし、paintメソッドで汚れを描画しています。

  • setupメソッドでは画像を読み込むとともに、汚れオブジェクトを200個生成しています。汚れはArrayListで管理しています。
  • paintメソッドでは背景画像を描画したあと、for文を使って汚れDirtを描画し、マウスが押下されているときに雑巾の画像を描画しています。
  • mouseDraggedメソッドでは、マウスの座標を引数として、すべてのDirtオブジェクトのcleanメソッドを呼び出しています。
    時間制限を設けるなどのゲーム性を設けてもよいかもしれません。
class Dirt {
  PVector pos;
  int count = 25;
  Dirt() {
    pos = new PVector(random(width), random(height));
  }
  void clean(float x, float y) {
    if (count > 0 && dist(x, y, pos.x, pos.y) < 30){
      count--;
    }
  }
  void paint(){
    if (count > 0) {
      fill(0, count*10);
      ellipse(pos.x,pos.y, 100, 100);
    }
  }  
}

ArrayList<Dirt> spots = new ArrayList<Dirt>();
PImage window, zoukin;

void setup(){
  size(729, 729);
  window = loadImage("window.png");
  zoukin = loadImage("zoukin.png");
  noStroke();
  for(int i = 0 ; i < 200 ; i++){
    spots.add(new Dirt());
  }
}

void draw(){
  background(255);
  imageMode(CORNER);
  image(window, 0, 0);
  for(Dirt d : spots){
    d.paint();
  }
  if (mousePressed) {
    imageMode(CENTER);
    image(zoukin, mouseX, mouseY);
  }
}

void mouseDragged(){
  for(Dirt d : spots) {
    d.clean(mouseX, mouseY);
  }
}