顯示具有 00160104_張偉涵 標籤的文章。 顯示所有文章
顯示具有 00160104_張偉涵 標籤的文章。 顯示所有文章

2015年1月18日 星期日

Final_影片及程式碼

影片:




*******************程式碼*******************
ARDUINO:
void setup(){
  Serial.begin(9600);
  pinMode(2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
  pinMode(4,INPUT_PULLUP);
  pinMode(5,INPUT_PULLUP);
  pinMode(13,OUTPUT);
}
int now2=0,now=0,now3=0,now4=0;
void loop(){
  int pressButtonLeft = digitalRead(2);
  int pressButtonRight = digitalRead(3);
  int restart = digitalRead(5);
  int shoot = digitalRead(4);
  if(now==1 && pressButtonLeft==HIGH){//left
    digitalWrite(13,LOW);
    Serial.write('A');  
    now=0;
  }
  else if(now==0 && pressButtonLeft == LOW){
    digitalWrite(13, HIGH);
    Serial.write('a');
    now=1;
  }
  delay(10);

  if(now2==1 && pressButtonRight ==HIGH){//right
    digitalWrite(13,LOW);
    Serial.write('B');  
    now2=0;
  }
  if(now2==0 && pressButtonRight == LOW){
    digitalWrite(13, HIGH);
    Serial.write('b');
    now2=1;
  }
  delay(10);

  if(now3==1 && shoot ==HIGH){//shot
    digitalWrite(13,LOW);
    Serial.write('C');  
    now3=0;
  }
  if(now3==0 && shoot == LOW){
    digitalWrite(13, HIGH);
    Serial.write('c');
    now3=1;
  }
  delay(10);

  if(now4==1 && restart ==HIGH){//shot
    digitalWrite(13,LOW);
    Serial.write('D');  
    now4=0;
  }
  if(now4==0 && restart == LOW){
    digitalWrite(13, HIGH);
    Serial.write('d');
    now4=1;
  }
  delay(10);

}




PROCESSING:

import processing.serial.*;
import ddf.minim.*;
AudioPlayer player1, player2, player3;
Minim minim;//audio context
Serial myPort;
PImage plane[]=new PImage[3], imgBG, canon, bullet;
int pX[]= {
  0, 0, 0
}
, pY[]= {
  0, 0, 0
}
, cX[]= {
  375
}
, cY[]= {
  500
}
, bX[]= {
  387
}
, bY[]= {
  520
};
float pVX[]= {
  1, 1, 1
}
, pVY[]= {
  1, 1, 1
}
, bVY=2, bLife[]= {
  0
}
, pbX[]= {
  0, 0, 0
}
, pbY[]= {
  0, 0, 0
}
, pbv=1;
int shoot=0, gameover=-10, score=0;
void setup() {
  size(800, 600);
  myPort = new Serial(this, "COM3", 9600);
  imgBG=loadImage("sky.png");
  canon=loadImage("canon.png");
  bullet=loadImage("bullet.png");
  for (int i=0; i<3; i++)  plane[i]=loadImage("plane"+int(random(3))+".png");
  for (int i=0; i<3; i++) {//plane and planeBullet begin
    pX[i]=int(random(30))*25;
    pbX[i]=pX[i]+30;
    pY[i]=int(random(7))*25+25;
    pbY[i]=pY[i]+31;
  }
  minim = new Minim(this);
  player1 = minim.loadFile("BGM.mp3", 2048);
  player2 = minim.loadFile("bomb.mp3", 2048);
  player3 = minim.loadFile("shoot.mp3", 2048);
  player1.play();
}
void draw() {
  background(255);

  if (myPort.available()>0) {
    int a=myPort.read();
    if (a=='b') {
      cX[0]+=50;
      bX[0]+=50;
    }
    if (a=='a') {
      cX[0]-=50;
      bX[0]-=50;
    }
    if (a=='c')shoot++;
    if (a=='d') {
      gameover=-1;
      score=0;
    }
  }
  if (gameover>0) {//Gameover
    fill(255, 0, 0);
    rect(0, 0, 800, 600);
    textSize(100);
    fill(0);
    text("GameOver!", 125, 200);
    textSize(80);
    text("Score = "+score, 125, 300 );
    textSize(40);
    text("click backspace to replay", 125, 400 );
  } else {
    image(imgBG, 0, 50);
    image(bullet, bX[0], bY[0], 40, 40);
    image(canon, cX[0], cY[0], 80, 100);
    fill(0);
    textSize(18);
    text("use <- and -> to control canon location, click Ctrl to shoot.", 5, 20);
    for (int i=0; i<3; i++) {//hit
      if (abs(pX[i]-bX[0])<100 &&abs(pY[i]-bY[0])<15) {
        score+=1;
        pY[i]=-100;
        pbY[i]=-100;
        player2 = minim.loadFile("bomb.mp3", 2048);
        player2.play();
      }
    }
    text("Score = "+score, 5, 40);
    for (int i=0; i<3; i++) {//canon hit
      if (abs(pbX[i]-cX[0])<=20 &&pbY[i]>500 ) gameover++;
    }
    for (int i=0; i<3; i++) {//draw plane and planeBullet
      fill(0);
      ellipse(pbX[i], pbY[i], 10, 10);
      image(plane[i], pX[i], pY[i], 100, 60);
    }
    for (int i=0; i<3; i++) {//plane speed and pBspeed
      if (pX[i]>700) {
        pX[i]=0;
        pbX[i]=30;
        plane[i]=loadImage("plane"+int(random(3))+".png");
        pY[i]=int(random(7))*25+25;
        pVX[i]=1;
      } else if (pbY[i]>600) {
        pbY[i]=pY[i]+31;
        pbv=1;
      } else {
        pX[i]+=pVX[i];
        pbX[i]+=pVX[i]-0.02;
        pVX[i]+=0.05;
        pbY[i]+=pbv;
        pbv+=0.05;
      }
    }
    if (shoot>0) {
      //image(bullet,bX[0],bY[0],40,40);

      for (int j=0; j<1; j++) {//canonBullet speed
        if (bY[j]<30) {
          bX[j]=cX[0]+20;
          bY[j]=500;
          bVY=2;
          shoot=0;
        } else {
          bY[j]-=bVY;
          bVY+=0.5;
        }
      }
    }
  }
}
void keyPressed() {
  if (keyCode==RIGHT && cX[0]<725 && bY[0]<500) cX[0]+=50;
  else if (keyCode==RIGHT && cX[0]<725 ) {
    cX[0]+=50;
    bX[0]+=50;
  }
  if (keyCode==LEFT && cX[0]>0&& bY[0]<500) cX[0]-=50;
  else if (keyCode==LEFT && cX[0]>0) {
    cX[0]-=50;
    bX[0]-=50;
  }
  if (keyCode==CONTROL) {
    shoot++;
    player3 = minim.loadFile("shoot.mp3", 2048);
    player3.play();
  }
  if (keyCode==32) {
    gameover=0;
    score=0;
    for (int i=0; i<3; i++) {
      pbY[i]=0;
      pbX[i]=0;
      pX[i]=0;
      pY[i]=0;
    }
  }
}

2014年12月15日 星期一

旋鈕:運用

Processing:
import processing.serial.*;
Serial myPort;
void setup(){
    size(255+80,200);
    myPort=new Serial(this,"COM4",9600);
}
int posX=0;
void draw(){
    background(255);
    fill(#ff0000);rect(posX,0,80,200);
    if(myPort.available()>0){
        posX=myPort.read();
        println(posX);
  }
}
Arduino:
void setup(){
  Serial.begin(9600);
}
void loop(){
  int value = analogRead(A0);//0-1023
  Serial.write(value/4);
  delay(20);
}


旋鈕 可變電阻

void setup(){
   pinMode(13, OUTPUT);
}
void loop(){
    int value = analogread(A0);

    digitalWrite(13, HIGH);
delay(value);
digitalWrite(13, LOW);
delay(value);


2014年11月24日 星期一

霹靂燈

霹靂車的燈-霹靂燈~
void setup() {              
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
}
void loop() {
  digitalWrite(13, HIGH);  
  delay(150);              
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
  delay(150);
  digitalWrite(11, HIGH);
  digitalWrite(12, LOW);  
  delay(150);              
  digitalWrite(11, LOW);
  digitalWrite(10, HIGH);  
  delay(150);
  digitalWrite(10, LOW);
 digitalWrite(11, HIGH);
  delay(150);
  digitalWrite(11, LOW);
  digitalWrite(12, HIGH);  
  delay(150);
  digitalWrite(12, LOW);
  digitalWrite(13, HIGH);

}

互動技術概論雙師心得



        這周業師介紹了許許多多他們製作的成品,像是協助白蘭氏雞精製作的活動,呈現的方式令人驚艷。還有故宮的展覽,都是令人驚奇的作品,我深深的感受到將來工作上重要的不只是製作的技術,還有呈現方式的設計,在設計的心思以及藝術方面的修習都相當重要。看到他們在於溜冰表演上的技術令我相當佩服,他們對於問題的解決也相當精明與俐落,不論遇到什麼樣的狀況都能想出不錯的配套和解決方法,令人敬佩。

互動技術概論業師授課心得


這周業師像我們介紹了他們工作的環境,讓我更了解現在業界所可能面臨的狀況,也介紹了他們所製作的許多作品,令人相當敬佩與讚嘆,居然靠他們幾個人就能夠做出這麼多栩栩如生的作品。從他們製作的作品中才知道原來現在的科技已經能夠製作出這麼多厲害的效果,令我對將來能做出來的作品抱持了許多的期待,希望自己與能夠做出像他們這麼厲害的作品。隨著現在互動技術與紅外線感應的科技越來越發達,將來舞台表演的呈現方式令人越來去期待,像他們製作的新形態舞台表演,令我印象深刻。
       
他們協助安娜琪舞台劇場製作的舞台效果,看見他們製作的作品,令我相當震驚。


2014年10月27日 星期一

期中作品~~~

遊戲截圖↓↓↓
-----------------------------------------------------------------------------------

遊戲實測錄影↓↓↓
---------------------------------------------------------------------------------------

=========================期中作業程式碼 玩法和缺點↓↓↓======================
成員:00160104 張偉涵 01160306 呂季樺
遊戲介紹及玩法:
這是一款操作大砲打天上飛機的遊戲,透過鍵盤的左右鍵來操作大砲的位置,藉此閃躲飛機丟下來的炸彈,然後透過Ctrl鍵來發射大砲打飛機,打死飛機會得到分數,但是被飛機的炸彈打中就會遊戲結束。
不過,在子彈的碰撞上位置並沒能抓的相當精確,會有些許誤差,有待改善。
還有飛機被大砲打中後不會消失...
程式碼:
PImage plane[]=new PImage[3],imgBG,canon,bullet;
int pX[]={0,0,0},pY[]={0,0,0},cX[]={375},cY[]={500},bX[]={387},bY[]={520};
float pVX[]={1,1,1},pVY[]={1,1,1},bVY=2,bLife[]={0},pbX[]={0,0,0},pbY[]={0,0,0},pbv=1;
int shoot=0,gameover=0,score=0;
void setup(){
  size(800,600);
  imgBG=loadImage("sky.png");
  canon=loadImage("canon.png");
  bullet=loadImage("bullet.png");
  for(int i=0;i<3;i++)  plane[i]=loadImage("plane"+int(random(3))+".png");
  for(int i=0;i<3;i++){//plane and planeBullet begin
    pX[i]=int(random(30))*25;
    pbX[i]=pX[i]+30;
    pY[i]=int(random(7))*25+25;
    pbY[i]=pY[i]+31;
  }
}
void draw(){
  background(255);
  image(imgBG,0,50);
  image(bullet,bX[0],bY[0],40,40);
  image(canon,cX[0],cY[0],80,100);
  if(gameover>0){//Gameover
    fill(255,0,0);
    rect(0,0,800,600);
    textSize(100);
    fill(0);
    text("GameOver!", 125, 200);
    textSize(80);
    text("Score = "+score, 125,300 );
  }
  else{
    fill(0);
    textSize(18);
    text("use <- and -> to control canon location, click Ctrl to shoot.", 5, 20);
    for(int i=0;i<3;i++){
      if(abs(pX[i]-bX[0])<=100 &&abs(pY[i]-bY[0])<5){
        score+=1;
        //image(plane[i],pX[i],pY[i],100,60,1);
      }
    }
    text("Score = "+score, 5, 40);
    for(int i=0;i<3;i++){
      if(abs(pbX[i]-cX[0])<=10 &&pbY[i]>487 ) gameover++;
    }
    for(int i=0;i<3;i++){//draw plane and planeBullet
      fill(0);
      ellipse(pbX[i],pbY[i],10,10);
      image(plane[i],pX[i],pY[i],100,60);
    }
    for(int i=0;i<3;i++){//plane speed and pBspeed
       if(pX[i]>700){
         pX[i]=0;
         pbX[i]=30;
         plane[i]=loadImage("plane"+int(random(3))+".png");
         pY[i]=int(random(7))*25+25;
         pVX[i]=1;
       }
     
       else if(pbY[i]>600){
         pbY[i]=pY[i]+31;
         pbv=1;
       }
       else{
         pX[i]+=pVX[i];
         pbX[i]+=pVX[i]-0.02;
         pVX[i]+=0.05;
         pbY[i]+=pbv;
         pbv+=0.05;
      }
    }
    if(shoot>0){
      //image(bullet,bX[0],bY[0],40,40);
       for(int j=0;j<1;j++){//canonBullet speed
           if(bY[j]<30){
             bX[j]=cX[0]+20;
             bY[j]=500;
             bVY=2;
             shoot=0;
           }
           else{
             bY[j]-=bVY;
             bVY+=0.5;
           }
      }
      }
  }
}
void keyPressed(){
   if(keyCode==RIGHT && cX[0]<725 && bY[0]<500) cX[0]+=50;
   else if(keyCode==RIGHT && cX[0]<725 ){
     cX[0]+=50;
     bX[0]+=50;
   }
   if(keyCode==LEFT && cX[0]>0&& bY[0]<500) cX[0]-=50;
   else if(keyCode==LEFT && cX[0]>0){
     cX[0]-=50;
     bX[0]-=50;
   }
   if(keyCode==CONTROL) shoot++;
}

2014年10月20日 星期一

Week 6

期中作品 步驟:
1. 設定砲台 讓他可以左右移動和轉頭
2. 設定飛機 飛機可以從左到右隨機飛出
3. 設定子彈 飛機或是砲台碰觸到子彈時會Gae Over
4. 飛機被子但擊中時會加分