対戦エアホッケー

右の画面はただのイメージです. http://istlab.info/qwik/jpbl/14.files/airhockey.png

  • 上下に分かれて対戦します.
  • 上の人は,マウスで操作(ハンデとして,左右反対)
  • 下の人は,左右キーで操作(a-zのキーでも動かせます)
  • 一度,画面をクリックしないと,キーはつかえません.
class Bar{
  int x,y,w,h;
  Bar(int _x, int _y, int _w, int _h){
    x = _x; y = _y; w = _w; h = _h;
  }
  void draw(){
    fill(40,100); //灰色だけど透明度(255-100)
    rect(x,y,w,h);
  }
  void check(){
    if (x <= p.x && p.x <= (x+w)){
      if (y <= p.y && p.y <= (y+h)){
        p.vy = -p.vy;
      }
    }
  }
}
class Ball{
  int x,y,r;
  int vx,vy;
  Ball(int _x, int _y, int _r){
    x = _x; y = _y; r = _r;
    vx = -2;
    vy = -2;
  }
  void draw(){
    fill(255,10,10);
    ellipse(x,y,r,r);
  }
  void move(){
    x = x + vx;
    y = y + vy;
    if (x < 0 || x > width) vx = -vx;
  }
}

Bar b1, b2;
Ball p;

void setup() {
  size(300, 300);//最初にかならずサイズを設定する
  stroke(0);
  fill(0);
  textFont(createFont("Arial",24));
  frameRate(20);
  
  b1 = new Bar(10,20,50,10);
  b2 = new Bar(10,height-30,50,10);
  
  p = new Ball(width/2,height/2,10);
  
}
void draw(){
  background(200);

//まず,移動と跳ね返りを計算
  p.move();
  b1.check();
  b2.check();
//その後,描画
  p.draw();
  b1.draw();
  b2.draw();
  
}
void mouseMoved(){
  b1.x = width-mouseX;
}
void keyPressed(){
  if (key == CODED){
    if (keyCode == LEFT) b2.x = b2.x - 10;
    if (keyCode == RIGHT) b2.x = b2.x + 10;
  } else {
    b2.x = (key-'a')*10; //a-zのキーでも操作できる
  }
}
Last modified: 2014-04-05 Attached files total: 1MB