2018年12月27日 星期四

week16_阿天筆記

有成功連接上了!這是我們processing跟arduino全部的程式碼,有一部分是老師幫忙我們改正的


processing

import ddf.minim.*;
Minim minim;
AudioPlayer player;
import processing.serial.*;
Serial myPort1;
Serial myPort2;
PImage imgA, imgB, imgBG ,imgOPBG;
PImage imgBomb, imgRock, imgBombBG;
int [][]grid=new int[100][100];
int state=0;
int remainTime=0;
void setup(){
  size(800, 640);
  minim = new Minim(this);
  player = minim.loadFile("sd.mp3");
  player.loop();
  myPort1 = new Serial(this,"COM5",9600);
  myPort2 = new Serial(this,"COM4",9600);
  imgBG = loadImage("bg.jpg");
  imgA = loadImage("player22.png");
  imgB = loadImage("player1.png");
  imgBomb = loadImage("bomb.png");
  imgRock = loadImage("rock.png");
  imgBombBG = loadImage("bombbg.jpg");
  imgOPBG = loadImage("OPBG.jpg");
  grid[0][0]=3; grid[9][7]=4;
  grid[1][0]=3; grid[9][6]=4;
  grid[0][1]=3; grid[8][7]=4;
  for(int i=0;i<35;i++){
    int a=int(random(10)), b=int(random(10));
    while(grid[a][b]!=0){
      a=int(random(10)); b=int(random(10));
    }
     grid[a][b]=2;
     if(a==bombA[i] && b==bombB[i] || a==bombA[i]+1 && b==bombB[i] || a==bombA[i]-1 && b==bombB[i] || a==bombA[i] && b==bombB[i]+1 || a==bombA[i] && b==bombB[i]-1){
       grid[a][b]=0;
     }
  }
  grid[0][0]=0; grid[9][7]=0;
  grid[1][0]=0; grid[9][6]=0;
  grid[0][1]=0; grid[8][7]=0;
  delay(100);
}

boolean boom=false;
int userA=9, userB=7;
int userC=0, userD=0;
int bombN=0;
int []bombA=new int[100];
int []bombB=new int[100];
int []bombS=new int[100];
int []bombT=new int[100];
//int Button=0;

//int XL, XR, YU, YD, Button;
int XXL, XXR, YYU, YYD;
void draw(){
  println(frameRate);
  getData();//put data in XX,YY,Button
  if(state==0){
    drawOP();
    if(keyCode== ENTER) state=1;
  }else if(state==1){
    drawPlayer();
  }
}
void drawPlayer(){

  noStroke();
  image(imgBG,0,0,width,height);
  image(imgA,userA*80-20,userB*80-10,120,100);
  image(imgB,userC*80-5,userD*80-5,90,90);


  for(int i=0;i<bombN;i++){
    int a=bombA[i] , b=bombB[i];
    if(bombT[i]>0){
      grid[a][b]=1;
      image(imgBomb,bombA[i]*80+5, bombB[i]*80, 80, 80);
      bombT[i]--;
      if(bombT[i]==0)  bombT[i]=-13;
   
   
    }
    if(bombT[i]<0){
      for(int k=-bombS[i];k<=bombS[i];k++){
        image(imgBombBG,(bombA[i]+k)*80, (bombB[i])*80, 80, 80);
        image(imgBombBG,(bombA[i])*80, (bombB[i]+k)*80, 80, 80);
        grid[a][b]=0;
        if(grid[a+1][b]!=0){grid[a+1][b]=0;}
        if(a-1>=0){if(grid[a-1][b]!=0)grid[a-1][b]=0;}
        if(grid[a][b+1]!=0){grid[a][b+1]=0;}
        if(b-1>=0){if(grid[a][b-1]!=0)grid[a][b-1]=0;}

     
        if(userA==bombA[i] && userB==bombB[i] || userA==bombA[i]+1 && userB==bombB[i] || userA==bombA[i]-1 && userB==bombB[i] || userA==bombA[i] && userB==bombB[i]+1 || userA==bombA[i] && userB==bombB[i]-1)
        {boom=true;}
        if(userC==bombA[i] && userD==bombB[i] || userC==bombA[i]+1 && userD==bombB[i] || userC==bombA[i]-1 && userD==bombB[i] || userC==bombA[i] && userD==bombB[i]+1 || userC==bombA[i] && userD==bombB[i]-1)
        {boom=true;}
        if(userA==bombA[i] && userB==bombB[i] || userA==bombA[i]+1 && userB==bombB[i] || userA==bombA[i]-1 && userB==bombB[i] || userA==bombA[i] && userB==bombB[i]+1 || userA==bombA[i] && userB==bombB[i]-1){ userA=-3; userB=-3;}
        if(userC==bombA[i] && userD==bombB[i] || userC==bombA[i]+1 && userD==bombB[i] || userC==bombA[i]-1 && userD==bombB[i] || userC==bombA[i] && userD==bombB[i]+1 || userC==bombA[i] && userD==bombB[i]-1){ userC=-3; userD=-3;}
     
      }
      bombT[i]++;
    }
   
  }

  for(int x=0;x<10;x++){
    for(int y=0;y<8;y++){
      if(grid[x][y]==2) image(imgRock,x*80, y*80, 80, 80);
    }
  }

  if(boom){
    textSize(100);
    fill(#FF4800); text("GameOver", 150,200);
  }
}

void drawOP(){
  image(imgOPBG,0,0,width,height);
  fill(#FF0000);
  textSize(50); text("PRESS ENTER TO START",120,450);
}

byte [] data1 = new byte[3];
byte [] data2 = new byte[3];
byte oldButton1=1, oldButton2=1;
void getData(){
  if(myPort1.available()>0)
  {
    myPort1.readBytes(data1);
    if(data1[0]<30){
      if(userA-1>=0 && grid[userA-1][userB]==0)
        userA--;
    }
    if(data1[0]>100){
      if(userA+1<=9 && grid[userA+1][userB]==0)
      userA++;
    }
    if(data1[1]<30){
      if(userB-1>=0 && grid[userA][userB-1]==0)
      userB--;
    }
    if(data1[1]>100){
      if(userB+1<=7 && grid[userA][userB+1]==0)
        userB++;
    }
 
    if(data1[2]==0 && oldButton1==1 ){
      putBomb1();
      //if(a==bombA[i] && b==bombB[i] || a==bombA[i]+1 && b==bombB[i] || a==bombA[i]-1 && b==bombB[i] || a==bombA[i] && b==bombB[i]+1 || a==bombA[i] && b==bombB[i]-1)
      //bombA[bombN]=userA;  bombB[bombN]=userB;
      //bombS[bombN]=1;  bombT[bombN]=25;
      //bombN++;
    }
    oldButton1=data1[2];
  }


  if(myPort2.available()>0)
  {
    println(data1);
    myPort2.readBytes(data2);
    if(data2[0]<30){
      if(userC-1>=0 && grid[userC-1][userD]==0)
        userC--;
    }
    if(data2[0]>100){
      if(userC+1<=9 && grid[userC+1][userD]==0)
      userC++;
    }
    if(data2[1]<30){
      if(userD-1>=0 && grid[userC][userD-1]==0)
      userD--;
    }
    if(data2[1]>100){
      if(userD+1<=7 && grid[userC][userD+1]==0)
        userD++;
    }
    if(data2[2]==0 && oldButton2==1){
      putBomb2();
    }
    oldButton2=data2[2];
  }

}

void putBomb1(){
  //if(a==bombA[i] && b==bombB[i] || a==bombA[i]+1 && b==bombB[i] || a==bombA[i]-1 && b==bombB[i] || a==bombA[i] && b==bombB[i]+1 || a==bombA[i] && b==bombB[i]-1)
  bombA[bombN]=userA;  bombB[bombN]=userB;
  bombS[bombN]=1;  bombT[bombN]=25;
  bombN++;
}
void putBomb2(){
  //if(a==bombA[i] && b==bombB[i] || a==bombA[i]+1 && b==bombB[i] || a==bombA[i]-1 && b==bombB[i] || a==bombA[i] && b==bombB[i]+1 || a==bombA[i] && b==bombB[i]-1)
  bombA[bombN]=userC;  bombB[bombN]=userD;
  bombS[bombN]=1;  bombT[bombN]=25;
  bombN++;
}
/*void keyPressed(){
  if(keyCode==LEFT && userA-1>=0 && grid[userA-1][userB]==0) userA--;
  if(keyCode==RIGHT && userA+1<=9 && grid[userA+1][userB]==0) userA++;
  if(keyCode==UP && userB-1>=0 && grid[userA][userB-1]==0) userB--;
  if(keyCode==DOWN && userB+1<=7 && grid[userA][userB+1]==0) userB++;
  if(keyCode==' '){
    bombA[bombN]=userA;  bombB[bombN]=userB;
    bombS[bombN]=1;  bombT[bombN]=25;
    bombN++;
  }

  if(keyCode=='A' && userC-1>=0 && grid[userC-1][userD]==0) userC--;
  if(keyCode=='D' && userC+1<=9 && grid[userC+1][userD]==0) userC++;
  if(keyCode=='W' && userD-1>=0 && grid[userC][userD-1]==0) userD--;
  if(keyCode=='S' && userD+1<=7 && grid[userC][userD+1]==0) userD++;
  if(keyCode=='Z'){
    bombA[bombN]=userC;  bombB[bombN]=userD;
    bombS[bombN]=1;  bombT[bombN]=25;
    bombN++;
  }
 
}*/






arduino


void setup()
{
  Serial.begin(9600); // 設置串口波特率
  pinMode(2, INPUT_PULLUP);
  //digitalWrite(2,HIGH);

}
byte data[3];
void loop()
{
  int valX = analogRead(A0);
  int valY = analogRead(A1);// 在針腳2讀取的邏輯狀態的值
  int valButton = digitalRead(2);// 向串口發送數據,以逗號分隔
  data[0]=valX/8;
  data[1]=valY/8;
  data[2]=valButton;
  Serial.write(data, 3);
  delay(50);// 下一次測量之前稍微延遲
}

week16 Steven課堂筆記

Arduino

int photocellPin = 0; // 光敏電阻 (photocell) 接在 anallog pin 2
int photocellVal = 13; // photocell variable
int a=0;
void setup() {
  Serial.begin(9600);
  pinMode(photocellVal, OUTPUT);
}
byte data[1];
void loop() {
  // 讀取光敏電阻並輸出到 Serial Port
  photocellVal = analogRead(A0);
  //Serial.println(photocellVal);
  delay(200);   
  data[0]=photocellVal;
  Serial.write(data,1);
}

Week16

一開始我們是使用ASCII碼設範圍,結果發現我們的兩個人物跟不上我們搖桿操作的速度,會當當的,後來老師告訴我們有一個更好的方法可以改善這個問題,就是使用Data處理。

讀入data
myPort.readBytes(data); //1P
    mariovX = data[0]/20.0;//-100...+100
    mariovY = data[1]/20.0;//-100...+100

myPort2.readBytes(data); //2P
    mario2vX = data[0]/20.0;//-100...+100
    mario2vY = data[1]/20.0;//-100...+100

Week16_沈哲民

期末作品製作:



材料備齊,線材也接上了,led燈調也順利亮了,也有透過簡單的小程式去做和processing 及 arduino去做互動,接下來的步驟就是如何 輸入音樂趣讓程式偵測及傳送的arduino 作互動

Week 16


下一週就要展示作品了,非常的緊張, 還好有組員葆棠以及老師的幫助,程式目前很順利,剩下的就是把搖桿包裝起來了

Week15_沈哲民

製作期末作品

一開始我們還在搜尋接LED strip到 maker uno的板子,需要什麼材料,需要怎麼接,後來發現不是這麼的容易,需要電晶體、電阻、變壓器這些東西才可以完全接上並發光。

而之中我也了解到電晶體也有分、LED 燈調也有分...

Week16 期末作品

01.arduino



02.processing

import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;
import processing.serial.*;
Serial myPort;

float[] zombieX=new float[8];
float[] zombieY=new float[8];
PImage imgZombie,imgBG,img,imgBG2;
int state=0;
int remainTime=0;
int score1=0;
int score2=0;

import ddf.minim.*;
Minim minim;
AudioPlayer player;

void reborn(int i){
  zombieX[i]=int (random(3))*135;
  zombieY[i]=10;
}

void setup(){
  size(400,600);
  myPort = new Serial(this,"COM7",9600);
  imgBG= loadImage("BG.jpg");
  img= loadImage("shot.jpg");
  imgBG2= loadImage("BG2.png");
  minim = new Minim(this);
  player = minim.loadFile("456.mp3");
  player.play();
  
  imgZombie=loadImage("zombie2.png");
  for(int i=0;i<8;i++){
    reborn(i);
    zombieY[i]=325-i*50;
  }
}
int old1=0, old2=0, old3=0;
int Button1=0,Button2=0,Button3=0;
void draw(){
  if(state==0){
    drawOP();
  }else if(state==1){
    drawPlayer();
  }else if(state==2){
    drawED();
  }
  getData();
}
byte [] data=new byte[3];
void getData(){
 if(myPort.available()>0){
  myPort.readBytes(data);
  old1=Button1;
  old2=Button2;
  old3=Button3;
  Button1=data[0];
  Button2=data[1];
  Button3=data[2];
  println(data);
  int press= -1;
  if(data[0]==1 && old1==0) press=1;
  else if(data[1]==1 && old2==0)press=2;
  else if(data[2]==1 && old3==0)press=3;
  
  if( press==1 && zombieX[0]==0) killOneZombie();
  else if( press==2 && zombieX[0]==135) killOneZombie();
  else if( press==3 && zombieX[0]==270) killOneZombie();
  else if(press!= -1 ) bad();
  
 }
}
void killOneZombie(){
  for(int i=0;i<8-1;i++){
    zombieX[i]=zombieX[i+1];
  }
  reborn(7);
  score1+=200;
  minim = new Minim(this);
  player = minim.loadFile("bang.wav");
  player.play();
}

void bad(){
 background(255,0,0); 
 score2+=100;
}

void keyPressed(){
  if(key=='1' && zombieX[0]==0) killOneZombie();
  else if(key=='2' && zombieX[0]==135) killOneZombie();
  else if(key=='3' && zombieX[0]==270) killOneZombie();
  else if(key=='z' && state==0) {state=1;remainTime=30*60;}
  else bad();
}

void drawOP(){
  image(imgBG2,0,0,width,height);
  fill(#FFFFFF);
  textSize(30); text("Press z to Play",95,335);
  textSize(26); text("Happy Halloween!",90,395);
}

void drawPlayer(){
  image(imgBG,0,0,width,height);
  image(img,0,480,400,120);
  for(int i=7;i>=0;i--){
    image(imgZombie, zombieX[i],zombieY[i]);
  }  
  fill(#FC0317); textSize(40); text((remainTime+59)/60,5,40);
  remainTime--;
  if(remainTime<=0) state=2;
}

void drawED(){
  image(imgBG,0,0,width,height);
  fill(#FC0317); text("    Game End\nPlus Score:"+score1,55,200);
  fill(#FC0317); text(" Minus Score:-"+score2,10,320);
  fill(#FC0317); text("Score:"+(score1-score2),140,445);
}


03.成品