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

2019年1月12日 星期六

Week16-04160453

今天寫除了飛機可以社子彈並允實落下,但是無法解決子但碰到允實讓允實消失,希望可以在廉假時解決這個問題

PImage imgplane, imgbg, imgs, imgS, imgfire;
float planeX=250, planeY=600;
float enemyX, enemyY, enemyVX, enemyVY;
float[] stoneX = new float[10000];
float[] stoneY = new float[10000];
float[] stone1X = new float[10000];
float[] stone1Y = new float[10000];
boolean[] stoneDie = new boolean[10000];
boolean[] stone1Die = new boolean[100];
/*
void reborn(int i){
   fireX[i]=mouseX-16;
   fireY[i]=mouseY-100;
   fireVY[i]=-20;
}
*/
void setup() {
  size(600, 800); 
  imgplane = loadImage("plane.png");
  imgbg = loadImage("bg.jpg");
  imgs = loadImage("stone1.png");

  imgfire = loadImage("fire.png");
  
  for(int i=0;i<100;i++){
    stoneX[i] = random(0,500);
    stoneY[i] =-random(2000);
    stoneDie[i] = false;
    stone1X[i] = random(0,500);
    stone1Y[i] =-random(2000);
    stone1Die[i] = false;
  }
}
void draw() {
  image(imgbg, 0, 0, width, height);
  image(imgplane, mouseX-40, mouseY-60, 80, 120);
  for(int i=0;i<fireN;i++){
     if(stoneDie[i])continue;
     image(imgs,stoneX[i],stoneY[i],70,70);
     stoneY[i]+=9;
     if(stoneY[i]>650) stoneY[i]=-2000+800;
     image(imgfire,fireX[i],fireY[i], 30, 60);
      fireY[i]+=fireVY[i];
      fireVY[i]-= 0.98;
     //if(dist(fireX-50,fireY-50,stoneX[i],stoneY[i])<30)
        //stoneDie[i]=true;
     
  }
 
}
float []fireX=new float[10000];
float []fireY=new float[10000];
float []fireVY=new float[10000];
boolean []fireFlying = new boolean[10000];
int fireN=0;
void mousePressed(){
   fireFlying[fireN]=true;
   fireX[fireN]=mouseX-16;
   fireY[fireN]=mouseY-100;
   fireVY[fireN]=-20;
   fireN++;
}

2019年1月5日 星期六

AHSU interaction week 16

import processing.serial.*;
import ddf.minim.*;
Minim minim;
AudioPlayer player;
Serial myPort;
int state=0;
PImage bg, playing, cat87, cat887, ending, end, again;
PImage []rock=new PImage[5];
float catx=300, caty=400, catvx=0, catvy=0;
float []rockx=new float[5];
float []rocky=new float[5];
float []rockvx=new float[5];
float []rockvy=new float[5];
boolean catL=false, catR=false;
int time, score;

void setup() {
  size(600, 800);
  myPort = new Serial(this, "COM3", 9600);
  minim =new Minim(this);
  player=minim.loadFile("Bongo Cat - Nyan Cat.mp3");
  bg=loadImage("title.png");
  playing=loadImage("universe.png");
  cat87=loadImage("nyan-cat.png");
  cat887=loadImage("nyan-cat87.png");
  ending=loadImage("game over.png");
  end=loadImage("god_logo_800.jpg");
  again=loadImage("play-again.png");
  imageMode(CENTER);
  for (int i=0; i<5; i++) {
    rock[i]=loadImage("ball.png");
    rockx[i]=random(50, 550);
    rocky[i]=random(50, 750);
    rockvx[i]=5*random(-1, 1);
    rockvy[i]=5*random(-1, 1);
  }
  player.loop();
}

void draw() {
  frameRate=30;
  getData();
  if (state==0) {
    image(bg, width/2, height/2, width, height);
    if (data[2]==1)
      state=1;
  } else if (state==1) {
    image(playing, width/2, height/2, width, height);
    if (data[0]==64 || data[1]==64) {
      catvx=0;
      catvy=0;
    }
    catvx=(data[0]-64)/5.0;
    catvy=(data[1]-64)/5.0;
    catx+=catvx;
    caty+=catvy;
    if (!(catR) && !(catL)) {
      image(cat87, catx, caty, 133, 100);
    }
    if (catvx<0) {
      image(cat887, catx, caty, 133, 100);
      catL=true;
      catR=false;
    } else if (catvx>0) {
      image(cat87, catx, caty, 133, 100);
      catR=true;
      catL=false;
    } else {
      if (catL) image(cat887, catx, caty, 133, 100);
      else if (catR) image(cat87, catx, caty, 133, 100);
    }

    if (catx<60)  catx=60;
    if (catx>538)  catx=538;
    if (caty<30)  caty=30;
    if (caty>763)  caty=763;

    for (int i=0; i<5; i++) {
      image(rock[i], rockx[i], rocky[i], 75, 73);
      rockx[i]+=rockvx[i];
      rocky[i]+=rockvy[i];
      if (frameCount%30==0) {
        rockvx[i]=rockvx[i]*random(1.0, 1.1);
        rockvy[i]=rockvy[i]*random(1.0, 1.1);
      }
      if (rockx[i]<=30 || rockx[i]>=566)
        rockvx[i] = -rockvx[i];
      if (rocky[i]<=30 || rocky[i]>=763)
        rockvy[i] = -rockvy[i];
      if ((time+29)/30>1 && dist(rockx[i], rocky[i], catx, caty)<(75/2+45/2)) {
        state=2;
        catx=300;
        caty=400;
      }
    }
    time++;
    fill(255);
    textSize(50);
    if ((time+29)/30<10)  text(((time+29)/30), 300-10, 60);
    else  text(((time+29)/30), 300-15-10, 60);
    score=(time+29)/30*10;
  } else if (state==2) {
    image(end, width/2, height/2, width, height);
    image(ending, 300, 400+20, 870/4, 460/4);
    image(again, 300, 650, 200, 100);
    text("your score is "+score, 150-40, 220);
    if (data[0]==64 || data[1]==64) {
      catvx=0;
      catvy=0;
    }
    catvx=(data[0]-64)/5.0;
    catvy=(data[1]-64)/5.0;
    catx+=catvx;
    caty+=catvy;
    if (!(catR) && !(catL)) {
      image(cat87, catx, caty, 133, 100);
    }
    if (catvx<0) {
      image(cat887, catx, caty, 133, 100);
      catL=true;
      catR=false;
    } else if (catvx>0) {
      image(cat87, catx, caty, 133, 100);
      catR=true;
      catL=false;
    } else {
      if (catL) image(cat887, catx, caty, 133, 100);
      else if (catR) image(cat87, catx, caty, 133, 100);
    }

    if (catx<60)  catx=60;
    if (catx>538)  catx=538;
    if (caty<30)  caty=30;
    if (caty>763)  caty=763;

    if (catx>200-50 && catx<400+50 && caty>550-50 && caty<650+50 && data[2]==1) {
      time=0;
      score=0;
      catx=300;
      caty=400;
      for (int i=0; i<5; i++) {
        rockx[i]=random(50, 550);
        rocky[i]=random(50, 750);
        rockvx[i]=5*random(-1, 1);
        rockvy[i]=5*random(-1, 1);
      }
      state=1;
    }
  }
}

byte [] data = new byte[3];
void getData() {
  if (myPort.available()>0) {
    myPort.readBytes(data);
  }
}

2019年1月1日 星期二

Week16 呆江與泓丞的期末作品

製作期末作品

1.關卡設計

基於我們的按鈕僅買了4個,所以我們把關卡改成3關

2.設計上的改變

(1)考慮新增LED紅燈當生命值
(2)增加障礙怪物

3.修正的問題

(1)轉場
(2)怪物吸起來卡卡

裝置圖



基本架構都跟上周提及的差不多,但在期末展示的時候我們沒有展示到一些內容,
透過部落格跟大家分享一下我們遇到的狀況......

1.紅色LED燈怎麼沒在裝置上

因為製作的時候我們把盒子弄壞了,所以緊急製作了簡易裝製上台

2.障礙怪物並沒有出現

我們嘗試新增2隻障礙怪物在場上的時候,發現會有掉貞的狀況,為了不要讓我們的作品看起來節奏太過緩慢,沒有把這個功能拿出來展示

刪除上面題及的遊戲機制後,整個遊戲雖然很流暢,
但缺少了死亡的可能,會讓人覺得很乏味
雖然起初確實是要製作讓人放鬆的小遊戲,但少了死掉的條件還真的玩久了會無聊

最後,分享一下我們的程式碼

Processing:

//characters
PImage[] imgBG=new PImage[7];  PImage[] imgKirby=new PImage[4];  PImage[] imgMonster=new PImage[6];

float [] MonsterX = new float[80];  float [] MonsterY = new float[80];
float  MonsterVX=8 ;  float [] MonsterVY = new float[80];
//Die Monster
float DieX;  float DieY;  float DieVX=8;  float DieVY;
//reboorn
boolean [] MonsterDie = new boolean[80];
float [] MonsterDieVX = new float[80];  float [] MonsterDieVY = new float[80]; 

//change bg
int c=1;
//store score
int score=0;  int score2=0;  int score3=0;

import processing.serial.*;
Serial myPort;  
int val;
import ddf.minim.*;
Minim minim;
AudioPlayer player;

//reborn monster
void reborn(int i){
  MonsterDie[i] = false;
  MonsterX[i] = -random(1000);  MonsterY[i] = random(30,630);
}
void reborn2(int i){
  MonsterDie[i] = false;
  MonsterX[i] = random(1300,2500);  MonsterY[i] = random(30,630);
}
//level change
void level(int a){
  if(a>=30){
    for(int i=0; i<40; i++){
    MonsterX[i] = -random(1000);  MonsterY[i] = random(30,630);
    MonsterVY[i] = random(-1,2);
    MonsterDie[i] = false;
    }
    for(int i=40;i<80;i++){
      MonsterX[i] = random(1300,2500);  MonsterY[i] = random(30,630);
       MonsterVY[i] = random(-1,2);
      MonsterDie[i] = false;
    }
  }
}

void setup(){
  size(1280,720);
  minim = new Minim(this);
  player = minim.loadFile("kirby.mp3",2048);
  player.play();
  player.loop();
  String portName = Serial.list()[0];  
  myPort = new Serial(this,"COM3", 9600);
  //load background and characters
  for(int i=0; i<3; i++){
    imgBG[i] = loadImage("bg0"+i+".jpg");
  }
  imgBG[3] = loadImage("lv01.jpg");
  imgBG[4] = loadImage("lv02.jpg");
  imgBG[5] = loadImage("bg.jpg");
  for(int i=0; i<4; i++){
    imgKirby[i] = loadImage((i+1)+".png");
  }
  for(int i=0; i<6; i++){
    imgMonster[i] = loadImage("00"+(i+1)+".png");
  }
  //stat bg & text
  image(imgBG[0],width/500,height/300,width,height);
  fill(30,30,30);
  rect(400,250,500,60,7);
  textSize(50);
  fill(255,255,255);
  text("Press Space to Start",410,300);
  //original coordinates
  for(int i=0; i<40; i++){
    MonsterX[i] = -random(1000);  MonsterY[i] = random(30,630);
    MonsterVY[i] = random(-1,2);
    MonsterDie[i] = false;
  }
  for(int i=40;i<80;i++){
    MonsterX[i] = random(1300,2500);  MonsterY[i] = random(30,630);
     MonsterVY[i] = random(-1,2);
    MonsterDie[i] = false;
  }
}
boolean check = true;
void draw(){
  if (myPort.available() > 0) {     
     val = myPort.read();   
  }
  if(val==1 && check==true){
    check=false;
    c++;
  }
  if(val==0 && check==false){
    check=true;
  }
  
  //description bg
  if(c==2) {
    image(imgBG[1],width/500,height/300,width,height);
  }
  //game bg
  if(c==3){ 
    image(imgBG[2],width/500,height/300,width,height);
    //level 1 Monster
    for(int i=0;i<40;i++){
      MonsterX[i] += MonsterVX;
      image(imgMonster[0],MonsterX[i],MonsterY[i],90,90);
      if(MonsterX[i] > 1200){
        MonsterDie[i] = true;
        reborn(i);
      }
    }
    for(int i=40;i<80;i++){
      MonsterX[i] -= MonsterVX;
      image(imgMonster[4],MonsterX[i],MonsterY[i],90,90);
      if(MonsterX[i] < 0){
        MonsterDie[i] = true;
        reborn2(i);
      }
    }
    for(int i=0;i<80;i++){
      if(val==2){
        if(score<=30 && c==3){
          MonsterDieVX[i] = (540-MonsterX[i])/8;
          MonsterDieVY[i] = (450-MonsterY[i])/8;
          if(dist(540,450,MonsterX[i],MonsterY[i])<300){
            if(MonsterX[i]>620 && i < 40){
              MonsterX[i]-=5;
              MonsterY[i]+=MonsterDieVY[i];
            }
            if(MonsterX[i]<460 && i > 40){
              MonsterX[i]+=25;
              MonsterY[i]+=MonsterDieVY[i];
            }
            else{
              MonsterX[i]+=MonsterDieVX[i];
              MonsterY[i]+=MonsterDieVY[i];
            }
          }
          if(dist(540,450,MonsterX[i],MonsterY[i])<80){
            MonsterDie[i]=true;
            score++;
            reborn(i);
          }
        }
      }
    }
    //level 1 Kirby(520,450)
    image(imgKirby[0],520,450,120,120);
  }
  //level 1 Monster
  if(score>=30 && c==3){
    level(score);
    image(imgBG[3],width/500,height/300,width,height);
  }
  if(c==4){  
    image(imgBG[2],width/500,height/300,width,height);
    //level 2 Monster
    for(int i=0;i<40;i++){
      MonsterX[i] += MonsterVX;
      image(imgMonster[0],MonsterX[i],MonsterY[i],90,90);
      if(MonsterX[i] > 1200){
        MonsterDie[i] = true;
        reborn(i);
      }
    }
    for(int i=40;i<80;i++){
      MonsterX[i] -= MonsterVX;
      image(imgMonster[4],MonsterX[i],MonsterY[i],90,90);
      if(MonsterX[i] < 0){
        MonsterDie[i] = true;
        reborn2(i);
      }
    }
    for(int i=0;i<80;i++){
      if(val==2){
        if(score<=60 && c==4){
         MonsterDieVX[i] = (540-MonsterX[i])/8;
         MonsterDieVY[i] = (450-MonsterY[i])/8;
         if(dist(540,450,MonsterX[i],MonsterY[i])<300){
           if(MonsterX[i]>620 && i < 40){
              MonsterX[i]-=5;
              MonsterY[i]+=MonsterDieVY[i];
            }
            if(MonsterX[i]<460 && i > 40){
              MonsterX[i]+=25;
              MonsterY[i]+=MonsterDieVY[i];
            }
            else{
              MonsterX[i]+=MonsterDieVX[i];
              MonsterY[i]+=MonsterDieVY[i];
            }
         }
         if(dist(540,450,MonsterX[i],MonsterY[i])<80){
           MonsterDie[i]=true;
           score++;
           reborn(i);
          }
        }
      }
      if(val==4){
        if(score2<=30 && c==4){
         MonsterDieVX[i] = (175-MonsterX[i])/8;
         MonsterDieVY[i] = (150-MonsterY[i])/8;
         if(dist(175,150,MonsterX[i],MonsterY[i])<300){
           if(MonsterX[i]>255 && i < 40){
              MonsterX[i]-=5;
              MonsterY[i]+=MonsterDieVY[i];
            }
            if(MonsterX[i]<95 && i > 40){
              MonsterX[i]+=25;
              MonsterY[i]+=MonsterDieVY[i];
            }
            else{
              MonsterX[i]+=MonsterDieVX[i];
              MonsterY[i]+=MonsterDieVY[i];
            }
         }
         if(dist(175,150,MonsterX[i],MonsterY[i])<80){
           MonsterDie[i]=true;
           score2++;
           reborn(i);
         }
        }
      }
    }
    //level 2 Kirby(175,150)
    image(imgKirby[0],520,450,120,120);
    image(imgKirby[1],175,150,120,120);
  }
  if(score>=60 && score2>=30 && c==4){
    level(score2);
    image(imgBG[4],width/500,height/300,width,height);
  }
  if(c==5){
    image(imgBG[2],width/500,height/300,width,height);
    //level 3 Monster
    for(int i=0;i<40;i++){
      MonsterX[i] += MonsterVX;
      image(imgMonster[0],MonsterX[i],MonsterY[i],90,90);
      if(MonsterX[i] > 1200){
        MonsterDie[i] = true;
        reborn(i);
      }
    }
    for(int i=40;i<80;i++){
      MonsterX[i] -= MonsterVX;
      image(imgMonster[4],MonsterX[i],MonsterY[i],90,90);
      if(MonsterX[i] < 0){
        MonsterDie[i] = true;
        reborn2(i);
      }
    }
    //level 3 Kirby(1000,300)
    image(imgKirby[0],520,450,120,120);
    image(imgKirby[1],175,150,120,120);
    image(imgKirby[2],1000,300,120,120);
    for(int i=0;i<80;i++){
      if(val==2){
        if(score<=90 && c==5){
         MonsterDieVX[i] = (540-MonsterX[i])/8;
         MonsterDieVY[i] = (450-MonsterY[i])/8;
         if(dist(540,450,MonsterX[i],MonsterY[i])<300){
           if(MonsterX[i]>620 && i < 40){
              MonsterX[i]-=5;
              MonsterY[i]+=MonsterDieVY[i];
            }
            if(MonsterX[i]<460 && i > 40){
              MonsterX[i]+=25;
              MonsterY[i]+=MonsterDieVY[i];
            }
            else{
              MonsterX[i]+=MonsterDieVX[i];
              MonsterY[i]+=MonsterDieVY[i];
            }
         }
         if(dist(540,450,MonsterX[i],MonsterY[i])<80){
           MonsterDie[i]=true;
           score++;
           reborn(i);
          }
        }
      }
      if(val==4){
        if(score2<=60 && c==5){
         MonsterDieVX[i] = (175-MonsterX[i])/8;
         MonsterDieVY[i] = (150-MonsterY[i])/8;
         if(dist(175,150,MonsterX[i],MonsterY[i])<300){
           if(MonsterX[i]>255 && i < 40){
              MonsterX[i]-=5;
              MonsterY[i]+=MonsterDieVY[i];
            }
            if(MonsterX[i]<95 && i > 40){
              MonsterX[i]+=25;
              MonsterY[i]+=MonsterDieVY[i];
            }
            else{
              MonsterX[i]+=MonsterDieVX[i];
              MonsterY[i]+=MonsterDieVY[i];
            }
         }
         if(dist(175,150,MonsterX[i],MonsterY[i])<80){
           MonsterDie[i]=true;
           score2++;
           reborn(i);
           }
        }
      }
      if(val==5){
        if(score3<=30 && c==5){
         MonsterDieVX[i] = (1000-MonsterX[i])/8;
         MonsterDieVY[i] = (300-MonsterY[i])/8;
         if(dist(1000,300,MonsterX[i],MonsterY[i])<300){
           if(MonsterX[i]>1000 && i < 40){
              MonsterX[i]-=5;
              MonsterY[i]+=MonsterDieVY[i];
            }
            if(MonsterX[i]<1000 && i >= 40){
              MonsterX[i]+=25;
              MonsterY[i]+=MonsterDieVY[i];
            }
            else{
              MonsterX[i]+=MonsterDieVX[i];
              MonsterY[i]+=MonsterDieVY[i];
            }
         }
         if(dist(1000,300,MonsterX[i],MonsterY[i])<80){
           MonsterDie[i]=true;
           score3++;
           reborn(i);
         }
        }
      }
    }
  }
  if(score>=90 && score2>=60  && score3>=30 && c==5){
    level(score3);
    image(imgBG[5],width/500,height/300,width,height);
  }
  
}


2018年12月31日 星期一

week16 期末作品製作

期末作品會有四個介面:
0.遊戲設定畫面,設定完能回到原始進入的介面

1.起始遊戲畫面

2.開始遊戲畫面

3.遊戲結束畫面

2018年12月27日 星期四

Week16_黃登煜

加音樂
PImage imgleft,imgup,imgdown,imgright,imgdance;
PImage imgrightqq,imgleftqq,imgupqq,imgdownqq;
PImage []direction = new PImage[4];
float leftX=90,upX=230,downX=370,rightX=510;
float leftY=900,upY=900,downY=900,rightY=900;
float leftVY=6;
float upVY=5;
float downVY=4;
float rightVY=7;

import ddf.minim.*;
Minim minim;
AudioPlayer player1,player2,player3,player4,player5;
int score=0;
void setup(){
  size(600,900);
  background(255);
  imgdance=loadImage("dance.jpg");
  imgleft=loadImage("left.png");
  imgup=loadImage("up.png");
  imgdown=loadImage("down.png");
  imgright=loadImage("right.png");
 
  imgrightqq=loadImage("rightqq.png");
  imgleftqq=loadImage("leftqq.png");
  imgupqq=loadImage("upqq.png");
  imgdownqq=loadImage("downqq.png");
  imageMode(CENTER);
 
  direction[0]=imgleft;
  direction[1]=imgup;
  direction[2]=imgdown;
  direction[3]=imgright;
 
  minim = new Minim(this);
  player1 = minim.loadFile("BLACKPINK.mp3");
}
int choose=0;
void draw(){
  player1.play();
  image(imgdance,width/2,height/2,width,height);
  image(imgleftqq,90,150,100,100);
  image(imgupqq,230,150,100,100);
  image(imgdownqq,370,150,100,100);
  image(imgrightqq,510,150,100,100);
  fill(#C75AF7);textSize(50);text("Score:"+score,30,80);

  if(choose==1){
    fill(#C75AF7);textSize(50);text("Great",400,80);
  }else if(choose==2){
    fill(#C75AF7);textSize(50);text("Good",400,80);
  }else if(choose==3){
    fill(#C75AF7);textSize(50);text("Cool",400,80);
  }else if(choose==4){ 
    fill(#C75AF7);textSize(50);text("Bad",400,80);
  }else if(choose==5){ 
    fill(#C75AF7);textSize(50);text("Miss",400,80);
  }
  if(leftY<0){ 
    choose=5;
    score-=4;
    leftX=90;
    leftY=900;
    leftVY=random(4,7);
  }else if(upY<0){
    choose=5;
    score-=4;
    upX=230;
    upY=900;
    upVY=random(4,7);
  }else if(downY<0){
    choose=5;
    score-=4;
    downX=370;
    downY=900; 
    downVY=random(4,7);
  }else if(rightY<0){
    choose=5;
    score-=4;
    rightX=510;
    rightY=900;
    rightVY=random(4,7);
  }
 
  leftY-=leftVY;
  upY-=upVY;
  downY-=downVY;
  rightY-=rightVY;
  image(imgleft,leftX,leftY,100,100);
  image(imgup,upX,upY,100,100);
  image(imgdown,downX,downY,100,100);
  image(imgright,rightX,rightY,100,100);
}
void killleft(){
  leftX=90;
  leftY=900;
  leftVY=random(4,7);
}
void killup(){
  upX=230;
  upY=900;
  upVY=random(4,7);
}
void killdown(){
  downX=370;
  downY=900; 
  downVY=random(4,7);
}
void killright(){
  rightX=510;
  rightY=900;
  rightVY=random(4,7);
}
void keyPressed(){
  if(key=='1'){
    if(dist(90,150,leftX,leftY)<10){
      score+=5;
      killleft();
      choose=1;
    }
    else if(dist(90,150,leftX,leftY)<30){
      score+=3;
      killleft();
      choose=2;
    }
    else if(dist(90,150,leftX,leftY)<60){
      score-=1;
      killleft();
      choose=3;
    }
     else if(dist(90,150,leftX,leftY)<90){
      score-=2;
      killleft();
      choose=4;
     }else if(dist(90,150,leftX,leftY)<120){
      score-=3;
      killleft();
      choose=5;
     }
  }
  if(key=='2'){
    if(dist(230,150,upX,upY)<10){
      score+=5;
      killup();
      choose=1;
    }
    else if(dist(230,150,upX,upY)<30){
      score+=3;
      killup();
      choose=2;
    }
    else if(dist(230,150,upX,upY)<60){
      score-=1;
      killup();
      choose=3;
    }
     else if(dist(230,150,upX,upY)<90){
      score-=2;
      killup();
      choose=4;
     }else if(dist(230,150,upX,upY)<120){
      score-=3;
      killup();
      choose=5;
     }
  }
  if(key=='3'){
    if(dist(370,150,downX,downY)<10){
      score+=5;
      killdown();
      choose=1;
    }
    else if(dist(370,150,downX,downY)<30){
      score+=3;
      killdown();
      choose=2;
    }
    else if(dist(370,150,downX,downY)<60){
      score-=1;
      killdown();
      choose=3;
    }
     else if(dist(370,150,downX,downY)<90){
      score-=2;
      killdown();
      choose=4;
     }else if(dist(370,150,downX,downY)<120){
      score-=3;
      killdown();
      choose=5;
     }
  }
  if(key=='4'){
    if(dist(510,150,rightX,rightY)<10){
      score+=5;
      killright();
      choose=1;
    }
    else if(dist(510,150,rightX,rightY)<30){
      score+=3;
      killright();
      choose=2;
    }
    else if(dist(510,150,rightX,rightY)<60){
      score-=1;
      killright();
      choose=3;
    }
     else if(dist(510,150,rightX,rightY)<90){
      score-=2;
      killright();
      choose=4;
     }else if(dist(510,150,rightX,rightY)<120){
      score-=3;
      killright();
      choose=5;
     }
  }
}

QAQ筆記 WEEK16

期末作品

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();
    }
    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(){
  bombA[bombN]=userA;  bombB[bombN]=userB;
  bombS[bombN]=1;  bombT[bombN]=25;
  bombN++;
}
void putBomb2(){
  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);// 下一次測量之前稍微延遲
}