2016年2月25日 星期四

Week 01 02160120 黃冠中

//Test hunting point game by ceylonmilktea
import ddf.minim.*;
Minim minim;
AudioPlayer in;
import de.voidplus.leapmotion.*;
LeapMotion leap;
PImage mypoint, enemypoint, background, prepare, attack,GGBD;
int n=0, b=-1, Damage=0, limit, killshot=1;//n=number of enemypoint,b=block of enemypoint,True or False of Damage
float enemyX [] = new  float[600];
float enemyY [] = new  float[600];
float mySpeedX[]=new float [600];
float mySpeedY[]=new float [600];
PVector myHandPosition=new PVector();
int GameTime, DamageTime=-100000,Score=0;
int EnemyTime [] = new int[60];
float myResetY=(myHandPosition.y-270)*600/280;
float myResetX=(myHandPosition.x-150)*800/550;
int  s=0, GoodGame=0;//s=use for loop, GoodGame use for GG
int GoodTime=0;
/////////////////////////////////////////////////////////
void setup()
{
  minim = new Minim(this);
in = minim.loadFile("demo.mp3");

  leap = new LeapMotion(this);
  size(800, 600, OPENGL);
  mypoint=loadImage("test_point.png");
  enemypoint=loadImage("test_enemypoint.png");
  background=loadImage("background.png");
  prepare=loadImage("test_enemypoint_prepare2.png");
  GGBD=loadImage("Gameover.jpg");
  for (int i=0; i<600; i++)
  {
    mySpeedX[i]=0.8;
    mySpeedY[i]=0.8;
    enemyX[i]=random(800);
    enemyY[i]=random(600);
  }//build the enemypoint's pointXY & speed
}
//////////////////////////////////////////////////////////
void draw()
{
  println(GameTime/1000);
  int fps = leap.getFrameRate();
  for (Hand hand : leap.getHands ()) {
    Finger  finger_index     = hand.getIndexFinger();
    hand.draw();
    for (Finger finger : hand.getFingers ()) {

      switch(finger.getType()) {
      case 0:
        // System.out.println("thumb");
        myHandPosition   = finger.getPosition();
        //println(myHandPosition);
        break;
      case 1:
        // System.out.println("index");
        break;
      case 2:
        // System.out.println("middle");
        break;
      case 3:
        // System.out.println("ring");
        break;
      case 4:
        // System.out.println("pinky");
        break;
      }
    }
  }
  if (GoodGame==1){background(GGBD);println(GoodTime);textSize(50);
    fill(255, 0, 0);
  text("Your Score: "+Score, 250, 100);
 
 }
  else
  {in.play();
    GameTime=millis();

    if ((GameTime-s)>=3000&&n<600) {
      Score+=3;
      n+=10;
      s=GameTime;
      EnemyTime[++b]=millis();
    }//enemypoint limit&build time

    background(background);


    EnemyRandomPoint();
    myResetY=(myHandPosition.y-270)*600/280;
    myResetX=(myHandPosition.x-150)*800/550;
    image(mypoint, myResetX-25, myResetY-25, 50, 50);
    //TriggerDamage();
  }
}
////////////////////////////////////////////////////////
/*void mousePressed()
 {
 if (mousePressed==true) {
 Damage=1;
 DamageTime=millis();
 }
 }
 //////////////////////////////////////////////////////
 void TriggerDamage()
 {
 if (millis()-DamageTime<2000)image(attack, mouseX-75, mouseY-75, 200, 200);
 else Damage=0;
 }*/
///////////////////////////////////////////////////////////
void EnemyRandomPoint()
{

  for (int i=0; i<n; i++)  
  {
    if (millis()-EnemyTime[i/10]<1000) {
      image(prepare, enemyX[i], enemyY[i], 50, 50);
    } else
    {
      if (millis()-EnemyTime[i/10]<10000) {
        if (killshot==-1) {
          enemyX[i]=-100;
          enemyY[i]=-100;
          mySpeedX[i]=0;
          mySpeedY[i]=0;
        } else
        {
          UpdateEnemypoint(i);
          image(enemypoint, enemyX[i]+=mySpeedX[i], enemyY[i]+=mySpeedY[i], 50, 50);
        }
      }
    }
  }
}
///////////////////////////////////////////////////////////
void keyPressed()
{
  if (key == 's')killshot*=-1;
  if (key == 'r') {
    Score=0;
    in.rewind();
    GoodGame=0;
    GameTime=0;
    n=0;
    b=-1;
    for (int i=0; i<600; i++)
    {
      mySpeedX[i]=1;
      mySpeedY[i]=1;
      enemyX[i]=random(800);
      enemyY[i]=random(600);
    }
  }
}
///////////////////////////////////////////////////////////
void  UpdateEnemypoint(int limit)
{
  for (int i =0; i<=limit; i++)
  {
    float speedX=  myResetX-25-enemyX[i];
    if (speedX<0) {
      if (mySpeedX[i]>0)
      {
        mySpeedX[i]*=-1;
      }
    } else
    {
      if (mySpeedX[i]<0)
      {
        mySpeedX[i]*=-1;
      }
    }


    float speedY= myResetY-25-enemyY[i];
    if (speedY<0) {
      if (mySpeedY[i]>0)
      {
        mySpeedY[i]*=-1;
      }
    } else
    {
      if (mySpeedY[i]<0)
      {
        mySpeedY[i]*=-1;
      }
    }
    if (abs(speedX)<15&&abs(speedY)<15)GameOver();
  }
}
////////////////////////////////////////////////
void GameOver()
{
  GoodGame=1;
  GoodTime=GameTime/1000;
  in.pause();
 


}

複習之前寫的遊戲

沒有留言:

張貼留言