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();
}
複習之前寫的遊戲
沒有留言:
張貼留言