2019年12月19日 星期四

☆。week15開始的互動技術。★

import processing.serial.*;
import processing.net.*;
Serial serial;
Server server;
Client client;
PVector ball, bV, RUC, LUC, RV, LV;
int bc=10, t1=0, t2=0;//bc=球變色,t1:t2=分數
//int RUCx=750, RUCy=300;//RIGHT USER CONTROLLER 右邊使用者控制
//int LUCx=50, LUCy=300;//左邊使用控制
void setup() {
  size(800, 600);
  server=new Server(this,7777);
  frameRate(60);
  ball= new PVector(400, 300);
  bV= new PVector(-2, -2);
  RUC= new PVector(750, 300);
  LUC= new PVector(50, 300);
  RV=new PVector(0, 0);
  LV=new PVector(0, 0);
 
  //serial = new Serial(this,"COM5",9600);//COM4可能會改
}
void draw() {
  Client temp=server.available();
  if(temp!=null){client=temp;}
  if(client !=null){
    String now=client.readString();
    if(now !=null){
      String[] now2=splitTokens(now);
     
    }
  }
  ground();//背景
  ball();//球
  rebound();//反彈
  SERIAL();
  RUC();//右邊使用者控制
  LUC();//左邊使用控制
  Range();//使用者邊界
}
int RUBx=0,RUBy=0,LUBx=0,LUBy=0;
void SERIAL(){
   /*if(serial.available()>0){
    String now=serial.readString();
    String[] xy=splitTokens(now);
    RUBx=int(xy[0]); RUBy=int(xy[1]);
  }*/
  SERIALV();  //做加速的公式
}
void SERIALV(){
 
}
void RUC() {//右邊使用者控制
  /*if(serial.available()>0){
    String now=serial.readString();
    String[] Rxy=splitTokens(now);
    RUC.x=int(Rxy[0]); RUC.y=int(Rxy[0]);
  }*/
 
  fill(0, 0, 255);
  ellipse(RUC.x, RUC.y, 50, 50);
  RUC.add(RV);
  //print(RUC.y+"\n");
}
void Range() {//使用者邊界
  if (RUC.x<=420) RUC.x=420;
  if (RUC.x>=750) RUC.x=750;
  if (RUC.y>=505) RUC.y=505;
  if (RUC.y<=95) RUC.y=95;
 
  if (LUC.x<=50) LUC.x=50;
  if (LUC.x>=370) LUC.x=370;
  if (LUC.y>=505) LUC.y=505;
  if (LUC.y<=95) LUC.y=95;
 
  if (ball.x<=45) ball.x=50;
  if (ball.x>=755) ball.x=750;
  if (ball.y>=510) ball.y=505;
  if (ball.y<=90) ball.y=95;
}
void keyPressed() {
  if (keyCode == RIGHT) {
    RV.x=2;
  }if (keyCode == LEFT) {
    RV.x=-2;
  }if (keyCode == UP) {
    RV.y=-2;
  }if (keyCode == DOWN) {
    RV.y=2;
  }
  if (key == 'A'||key == 'a') {
    LV.x=-2;
  }if (key == 'D'||key == 'd') {
    LV.x=2;
  }if (key == 'W'||key == 'w') {
    LV.y=-2;
  }if (key == 'S'||key == 's') {
    LV.y=2;
  }
}
void LUC() {//左邊使用控制
  fill(0, 0, 255);
  ellipse(LUC.x, LUC.y, 50, 50);
  //print(LUC.x+"\n");
  LUC.add(LV);
}
void ball() {
  fill(10);
  ellipse(ball.x, ball.y, 40, 40);
  fill(bc);
  ellipse(ball.x, ball.y, 15, 15);
  ball.add(bV);
}
void rebound() {//反彈
  if (ball.y>530-20 || ball.y<45+45) {
    bV.y*=-1;
    bc=255;
  }
  if (ball.x>800-45||ball.x<25+20) {
    bV.x*=-1;
    bc=10;
  }
  if (ball.x+20>=RUC.x-25 && ball.x-20<=RUC.x+25 &&ball.y+20>=RUC.y-25&&ball.y-20<=RUC.y+25) {
    println(ball.x,ball.y,RUC.x,RUC.y);
    if(bV.x>0){bV.x=RV.x+2;}
    if(bV.x<0){bV.x=RV.x-2;}
    if(bV.y>0){  bV.y=RV.y+2;}
    if(bV.y<0){  bV.y=RV.y-2;}
   
 
    bc=100;
  }
 
}
void ground() {//背景
  background(#09E34C);
  fill(0);
  rect(0, 0, 800, 50);
  rect(0, 550, 800, 50);
  textSize(45);
  fill(255);
  text(t1, 450, 40);
  text(t2, 300, 40);
  noStroke();
  fill(250);
  rect(400-5, 0, 10, 600);
  ellipse(400, 300, 170, 170);
  fill(#FFBC00);
  rect(0, 20+25, 800, 25);
  rect(0, 530, 800, 25);
  rect(0, 0, 25, 220); 
  rect(0, 380, 25, 220);
  rect(800-25, 0, 25, 220); 
  rect(800-25, 380, 25, 220);
  fill(#09E34C);
  ellipse(400, 300, 150, 150);
}

沒有留言:

張貼留言

alanhc 互動技術-week17 [final]

回顧這學期的作品:  期中作業:LANDING:PLANET 賣點&特點: 炫麗的特效 物理(星球重力及降落)及粒子系統(噴射) 世界地圖可根據視角縮放 困難點: 重寫3次最終改寫成物件導向的CLASS寫法...