顯示具有 01160413_莊博鈞 標籤的文章。 顯示所有文章
顯示具有 01160413_莊博鈞 標籤的文章。 顯示所有文章

2015年6月30日 星期二

Week 18 期末作品

遊戲名稱:足球守門員

操作方式:遊戲一開始會有Start的圖示,之後按任意鍵即可開始遊戲,開始遊戲之後會偵測到粉紅色的畫面,畫面就是守門員的動作,然後利用身體去擋下白色的球,每擋下一球就得一分,失誤一球就結束遊戲。

遊戲畫面:



遊戲一開始的畫面




遊戲中守門員的畫面




遊戲結束畫面




2015年6月8日 星期一

Week 15

期末作業名稱:鬼影擒拿手

內容:

製作出一個足球遊戲,遊戲形式就是足球中的罰十二碼,讓玩家當守門員,然後再利用手去擋下對方踢過來的足球,考驗反應能力又可以運動。



2015年5月25日 星期一

Week 14



PImage imgCar;
float angle =0,dx=0,dy=0,vel=1;
void setup(){
  size(800,600,P3D);
  imgCar = loadImage("lambo.png");
}
void draw(){
  background(255);
  for(int i =-1;i<=8;i++){
    for(int j=-1;j<=6;j++){
      rect(i*100+dx%100,j*100+dy%100,100,100);
    }
  }
  pushMatrix();
    translate(width/2, height/2);
    rotateZ(angle);
    image(imgCar, -100,-100,200,200);
  popMatrix();
  dx=-vel*cos(angle);
  dy=-vel*sin(angle);
}
void mouseMoved(){
  int x=mouseX-pmouseX;
  int y=mouseY-pmouseY;
  if(x>0) angle+=1/40.0;
  if(x<0) angle-=1/40.0;
}
void keyPressed(){
  if(key=='l')angle++;
  if(key=='r')angle--;
  if(keyCode==UP)vel*=1.1;
  if(keyCode==DOWN)vel*=0.9;
}

2015年5月18日 星期一

Week13



import SimpleOpenNI.*;
SimpleOpenNI openni;
void setup()
{
  size(640, 480);
  openni=new SimpleOpenNI(this);
  openni.enableDepth();
  openni.enableUser();
  for (int i=0; i<20; i++)
    fruit[i]=new Fruit(random(640), random(240), random(30)-15, -random(30));
}
class Fruit { 
  
    float X, Y, VX, VY;
    Fruit(float x, float y, float vx, float vy) {
      X=x;
      Y=y;
      VX=vx;
      VY=vy;
    }
  
  void draw() {
    ellipse(X, Y, 50, 50);
  }
  void update()
  {
    X+=VX; 
    Y+=VY; 
    VY+=1.98;
    if (X<-100||X>740||Y<-100||Y>580) {
      X=random(640); 
      Y=random(240); 
      VX=random(30)-15; 
      VY=-random(30);
    }
  }
}

Fruit fruit[]=new Fruit[20];

void draw() {
  openni.update();
  image(openni.userImage(), 0, 0);
  for (int i=0; i<20; i++) {
    fruit[i].draw();
    fruit[i].update();
  }
}



import SimpleOpenNI.*;
SimpleOpenNI openni;

class Fruit
{
  float X, Y, VX , VY;
  boolean dead = false;
  Fruit(float x, float y, float vx, float vy)
  { 
    X=x; Y=y; VX=vx; VY=vy;
  }
  void draw()
  {
    if(dead) fill(255,0,0);
    else fill(255);
    ellipse(X, Y, 50, 50);
  }
  void update()
  {
     X+=VX; Y+=VY; VY+=1.98;
     if(X<-100 || X> 740 || Y<-100 || Y>580)
     {
       X=random(640); Y=random(240); VX=random(30); VY=-random(30); dead= false;
     }
     if(dist(X,Y, mouseX, mouseY)<50) dead=true;
  }
}
void mouseMoved()
{
  strokeWeight(30); stroke(255,0,0); line(mouseX, mouseY, pmouseX, pmouseY);
  strokeWeight(1); stroke(0);
}
Fruit fruit[] = new Fruit[20];
float fruitX=100, fruitY=400, fruitVX=4, fruitVY=-26;
void setup()
{
  size(640,480);
  openni= new SimpleOpenNI(this);
  openni.enableDepth();
  openni.enableUser();
  for(int i=0; i<20; i++)
    fruit[i] = new Fruit( random(640), random(240), random(30)-15, -random(30));
}
void draw(){
  openni.update();
  image(openni.userImage(),0,0);
  //ellipse(fruitX,fruitY,50,50);
  for(int i=0; i<20; i++)
  {
    fruit[i].draw();
    fruit[i].update();
  }

  //fruitX+=fruitVX;
  //fruitY+=fruitVY;

  //fruitVY +=1.98
}



2015年5月11日 星期一

Week 12


import SimpleOpenNI.*;
SimpleOpenNI openni;

void setup(){
  size(640,480);
  openni = new SimpleOpenNI(this);
  openni.enableRGB();
  openni.enableDepth();
  openni.enableUser();
}
void draw(){
 background(255);

 openni.update();

 image(openni.userImage(), 0, 0, 640, 480);

 int[] userList = openni.getUsers();
 for(int i=0;i<userList.length;i++)
 {
   if(openni.isTrackingSkeleton(userList[i])){
       PVector pos = new PVector();
       openni.getJointPositionSkeleton( userList[i], SimpleOpenNI.SKEL_HEAD, pos);
       println(pos); fill(255); ellipse(320+pos.x/3, 240-pos.y/3, 50, 50);
     }
   }
 }
 void onNewUser(SimpleOpenNI curContext, int userId)
 {
   curContext.startTrackingSkeleton(userId);
 }



import SimpleOpenNI.*;
SimpleOpenNI openni;
PImage imgBG,imgMask;
void setup()
{
  size(1024,640);
  openni= new SimpleOpenNI(this);
  openni.enableRGB();
  openni.enableDepth();
  openni.enableUser();
  imgBG=loadImage("DSC.JPG");
  imgMask=createImage(1024,640,ARGB);
  imgMask.loadPixels();
  for(int i=0;i<1024*640;i++)
  {
    imgMask.pixels[i]=color(0,0,255,100);
  }
  imgMask.updatePixels();
}
void draw()
{
  //background(255);
  image(imgBG,0,0);
  println(frameCount);
  openni.update();
  image(openni.userImage(),0,0,64,48);
  image(imgMask,0,0);
  int[] userList=openni.getUsers();
  for(int i=0;i<userList.length;i++)
  {
    if(openni.isTrackingSkeleton(userList[i]))
    {
      PVector pos=new PVector();
      openni.getJointPositionSkeleton(userList[i],SimpleOpenNI.SKEL_HEAD,pos);
      println(pos);fill(255);ellipse(320+pos.x/3,240-pos.y/3,50,50);
    }
  }
}
void onNewUser(SimpleOpenNI curContext,int userId)
{
  curContext.startTrackingSkeleton(userId);
}



2015年4月28日 星期二

Week 10 期中作品









作品名稱:爆氣飛碟球


這是一個在湯姆熊娛樂世界可以玩到的一種遊戲機台,我們想把它移植到我們自己的遊戲,

利用Leap motion的手偵測當作拍子,然後去接觸球,之後我們設計成球會越打越快,顏色也

會從藍色變成紅色,當達到最紅的時候,就是球速最快的時候,遊戲難度自然而然增加,當

球到了對方的網子中,就是得分。


import de.voidplus.leapmotion.*;
import ddf.minim.*;
LeapMotion leap;

Minim minim;
AudioPlayer player;
AudioPlayer bump;

PImage begin;
PImage over;
PImage back;

void setup() {
  size(1200, 600, P3D);
  leap=new LeapMotion(this);

  begin = loadImage("start.jpg");
  over = loadImage("gameover.jpg");
  back = loadImage("back.jpg");
  back.resize(1200, 600);

  minim = new Minim(this);
  player = minim.loadFile("start.mp3");
  player.play();
}

float ballX = 580;
float ballY = 280;
int alive=1;
float speedX = 5.0, speedY=0.0;

int a=0;
int b=0;
int myOrientation=-1;
int z=0;

int red=0;
int blue=255;

float s=second();

void draw() {
  background(back);

  if (z==0) {
    image(begin, 0, 0, 1200, 600);
    if (keyPressed) {
      if (key=='s') {
        z=1;
      }
    }
  } else if (z==1) {

    fill(red, 0, blue);
    ellipse(ballX, ballY, 60, 60);

    for (Hand hand : leap.getHands ()) {

      pushMatrix();
      PVector pos = hand.getPosition();
      fill(0);
      ellipse(pos.x, pos.y, 100, 100);
      popMatrix();

      speedX*=1.01;
      speedY*=1.01;

      //ellipse(pos.x, pos.y, 100, 100);

      //fill(red, 0, blue);
      //ellipse(ballX, ballY, 60, 60);

      if     (ballX<=50 && ballY<=200) {
        alive=0;
        z=2;
      } else if (ballX<=50 && ballY>=400) {
        alive=0;
        z=2;
      } else if (ballX>=1150 && ballY<=200) {
        alive=0;
        z=2;
      } else if (ballX>=1150 && ballY>=400) {
        alive=0;
        z=2;
      } else if (ballY<=50) {
        speedY=-speedY;
        //z=2;
      } else if (ballY>=550) {
        speedY=-speedY;
        //z=2;
      } else if (ballX<0) {
        a++;
        ballX=580;
        ballY=280;
      } else if (ballX>1200) {
        b++;
        ballX=580;
        ballY=280;
      } else if (sqrt((pos.x-ballX)*(pos.x-ballX)+(pos.y-ballY)*(pos.y-ballY))<=80) {
        bump = minim.loadFile("067.mp3");
        bump.play();

        red+=10;
        blue-=10;

        if     (ballX<pos.x && ballY<pos.y) {
          myOrientation=0;
          speedX=5;
          speedY=5;
        } else if (ballX>pos.x && ballY<pos.y) {
          myOrientation=1;
          speedX=5;
          speedY=5;
        } else if (ballX>pos.x && ballY>pos.y) {
          myOrientation=2;
          speedX=5;
          speedY=5;
        } else if (ballX<pos.x && ballY>pos.y) {
          myOrientation=3;
          speedX=5;
          speedY=5;
        } else if (ballX<pos.x && pos.y==0) {
          myOrientation=4;
          speedX=5;
          speedY=5;
        } else if (ballX>pos.x && pos.y==0) {
          myOrientation=5;
          speedX=5;
          speedY=0;
        } else if (pos.x==0 && ballY<pos.y) {
          myOrientation=6;
          speedX=0;
          speedY=5;
        } else if (pos.x==0 && ballY>pos.y) {
          myOrientation=7;
          speedX=0;
          speedY=5;
        }
      }
      if (myOrientation==0)
      {
        ballX-=speedX;
        ballY-=speedY;
      }
      if (myOrientation==1)
      {
        ballX+=speedX;
        ballY-=speedY;
      }
      if (myOrientation==2)
      {
        ballX+=speedX;
        ballY+=speedY;
      }
      if (myOrientation==3)
      {
        ballX-=speedX;
        ballY+=speedY;
      }
      if (myOrientation==4)
      {
        ballX-=speedX;
      }
      if (myOrientation==5)
      {
        ballX+=speedX;
      }
      if (myOrientation==6)
      {
        ballY-=speedY;
      }
      if (myOrientation==7)
      {
        ballY+=speedY;
      }

      println(a);
      println(b);

      text("SCORE:    "+a+":"+b, 550, 150);
      fill(500, 102, 500, 500);
    }
  } else if (z==2) {

    image(over, 0, 0, 1200, 600);
    if (keyPressed) {
      if (key=='r') {
        z=0;
        ballX=580;
        ballY=280;
        red=0;
        blue=255;
      }
    }
  }
}

2015年4月13日 星期一

Week 07

期中作品進度


void draw() {

background(255);
for (Hand hand : leap.getHands ()) {
//hand.draw();
PVector pos = hand.getPosition();
//pushMatrix(); fill(0);
//popMatrix();
ellipse(pos.x, pos.y, 100, 100); } fill(0);
rect(0, 0, 20, 200);
rect(0, 580, 1200, 20); rect(0, 0, 1200, 20);
rect(1180, 400, 20, 200);
rect(0, 400, 20, 200); rect(1180, 0, 20, 200);
}
ellipse(ballX, ballY, 60, 60);


Week 06



期中作品題目:爆氣飛碟球






作品介紹:


這是一個在湯姆熊娛樂世界可以玩到的一種遊戲機台,我們想把它移植到我們自己的遊戲,

利用Leap motion的手偵測當作拍子,然後去接觸球,之後我們設計成球會越打越快,顏色也

會從黑色變成紅色,當達到最紅的時候,就是球速最快的時候,遊戲難度自然而然增加,當

球到了對方的網子中,就是得分。


2015年3月23日 星期一

Week 05






int []X=new int[1000];
int []Y=new int[1000];
int now=0;
void setup() {
  size(800, 800, P3D);
}
void draw() {
  background(255);
  //if(mousePressed) (mouseX,mouseY,pmouseX,pmouseY);
  for (int i=1; i<now; i++) {
    line(X[i], Y[i], X[i-1], Y[i-1]);
  }
}
void mouseDragged() {
  X[now]=mouseX;
  Y[now]=mouseY;
  now++;
}


2015年3月16日 星期一

Week04


import de.voidplus.leapmotion.*;
LeapMotion leap;
void setup() {
  size(600, 600, P3D);
  leap= new LeapMotion(this);
}
float groundDir=0;
void draw() {
  background(255);
  for(int i=-10;i<10;i++){
    for(int j=-10;j<10;j++){
      pushMatrix();
      translate(300,300);
      rotateX(radians(70));
      rotateZ(radians(groundDir));
      translate(i*30,j*30);
      box(30);
      popMatrix();
    }
  }
      
  for (Hand hand : leap.getHands ()) {
    hand.draw();
    float angle=hand.getYaw();
    PVector pos= hand.getPosition();
    translate(pos.x,pos.y,pos.z);
    rotateY(-radians(angle));
    fill(128);
    stroke(0);
    box(100);
    groundDir=-angle;
  }
}




import de.voidplus.leapmotion.*;
LeapMotion leap;
void setup() {
  size(600, 600, P3D);
  leap= new LeapMotion(this);
}
float nowX=0, nowY=0, nowA=0;
void draw() {
  background(255);
  for (int i=-10; i<10; i++) {
    for (int j=-10; j<10; j++) {
      pushMatrix();
      translate(300, 300);
      rotateX(radians(70));
      rotateZ(nowA);
      translate(i*200+nowX, j*200+nowY, 0);
      fill(255);
      box(200);
      popMatrix();
    }
  }

  for (Hand hand : leap.getHands ()) {
    hand.draw();
    float angle=hand.getYaw();
    PVector pos= hand.getPosition();
    nowA+=radians(-angle/40);
    translate(pos.x, pos.y, pos.z);
    rotateY(-radians(angle));
    fill(128);
    stroke(0);
    box(100);
  }
}



2015年3月2日 星期一

Week01










import de.voidplus.leapmotion.*;

LeapMotion leap;

void setup(){
  size(800, 600);
  leap = new LeapMotion(this); 
}

void draw(){
  
  background(255);
  
  //fill(156);
  //rect(200, 400, 100, 100);
  
  for( Hand hand : leap.getHands() ){
    hand.draw();
    for( Finger finger : hand.getFingers() ){
      finger.draw();
    }
  }
}