2014年6月25日 星期三

Week 19 期末作品展示_PushPush!!!

體感互動遊戲製作期末作品DEMO

PushPush!!!


兩人互動遊戲.
藍色玩家使用Kinect操作,紅色玩家使用鍵盤操作
先將對方血量歸零或是推出場外者獲勝
自己退出場外也算對方獲勝請注意XD
場上隨機掉落物品可增加或扣血量

開發工具:Processing+FAAST+Kinect
江依紋 黃鈺婷共同製作



##開發過程與討論

初步構想圖

起初的程式碼,動作判定構想











程式碼與各個變數代表什麼

Kinect動作設定


Demo的稿子XD 遊戲的詳細解說


##心得

江依紋 (字超亂030

黃鈺婷

##Processing程式碼
int weigh=1300,high=650;
import ddf.minim.*;
AudioPlayer player;
Minim minim; 
//*//*//Turn Stage
int stage=0;//imgBG[i];i=stage;
int Note=0;//1P hand Up=1,2P hand Up=2,3=imgBG[1] Look Note;
int Start=0;//1P hand Down=1,2P hand Down=2,3=imgBG[2] GameStart;

//*//*//Player1
int player1=1,p1blood=400;
  //int p1nowBlood=p1blood;
int player1x=weigh/10,player1y=high/10*6;//Start sit
int p1nowX=player1x,p1nowY=player1y;//Now Stay

//*//*//Player2
int player2=1,p2blood=400,blood2x=0;
  //int p1nowBlood=p1blood;
int player2x=weigh/10*8-25,player2y=high/10*6;  
int p2nowX=player2x,p2nowY=player2y;

//*//*//Other
int Hit=122,back=51,Blood=50;
 int BGM=0;
int ToolsI=1,THit1=40,THit2=45;
int ToolsType=0;
float[]ToolsX=new float[100];
float[]ToolsY=new float[100];
float APmoveY=0;
float CHmoveY=0;

PImage[]BG=new PImage[3];
PImage[]Player1=new PImage[6];
PImage[]Player2=new PImage[6];
PImage[]Tools=new PImage[2];
void setup()
{
  size(weigh,high);
  background(0,0,0);
  
  minim = new Minim(this);
  player = minim.loadFile("kaito.mp3");
  player.play();  
  
  BG[0]=loadImage("bg1.png");//KaiTo  ******
  BG[1]=loadImage("note.png");//Note
  BG[2]=loadImage("bg3.png");//GameStart  ******

  //imgPlayer1[0]=loadImage(".png");//Ready   ********
  Player1[1]=loadImage("L1.png");//Walk
  Player1[2]=loadImage("L2.png");//Push
  Player1[3]=loadImage("L3.png");//Fly
  Player1[4]=loadImage("Lw.png");//Win
  //imgPlayer1[5]=loadImage(".png");//Lose   ********
    
  //imgPlayer2[0]=loadImage(".png");//Ready
  Player2[1]=loadImage("R1.png");//Walk
  Player2[2]=loadImage("R2.png");//Push
  Player2[3]=loadImage("R3.png");//Fly
  Player2[4]=loadImage("Rw.png");//Win
  //imgPlayer2[3]=loadImage(".png");//Lose   *********
  
  Tools[0]=loadImage("A1.png");//apple
  Tools[1]=loadImage("ch.png");//chicken
  //draw apples
  for(int i=0;i<ToolsI;i++)
  {
    newTools(i);
  } 

}
//*//*//Tools random sit
void newTools(int i)
{
  ToolsType=int(random(2));
  ToolsY[i]=-random(200);
  ToolsX[i]=100+random(weigh-200);
}

void draw()
{
//*//*//KaiTo
    if(stage==0)
    {
     image(BG[0],0,0);
     image(Player1[player1],p1nowX,p1nowY);
     image(Player2[player2],p2nowX,p2nowY); 
     if(Note==3){stage=1;Note=0;}
     if(Start==3){stage=2;Start=0;}
     println("Note:"+Note+"  Start:"+Start);
    }
//*//*//Look Note
    else if(stage==1)
    {
      background(255,255,255);
      image(BG[1],370,30);
      if(Start==3){stage=2;Start=0;}
      println("Note:"+Note+"  Start:"+Start);
    }
//*//*//Game Start
    else if(stage==2)
    {
     
      if(BGM==0)
      {
        player.close();
        player = minim.loadFile("moPush.mp3");
        player.play();
        BGM=1;
      }
     
      image(BG[2],0,0);
      image(Player1[player1],p1nowX,p1nowY); 
      image(Player2[player2],p2nowX,p2nowY);
      fill(255,0,0);
      rect(0,0,p1blood,50);
      rect(1300-p2blood,0,p2blood,50);
//*//*//Tools draw & move
      for(int i=0;i<ToolsI;i++)
      {
        image(Tools[ToolsType],ToolsX[i],ToolsY[i],40,60);
        ToolsY[i]+=4;
        if(ToolsY[i]>600)newTools(i);        
//*//*//Player1&Tools Hit        
       if(dist(p1nowX,p1nowY,ToolsX[i],ToolsY[i])<THit2&&dist(p1nowX,p1nowY,ToolsX[i],ToolsY[i])>THit1)
         {
            if(p1blood>0&&ToolsType==0){p1blood=p1blood-Blood/2;}
            else if(p1blood<400&&ToolsType==1){p1blood=p1blood+Blood/2;}
         }
//*//*//Player1&Tools Hit                
         else if(dist(p2nowX,p2nowY,ToolsX[i],ToolsY[i])<THit2&&dist(p2nowX,p2nowY,ToolsX[i],ToolsY[i])>THit1)
         {
            if(p2blood>0&&ToolsType==0){p2blood=p2blood-Blood/2;}
            else if(p2blood<400&&ToolsType==1){p2blood=p2blood+Blood/2;}
         }
       }
//*//*//1P&2P Hit
         if(dist(p1nowX,p1nowY,p2nowX,p2nowY)<Hit&&dist(p1nowX,p1nowY,p2nowX,p2nowY)>back)
          {
              if(player1==1&&player2==2 || player1==3&&player2==2)
              {
                player1=3;p1nowX-=50;
                image(Player1[player1],p1nowX,p1nowY);
                p1blood=p1blood-Blood;
              }
              else if(player1==2&&player2==1 || player1==2&&player2==3)
              {
                player2=3;p2nowX+=50;
                image(Player2[player2],p2nowX,p2nowY);
                p2blood=p2blood-Blood;
                blood2x=blood2x+Blood;
              }
          }
//*//*//Out of boder or Blood<0 GameOver
          else if(p2nowX>1162||p2nowX<0||p2blood<=0)
          {
            player1=4;
            stage=3;
          }
          else if(p1nowX>1162||p1nowX<0||p1blood<=0)
          {
            player2=4;
            stage=3;
          }
    
      println("P1:"+player1+"  P2:"+player2+"  Dist"+dist(p1nowX,p1nowY,p2nowX,p2nowY)+"  P1blood:"+p1blood+"  P2blood:"+p2blood+"  p1nowX:"+p1nowX+"  p2nowX:"+p2nowX);
    }
    else if(stage==3)
      {
        if(BGM==1)
        {
          player.close();
          player = minim.loadFile("win.mp3");
          player.play();
          BGM=2;
        }
        image(BG[2],0,0);
        textSize(60);
        fill(136,0,21);
        if(player1==4)
        {
          image(Player1[player1],weigh/2-200,player1y);
          text("Player1 Win !!",weigh/2-200,250);
         // imageMode(CENTER);
        }
        else if(player2==4)
        {
          image(Player2[player2],weigh/2-250,player1y-20);
          text("Player2 Win !!",weigh/2-200,250);
        //  imageMode(CENTER);
        }
      }
}

void keyPressed()
{
//*//*//1P Handup
    if(key=='w')
    {
      if(stage==0&&Note==0)Note=1;
      else if(stage==0&&Note==2)Note=3;
    }
//*//*//2P Handup
    if(keyCode==UP)
    {
      if(stage==0&&Note==0)Note=2;
      else if(stage==0&&Note==1)Note=3;
    }
    
//*//*//1P Ready
  if(key=='s')
  {
    if(stage==0&&Start==0)Start=1;
    else if(stage==0&&Start==2)Start=3;
    else if(stage==1&&Start==0)Start=1;
    else if(stage==1&&Start==2)Start=3;
  }
//*//*//2P Ready
  if(keyCode==DOWN)
  {
    if(stage==0&&Start==0)Start=2;
    else if(stage==0&&Start==1)Start=3;
    else if(stage==1&&Start==0)Start=2;
    else if(stage==1&&Start==1)Start=3;
  }
  

//*//*//1P Walk→
  if(key=='d')
  {
    if (stage==2)
    {
      player1=1;
      p1nowX+=5;
    }
  }
  //*//*//1P Walk←
  if(key=='a')
  {
    if (stage==2)
    {
      player1=1;
      p1nowX-=5;
    }
  }
//*//*//2P Walk←
  if(keyCode==LEFT)
  {
     if (stage==2)
    {
      player2=1;
      p2nowX-=10;
     }
  }
  //*//*//2P Walk→
  if(keyCode==RIGHT)
  {
     if (stage==2)
    {
      player2=1;
      p2nowX+=10;
     }
  }
//*//*//1P Push
  if(key=='r')
  {
     if (stage==2)
    {
       player1=2;
    }
  }
  
//*//*//2P Push
  if(key=='0')
  {
     if (stage==2)
    {
      player2=2;
    }
  }

}


##FAAST(Kinect動作指令)








沒有留言:

張貼留言