顯示具有 Week04 標籤的文章。 顯示所有文章
顯示具有 Week04 標籤的文章。 顯示所有文章

2017年10月3日 星期二

week04 3D的互動筆記

一、(進階)憤怒鳥Angry Bird小遊戲 (End)
1.運用陣列產生更多豬,以及有各別碰撞條件

PImage imgbird,imgpig;
float birdX=400,birdY=300;
float birdVX=0,birdVY=0;
float birdAX=0,birdAY=0;
float [][]pigX=new float[5][4];
float [][]pigY=new float[5][4];
boolean [][]pigalive=new boolean[5][4];
void setup(){
  size(800,600);
  imgbird=loadImage("bird.png");
  imgpig=loadImage("pig.png");
  imageMode(CENTER);
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      pigX[i][j]=700-i*100;pigY[i][j]=100+j*100;pigalive[i][j]=true;
    }
  }
}
void draw(){
  background(255);
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      if(dist(pigX[i][j],pigY[i][j],birdX,birdY)<100) pigalive[i][j]=false;
      if(pigalive[i][j]) image(imgpig,pigX[i][j],pigY[i][j],100,100);
    }
  }
  image(imgbird,birdX,birdY,100,100);
  line(birdX,birdY,400,300);
  birdX+=birdVX;
  birdY+=birdVY;
  if(birdX<50){birdX=50;birdVX=-birdVX;}
  if(birdX>width-50){birdX=width-50;birdVX=-birdVX;}
  if(birdY<50){birdY=50;birdVY=-birdVY;}
  if(birdY>height-50){birdY=height-50;birdVY=-birdVY;}
  birdVX+=birdAX;
  birdVY+=birdAY;
  birdVX*=0.98;
  birdVY*=0.98;
}
void mouseDragged(){
  birdX=mouseX;
  birdY=mouseY;
  birdVX=birdVY=birdAX=birdAY=0;
}
void mouseReleased(){
  birdVX=(400-mouseX)/10.0;
  birdVY=(300-mouseY)/10.0;
  birdAY=0.98;
}

二、製作音樂盒
(1)第一版本-sound資料庫
1.如果processing資料庫沒有sound資料庫

速寫本>引用庫文件>添加庫文件

2.搜尋sound並選取點擊install安裝

sound有綠色勾勾就是ok了

3.點選文件>範例程序


4.點選sound資料庫裡的程式範例兩下


5.sound資料庫的示範程式碼


6.把sound主要程式碼應用過來,並把mario.mp3拉近這個程式,播放即可有聲音。


(1)第二版本-Minim資料庫
1.如果processing資料庫沒有minim資料庫


2.搜尋sound並選取minim點擊install安裝


3.在C:\Users\user\Documents\Processing\libraries\minim\examples\AudioPlayer\loop裡,有Minim的範例程式-loop.pde


4.minim資料庫的範例程式


5.把minim主要程式碼應用過來,並把mario.mp3拉近這個程式,播放即可有聲音。



2017年10月2日 星期一

Week 04 邱

#第04週
-------------------------------------------------------------------------------------------------------------------------

◎很多個Ryan

程式碼:

PImage imgEgg,imgRyan;
float [][]ryanX=new float[5][4];
float [][]ryanY=new float[5][4];
boolean [][]ryanAlive=new boolean[5][4];

void setup(){
  size(800,800);
  imgEgg=loadImage("gg2.png");
  imgRyan=loadImage("ryan.png");
  imageMode(CENTER);
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
       ryanX[i][j]=700-i*100;
       ryanY[i][j]=100+j*100;
       ryanAlive[i][j]=true;
    }
  }
}
float eggX=400,eggY=400;
float eggVX=0,eggVY=0;
float eggAX=0,eggAY=0;

void draw(){
  background(180,217,254);
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      if(dist(ryanX[i][j],ryanY[i][j],eggX,eggY)<100){
        ryanAlive[i][j]=false;
      }  
      if(ryanAlive[i][j])image(imgRyan,ryanX[i][j],ryanY[i][j],200,250);
    }
  }
  
  line(eggX,eggY,400,400);
  image(imgEgg,eggX,eggY,100,100);///x,y,w,h
  
  
  eggX+=eggVX;
  eggY+=eggVY;
  if(eggX<50){eggX=50;eggVX=-eggVX;}  
  if(eggX>width-50){eggX=width-50;eggVX=-eggVX;}
  if(eggY<50){eggY=50;eggVY=-eggVY;}
  if(eggY>width-50){eggY=width-50;eggVY=-eggVY;}
  
  
  eggVX+=eggAX;
  eggVY+=eggAY;
  eggVX*=0.997;  
  eggVY*=0.997;
  //image(imgRyan,200,200);
  //image(imgEgg,eggX,eggY);
}
void mouseDragged(){
   eggX=mouseX;
   eggY=mouseY; 
   eggVX=eggVY=eggAX=eggAY=0;
}
void mouseReleased(){
   eggVX=(400-mouseX)/10.0;
   eggVY=(400-mouseY)/10.0;
   eggAY=0.98;

}



  7X6個Ryan

◎播音樂

程式碼:

import processing.sound.*;
SoumdFile sound;
void setup(){
   size(800,600);
   sound=new SoundFile(this,"JonyJ.mp3");
   sound.play();
   sound.loop();
}



(如果Sound不行就用Minium)

程式碼:

import ddf.minim.*;
Minim minim;
AudioPlayer player;
void setup(){
   size(800,600);
   minim=new Minim(this);
   player=minim.loadFile("JonyJ.mp3",2048);
   player.play();
   player.loop();
}
void draw(){
  
}



Week04 ShiRo

►憤怒鳥


  • 用陣列宣告豬--mm2

※Java陣列寫法: 名稱前加[ ][ ]
製造豬豬(小小兵): 5*4的陣列
float [][]mm2X=new float[5][4];
float [][]mm2Y=new float[5][4];
boolean [][]mm2Alive=new boolean[5][4];

  • 產生小小兵的位置

700是原本x的位置 向左100產生一個(100是一個小小兵的大小),100則是y向下產生。
(不會畫出小小兵)

   

  • 判斷位置的小小兵跟叉叉距離

如果距離小於100則小小兵死掉,沒有則顯示出小小兵。
↓固定座標方式利用for迴圈畫出小小兵, 使用陣列來判斷是不是被撞。

  • 程式碼:


PImage img1,img2;
float mmX=400 , mmY=300;
float mmVX=0 , mmVY=0;
float mmAX=0 , mmAY=0;
float [][]mm2X=new float[5][4]; /// 小小兵x陣列宣告
float [][]mm2Y=new float[5][4];///小小兵y陣列宣告
boolean [][]mm2Alive=new boolean[5][4];  ///小小兵存活宣告
void setup()
{
  size(800,600);
  img1= loadImage("1.png");  ///讀圖片--小小兵
  img2= loadImage("2.png");  ///讀圖片--叉叉
  imageModeCENTER );       ///圖片原點移到正中心  
  forint i=0 ; i<5 ; i++ ) {   
     forint j=0 ; j<4 ; j++ ) {
          mm2X[i][j]=700 - i * 100;   mm2Y[i][j]=100 + j * 100; ///小小兵的位置初始化
          mm2Alive[i][j]=true;         ///初始化(小小兵活著)
       }
   }
}
void draw()


   background(255);
    for(int i=0;i<5;i++){   
         for(int j=0;j<4;j++){
             if( dist( mm2X[i][j] , mm2Y[i][j] , mmX , mmY ) < 100){  
             mm2Alive[i][j]=false;  ///小小兵跟叉叉距離<100小小兵死亡
         }
///如果沒碰到則畫出小小兵
         if(mm2Alive[i][j])image( img2 , mm2X[i][j] , mm2Y[i][j] , 100 ,  100);  
     }

   }
......
 }

老師重新做一個陣列的示範
※截用老師FB圖文
STEP1.

STEP2.不同的顏色
STEP3.用陣列來做事

STEP4.讓bird的座標,也用變數來做

                           

STEP5.先寫好牛頓第一運動定律&牛頓第二運動定律。然後讓pig 碰到 bird時, 給它死 --- 沒死的才畫出來 Part 1


 STEP6.先寫好牛頓第一運動定律&牛頓第二運動定律。然後讓pig 碰到 bird時, 給它死 --- 沒死的才畫出來 Part 2



STEP7.做出 (1) 直線運動, (2) 拋物線
STEP8.birdAY 加速度,可能會造成 自由落體, 所以 mouseDragged時要清空birdAY



音樂
轉檔網址: https://www.onlinevideoconverter.com/zh/video-converter

 Example 裡要有sound

 沒有要到library加

 打Sound下載
Processing可以安裝音樂相關的 Library,  一個是官方的 Sound Library, 一個是 ddf 寫的 Minim Library。
程式碼(右邊)   範例程式(左邊)

第二種播放音檔 : minim
用一樣的 Sketch-Import Library 介面安裝好 Minim 後, 可以使用如下 

import ddf.minim.*;Minim minim; AudioPlayer player; void setup(){ ... Minim = new Minim(this); player = minim.loadFile&#40;"音樂.mp3", 2048&#41;; player.loop(); }


Week04*互動技術課堂筆記*

【利用Processing】


*做出簡單小遊戲*

小遊戲深入介紹

1.利用(Week03-1.3)的概念做延伸















程式碼:
PImage imgHook,imgLove; 
float HookX=400,HookY=300;
float HookVX=0,HookVY=0;
float HookAX=0,HookAY=0;
float [][]LoveX=new float[5][4];
float [][]LoveY=new float[5][4];
boolean [][]LoveAlive=new boolean[5][4];
void setup(){
  size(800,600);
  imgHook=loadImage("Hook.png");        
  imgLove=loadImage("Love.png");   
  imageMode(CENTER);  
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      LoveX[i][j]=700-i*100;LoveY[i][j]=100+j*100;LoveAlive[i][j]=true;
    }
  }
}
void draw(){
  background(255);
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      if(dist(LoveX[i][j],LoveY[i][j],HookX,HookY)<100){
        LoveAlive[i][j]=false;
      }
      if(LoveAlive[i][j])image(imgLove,LoveX[i][j],LoveY[i][j],100,100);
    }
  }
  /*if(LoveAlive)image(imgLove,LoveX,LoveY,100,100);  */   
  image(imgHook,HookX,HookY,100,100);
 /* if(dist(LoveX,LoveY,HookX,HookY)<100){
    LoveAlive=false;
  } */
  line(HookX,HookY,400,300);
  
  
  HookX+=HookVX;
  HookY+=HookVY;
  if(HookX<50){HookX=50;HookVX=-HookVX;}
  if(HookX>width-50){HookX=width-50;HookVX=-HookVX;}
  if(HookY<50){HookY=50;HookVY=-HookVY;}
  if(HookY>height-50){HookY=height-50;HookVY=-HookVY;}
  
  HookVX+=HookAX;
  HookVY+=HookAY;
  HookVX*=0.997;
  HookVY*=0.997;
}
void mouseDragged(){
  HookX=mouseX;
  HookY=mouseY;
  HookVX=HookVY=HookAX=HookAY=0;
}
void mouseReleased(){
  HookVX=(400-mouseX)/10.0;
  HookVY=(300-mouseY)/10.0;
  HookAY=0.98;
}


2.簡單概念複習

2.1畫圓















程式碼:
void setup(){ 
  size(800,600);      //視窗初始化大小
}
void draw(){
  for(int i=0;i<5;i++){         //橫為5
    for(int j=0;j<4;j++){          //行為4
      ellipse(700-i*100,100+j*100,100,100);     //fill(顏色編碼)畫圓(座標,座標,大小,大小)<沒有將座標寫死>
    }
  }
}

2.2變顏色















程式碼:
void setup(){
  size(800,600);  //視窗初始化大小
}
void draw(){
  for(int i=0;i<5;i++){    //橫為5
    for(int j=0;j<4;j++){     //行為4
      fill(#3EC1CE);ellipse(700-i*100,100+j*100,100,100);  //fill(顏色編碼)畫圓(座標,座標,大小,大小)
    }
  }
  fill(#A45EE3);ellipse(400,300,100,100);  //一個圓固定位置<將座標寫死>
}

2.3用矩陣替代















程式碼:
float [][]pigx=new float[5][4];      //用矩陣初始化
float [][]pigy=new float[5][4];      //用矩陣初始化
boolean [][]pigAlive=new boolean[5][4];       //藍色圈圈部分都是豬(存活)
void setup(){
  size(800,600);  
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      pigx[i][j]=700-i*100;pigy[i][j]=100+j*100;pigAlive[i][j]=true;   
    } 
  }
}
void draw(){
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      //fill(#3EC1CE);ellipse(700-i*100,100+j*100,100,100);
      fill(#3EC1CE);ellipse(pigx[i][j],pigy[i][j],100,100);
    }
  }
  fill(#A45EE3);ellipse(400,300,100,100);
}

2.4用矩陣替代
















程式碼:
float birdX=100,birdY=400;
float [][]pigx=new float[5][4];
float [][]pigy=new float[5][4];
boolean [][]pigAlive=new boolean[5][4];
void setup(){
  size(800,600);
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      pigx[i][j]=700-i*100;pigy[i][j]=100+j*100;pigAlive[i][j]=true;
    } 
  }
}
void draw(){
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      //fill(#3EC1CE);ellipse(700-i*100,100+j*100,100,100);
      fill(#3EC1CE);ellipse(pigx[i][j],pigy[i][j],100,100);
    }
  }
  fill(#A45EE3);ellipse(birdX,birdY,100,100);
}


3.匯入音樂















程式碼:
import ddf.minim.*;
Minim minim;
AudioPlayer player;
void setup(){
  size(800,600);
  minim=new Minim(this);
  player=minim.loadFile("chicken.mp3",2048);
  player.play();
}
void draw(){

}

week04 03160801

第四周目標:1.讓憤怒鳥和小朋友下樓梯變得更完整
                     2.了解processing得更多功能,方便完成其中作品

一:  讓鳥碰到豬,豬會消失

PImage imgBird, imgPig;
float birdX = 400, birdY = 300;
float birdVX = 0, birdVY = 0;
float birdAX =0, birdAY = 0;
float [][]pigx=new float[5][4];//宣告豬X,Y位置陣列
float [][]pigy=new float[5][4];
boolean [][]pigAlive=new boolean[5][4];
void setup(){
  size(800,600);
  imgBird=loadImage("bird.png");
  imgPig=loadImage("pig.png");
  imageMode(CENTER);
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      pigx[i][j]=700-i*100; pigy[i][j]=100+j*100; pigAlive[i][j]=true;
    }
   
  }
}
void draw(){
  background(255);
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      if (dist(pigx[i][j], pigy[i][j], birdX, birdY)<100){
      pigAlive[i][j]=false;//鳥碰到豬讓豬消失
      }
      if(pigAlive[i][j]) image(imgPig, pigx[i][j], pigy[i][j], 100, 100);
    }
  }
  
  image(imgBird, birdX, birdY, 100, 100);
  
  line(birdX, birdY, 400,300);
  birdX += birdVX;
  birdY += birdVY;
  
  if(birdX<50){birdX=50; birdVX = -birdVX;}
  if(birdX>width-50){birdX=width-50; birdVX= -birdVX;}
  if(birdY<50){birdY=50; birdVY = -birdVY;}
  if(birdY>height-50){birdY=height-50; birdVY= -birdVY;}
  
  
  birdVX += birdAX;
  birdVY += birdAY;
  birdVX *= 0.995;
  birdVY *= 0.995;
}
void mouseDragged(){
  birdX=mouseX; 
  birdY=mouseY;
  birdVX=birdVY=birdAX=birdAY=0;

}
void mouseReleased(){
  birdVX = (400-mouseX)/10.0;
  birdVY = (300-mouseY)/10.0;
  birdAY = 0.98;
}














上面的程式碼產生步驟
void setup(){
  size(800,600);
}

void draw(){
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      ellipse(700-i*100,100+j*100,100,100);
    }
  }
}













加入顏色
void setup(){
  size(800,600);
}

void draw(){
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      ellipse(700-i*100,100+j*100,100,100);
    }
  }
  fill(#F70C0C);ellipse(400,300,100,100);
}














用陣列來做事
float [][]pigx=new float[5][4];
float [][]pigy=new float[5][4];
boolean [][]pigAlive=new boolean[5][4];
void setup(){
  size(800,600);
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      pigx[i][j]=700-i*100; pigy[i][j]=100+j*100; pigAlive[i][j]=true;
    }
  }
}

void draw(){
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      //llipse(700-i*100,100+j*100,100,100);
      fill(#07DE0F);ellipse(pigx[i][j],pigy[i][j],100,100);
    }
  }
  fill(#F70C0C);ellipse(400,300,100,100);
}












讓鳥的座標也用變數來做

float birdX = 100, birdY = 400;
float [][]pigx=new float[5][4];
float [][]pigy=new float[5][4];
boolean [][]pigAlive=new boolean[5][4];
void setup(){
  size(800,600);
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      pigx[i][j]=700-i*100; pigy[i][j]=100+j*100; pigAlive[i][j]=true;
    }
  }
}

void draw(){
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      //llipse(700-i*100,100+j*100,100,100);
      fill(#07DE0F);ellipse(pigx[i][j],pigy[i][j],100,100);
    }
  }
  //fill(#F70C0C);ellipse(400,300,100,100);
  fill(#F70C0C);ellipse(birdX, birdY,100,100);
}













寫好牛頓第一運動定律跟牛頓第二定律
讓鳥碰到豬會消失
float birdX = 100, birdY = 400;
float birdVX = 0, birdVY = 0;
float birdAX =0, birdAY = 0;
float [][]pigx=new float[5][4];
float [][]pigy=new float[5][4];
boolean [][]pigAlive=new boolean[5][4];
void setup(){
  size(800,600);
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      pigx[i][j]=700-i*100; pigy[i][j]=100+j*100; pigAlive[i][j]=true;
    }
  }
}

void draw(){
  background(255);
  for(int i=0;i<5;i++){
    for(int j=0;j<4;j++){
      if (dist(birdX,birdY,pigx[i][j], pigy[i][j])<100) pigAlive[i][j]=false;
      //llipse(700-i*100,100+j*100,100,100);
      if(pigAlive[i][j]){fill(#07DE0F);ellipse(pigx[i][j],pigy[i][j],100,100);}
    }
  }
  //fill(#F70C0C);ellipse(400,300,100,100);
  fill(#F70C0C);ellipse(birdX, birdY,100,100);
  birdX += birdVX;birdY += birdVY;
  birdVX += birdAX;birdVY += birdAY;
}
void mouseDragged(){
  birdX=mouseX; 
  birdY=mouseY;
}











接下來做出直線跟拋物線
void mouseDragged(){
  birdX=mouseX; 
  birdY=mouseY;
  birdAY = 0; //清除加速度才不會造成自由落體
}
void mouseReleased(){
  birdVX = (100-mouseX)/5.0;
  birdVY = (400-mouseY)/5.0;
  birdAY = 0.98;
}














二:  加入音樂檔



















音樂程式碼
import processing.sound.*;
SoundFile sound;
void setup(){
  size(800,600);
  sound=new SoundFile(this,"dora.mp3");
  sound.play();
  sound.loop();
}

















改用minim播放

程式碼
import ddf.minim.*;

Minim minim;
AudioPlayer player;

void setup(){
  size(800,600);
  minim=new Minim(this);
  player=minim.loadFile("dora.mp3",2048);
  player.play();
}
void draw(){

}