2022年11月28日 星期一

尖🦉筆記 - week13

 ◇畫線遊戲:

    將按鈕圖片放置好、加入音樂、設計好關卡,將佳蓉寫好的程式加入。

    (前周主頁面還有"開始遊戲"的按鈕,但切換的時候會造成出錯,最後找不出原因,就決定先拔掉那顆按鈕。)

● 主頁:                                        關卡:


● 計分畫面:                                                            ● 選擇關卡頁面:



● 程式碼:   

 1. 遊戲一些設定:

    2. 頁面設置:

筆記~互動技術 Week13

音樂遊戲-遊戲主體

程式碼(待整理)

7ru week13

  PVector[]coord;

void setup() {
  size(800, 800);
  PFont font = createFont("微軟正黑體", 40);
  textFont(font);
  coord = new PVector[faces.length];
  for (int i=0; i<faces.length; i++) {
    coord[i] = new PVector(5+i*100, 600);
  }

  myShuffle();///洗牌
}
String[] shows={"黑桃A", "紅心A", "方塊A", "梅花A", };///固定A
String[] faces={
  "黑桃2", "黑桃3", "黑桃4", "黑桃5", "黑桃6", "黑桃7", "黑桃8", "黑桃9", "黑桃10", "黑桃J", "黑桃Q", "黑桃K",
  "紅心2", "紅心3", "紅心4", "紅心5", "紅心6", "紅心7", "紅心8", "紅心9", "紅心10", "紅心J", "紅心Q", "紅心K",
  "方塊2", "方塊3", "方塊4", "方塊5", "方塊6", "方塊7", "方塊8", "方塊9", "方塊10", "方塊J", "方塊Q", "方塊K",
  "梅花2", "梅花3", "梅花4", "梅花5", "梅花6", "梅花7", "梅花8", "梅花9", "梅花10", "梅花J", "梅花Q", "梅花K",
};
void myShuffle() {
  for (int k=0; k<10000; k++) {
    int a =int(random(48));
    int b =int(random(48));
    String temp=faces[a];
    faces[a]=faces[b];
    faces[b]=temp;
  }
  face1=faces[0];
  face2=faces[1];
  face3=faces[2];
  face4=faces[3];
  face5=faces[4];
  face6=faces[5];
  show1=shows[0];
  show2=shows[1];
  show3=shows[2];
  show4=shows[3];
}
void keyPressed() {///按Enter可以洗牌
  myShuffle();
}
String face1, face2, face3, face4, face5, face6, show1, show2, show3, show4;
void draw() {
  background(#FFFFF2);
  drawPokerCard(30, 600, face1);
  drawPokerCard(160, 600, face2);
  drawPokerCard(290, 600, face3);
  drawPokerCard(420, 600, face4);
  drawPokerCard(550, 600, face5);
  drawPokerCard(680, 600, face6);
  drawaPokerCard(40, 100, show1);
  drawaPokerCard(240, 100, show2);
  drawaPokerCard(440, 100, show3);
  drawaPokerCard(640, 100, show4);
}
void drawPokerCard(int x, int y, String face) {
  int W=20;
  for (int i=0; i<faces.length; i++) {
    fill(255);
    rect(coord[i].x, coord[i].y, 80+W, 120+W, 20);
    if (faces[i].indexOf("黑桃")==-1 && faces[i].indexOf("梅花")==-1)fill(#FF0000);
    else fill(0);
    textSize(25);
    text(faces[i], coord[i].x+10, coord[i].y+30);
  }
}
void drawaPokerCard(int x, int y, String show) {
  int W=20;
  fill(255);
  rect(x-W/2, y-W/2, 80+W, 120+W, 20);
  ///fill(#BA90FF);
  ///rect(x, y, 150, 250, 20);
  if (show.indexOf("黑桃")==-1 && show.indexOf("梅花")==-1)fill(#FF0000);
  else fill(0);
  textSize(25);
  text(show, x+10, y+30);
}
void mouseDragged() {///滑鼠拖曳
  for (int i=0; i< faces.length; i++) {
    if (coord[i].x<mouseX && mouseX<coord[i].x+80 && coord[i].y<mouseY && mouseY<coord[i].y+80) {
      coord[i].x += mouseX-pmouseX;
      coord[i].y += mouseY-pmouseY;
    }
  }
}

Yiting_Week13



 PVector[]coord;
void setup() {
  size(800, 800);
  PFont font = createFont("微軟正黑體", 40);
  textFont(font);
  coord = new PVector[faces.length];
  for (int i=0; i<faces.length; i++) {
    coord[i] = new PVector(5+i*100, 600);
  }

  myShuffle();///洗牌
}
String[] shows={"黑桃A", "紅心A", "方塊A", "梅花A", };///固定A
String[] faces={
  "黑桃2", "黑桃3", "黑桃4", "黑桃5", "黑桃6", "黑桃7", "黑桃8", "黑桃9", "黑桃10", "黑桃J", "黑桃Q", "黑桃K",
  "紅心2", "紅心3", "紅心4", "紅心5", "紅心6", "紅心7", "紅心8", "紅心9", "紅心10", "紅心J", "紅心Q", "紅心K",
  "方塊2", "方塊3", "方塊4", "方塊5", "方塊6", "方塊7", "方塊8", "方塊9", "方塊10", "方塊J", "方塊Q", "方塊K",
  "梅花2", "梅花3", "梅花4", "梅花5", "梅花6", "梅花7", "梅花8", "梅花9", "梅花10", "梅花J", "梅花Q", "梅花K",
};
void myShuffle() {
  for (int k=0; k<10000; k++) {
    int a =int(random(48));
    int b =int(random(48));
    String temp=faces[a];
    faces[a]=faces[b];
    faces[b]=temp;
  }
  face1=faces[0];
  face2=faces[1];
  face3=faces[2];
  face4=faces[3];
  face5=faces[4];
  face6=faces[5];
  show1=shows[0];
  show2=shows[1];
  show3=shows[2];
  show4=shows[3];
}
void keyPressed() {///按Enter可以洗牌
  myShuffle();
}
String face1, face2, face3, face4, face5, face6, show1, show2, show3, show4;
void draw() {
  background(#FFFFF2);
  drawPokerCard(30, 600, face1);
  drawPokerCard(160, 600, face2);
  drawPokerCard(290, 600, face3);
  drawPokerCard(420, 600, face4);
  drawPokerCard(550, 600, face5);
  drawPokerCard(680, 600, face6);
  drawaPokerCard(40, 100, show1);
  drawaPokerCard(240, 100, show2);
  drawaPokerCard(440, 100, show3);
  drawaPokerCard(640, 100, show4);
}
void drawPokerCard(int x, int y, String face) {
  int W=20;
  for (int i=0; i<faces.length; i++) {
    fill(255);
    rect(coord[i].x, coord[i].y, 80+W, 120+W, 20);
    if (faces[i].indexOf("黑桃")==-1 && faces[i].indexOf("梅花")==-1)fill(#FF0000);
    else fill(0);
    textSize(25);
    text(faces[i], coord[i].x+10, coord[i].y+30);
  }
}
void drawaPokerCard(int x, int y, String show) {
  int W=20;
  fill(255);
  rect(x-W/2, y-W/2, 80+W, 120+W, 20);
  ///fill(#BA90FF);
  ///rect(x, y, 150, 250, 20);
  if (show.indexOf("黑桃")==-1 && show.indexOf("梅花")==-1)fill(#FF0000);
  else fill(0);
  textSize(25);
  text(show, x+10, y+30);
}
void mouseDragged() {///滑鼠拖曳
  for (int i=0; i< faces.length; i++) {
    if (coord[i].x<mouseX && mouseX<coord[i].x+80 && coord[i].y<mouseY && mouseY<coord[i].y+80) {
      coord[i].x += mouseX-pmouseX;
      coord[i].y += mouseY-pmouseY;
    }
  }
}




(OwO)week13_11/28

這周的進度:可旋轉90度&將牌重製



 int N=10;

Domino [] d;

String [] number1={" ","1","2","3","4","5","6"};

String [] number2={" ","1","2","3","4","5","6"};

String [] word={"右鍵可將牌翻轉","a鍵可以讓牌轉90度","s鍵可以將牌重製"};

void setup(){

  size(1000,1000);

  PFont font = createFont("標楷體", 40);

  textFont(font);

  d= new Domino[N];

  for(int i=0;i<N;i++){

    d[i]=new Domino();

  }

  textSize(30);

  textAlign(CENTER,CENTER);

}


void draw(){

  background(#FFFFF2);

  

  rect(0,0,210,30);

  rect(210,0,260,30);

  rect(470,0,260,30);

  fill(0);

  text(word[0],100,10);

  fill(0);

  text(word[1],340,10);

  fill(0);

  text(word[2],600,10);

  

  for(int i=0;i<N;i++){

      if(d[i].a==0)d[i].draw();

      else d[i].draw2();

  }  

}


void mousePressed(){

  if(mouseButton==RIGHT){    

    for(int i=0;i<N;i++){      

      if(d[i].x<mouseX && mouseX<d[i].x+120 && d[i].y<mouseY && mouseY<d[i].y+60)

      {

        int t=d[i].n1;

        d[i].n1=d[i].n2;

        d[i].n2=t;               

      }

    }

  }

}


void keyPressed(){

  if(key=='a' || key=='A'){

     for(int i=0;i<N;i++){

         if(d[i].x<mouseX && mouseX<d[i].x+120 && d[i].y<mouseY && mouseY<d[i].y+60){

          if(d[i].a==0)d[i].a=1;

          else d[i].a=0;          

      }

    }

  }  

  if(key=='s' || key=='S'){

     for(int i=0;i<N;i++){

         if(d[i].x<mouseX && mouseX<d[i].x+120 && d[i].y<mouseY && mouseY<d[i].y+60){

          d[i].n1=(int)random(7);

          d[i].n2=(int)random(7);  

      }

    }

  }  

  if(key=='s' || key=='S'){

     for(int i=0;i<N;i++){

         if(d[i].x<mouseX && mouseX<d[i].x+120 && d[i].y<mouseY && mouseY<d[i].y+60){

          d[i].n1=(int)random(7);

          d[i].n2=(int)random(7);  

      }

    }

  }


}


void mouseDragged(){

  for(int i=0;i<N;i++)

  {

    if(d[i].x<mouseX && mouseX<d[i].x+120 && d[i].y<mouseY && mouseY<d[i].y+60){

      d[i].x+=(mouseX-pmouseX);

      d[i].y+=(mouseY-pmouseY);

    }

  }

}


class Domino{

  int x,y;

  int n1,n2;

  int a,b;

  Domino(){

    x=(int)random(100,800);

    y=(int)random(100,800);

    n1=(int)random(7);

    n2=(int)random(7);

    a=0;

    b=0;

  }

  void draw(){

      fill(50);

      rect(x+60,y,60,60);

      rect(x,y,60,60);

      fill(255);

      text(number1[n1],x+30,y+30);

      text(number2[n2],x+60+30,y+30);

  }

  void draw2(){

      fill(50);

      rect(x,y,60,60);

      rect(x,y+60,60,60);

      fill(255);

      text(number1[n1],x+30,y+30);

      text(number2[n2],x+30,y+60+30);

  }

}



week13 互動技術


除了可以翻轉牌,還增加了將牌重製與將牌轉90度 


int N=10;

Domino [] d;

String [] number1={" ","1","2","3","4","5","6"};

String [] number2={" ","1","2","3","4","5","6"};

String [] word={"右鍵可將牌翻轉","a鍵可以讓牌轉90度","s鍵可以將牌重製"};

void setup(){

  size(1000,1000);

  PFont font = createFont("標楷體", 40);

  textFont(font);

  d= new Domino[N];

  for(int i=0;i<N;i++){

    d[i]=new Domino();

  }

  textSize(30);

  textAlign(CENTER,CENTER);

}


void draw(){

  background(#FFFFF2);

  

  rect(0,0,210,30);

  rect(210,0,260,30);

  rect(470,0,260,30);

  fill(0);

  text(word[0],100,10);

  fill(0);

  text(word[1],340,10);

  fill(0);

  text(word[2],600,10);

  

  for(int i=0;i<N;i++){

      if(d[i].a==0)d[i].draw();

      else d[i].draw2();

  }  

}


void mousePressed(){

  if(mouseButton==RIGHT){    

    for(int i=0;i<N;i++){      

      if(d[i].x<mouseX && mouseX<d[i].x+120 && d[i].y<mouseY && mouseY<d[i].y+60)

      {

        int t=d[i].n1;

        d[i].n1=d[i].n2;

        d[i].n2=t;               

      }

    }

  }

}


void keyPressed(){

  if(key=='a' || key=='A'){

     for(int i=0;i<N;i++){

         if(d[i].x<mouseX && mouseX<d[i].x+120 && d[i].y<mouseY && mouseY<d[i].y+60){

          if(d[i].a==0)d[i].a=1;

          else d[i].a=0;          

      }

    }

  }  

  if(key=='s' || key=='S'){

     for(int i=0;i<N;i++){

         if(d[i].x<mouseX && mouseX<d[i].x+120 && d[i].y<mouseY && mouseY<d[i].y+60){

          d[i].n1=(int)random(7);

          d[i].n2=(int)random(7);  

      }

    }

  }  

  if(key=='s' || key=='S'){

     for(int i=0;i<N;i++){

         if(d[i].x<mouseX && mouseX<d[i].x+120 && d[i].y<mouseY && mouseY<d[i].y+60){

          d[i].n1=(int)random(7);

          d[i].n2=(int)random(7);  

      }

    }

  }


}


void mouseDragged(){

  for(int i=0;i<N;i++)

  {

    if(d[i].x<mouseX && mouseX<d[i].x+120 && d[i].y<mouseY && mouseY<d[i].y+60){

      d[i].x+=(mouseX-pmouseX);

      d[i].y+=(mouseY-pmouseY);

    }

  }

}


class Domino{

  int x,y;

  int n1,n2;

  int a,b;

  Domino(){

    x=(int)random(100,800);

    y=(int)random(100,800);

    n1=(int)random(7);

    n2=(int)random(7);

    a=0;

    b=0;

  }

  void draw(){

      fill(50);

      rect(x+60,y,60,60);

      rect(x,y,60,60);

      fill(255);

      text(number1[n1],x+30,y+30);

      text(number2[n2],x+60+30,y+30);

  }

  void draw2(){

      fill(50);

      rect(x,y,60,60);

      rect(x,y+60,60,60);

      fill(255);

      text(number1[n1],x+30,y+30);

      text(number2[n2],x+30,y+60+30);

  }

}

CY.hsin week12

一、遊戲名稱:Color blind
二、遊戲內容:多個顏色相近的圓,選出和其他不相同的圓
三、遊戲製作規劃:遊戲設機靈感來自於instagram濾鏡_color blind,遊戲過程會出現數個顏色相近的圓,需選出其中一個顏色不同的圓,即為成功。若答對則累積等級,並獲取多20秒遊戲時間的獎勵。

week13Ucc的互動技術概論筆記

 目前的成果展示

1.封面

=>有透過resize的方式讓圖片跟隨頁面變化

2.加入音樂

-在按封面頁的start後跳轉進遊戲頁面


(飛機是主角,上面是怪獸)

3.遊戲方法

-鍵盤的上下左右鍵是操控飛機

-空白鍵射出子彈(紅色)





4.視窗跳轉

-打贏時跳出YOU WIN的字樣


##目前程式碼
```
//射擊遊戲: 子彈
//飛機大戰 泡泡龍消消樂 泡泡射手 彈幕的遊戲 猫狗大戰
//Step01: 主角(keyboard)
//Step02: 子彈(自己移動)
//Step02-2: 子彈碰到敵人, 子彈消失, 敵人消失
//Step03: 很多子彈 很多離人'
import processing.sound.*;
SoundFile sound1;
PImage imgBG;//背景
PImage imgC;//封面
PImage imgMS1;//怪獸一
PImage imgMS2;//怪獸二
PImage boss;//大boss
PImage plane;//飛機
int stage=1;//開頭
void setup() {
  size(500, 500);
  imgC=loadImage("cover.png");
  imgBG=loadImage("background.jpg");
  imgMS1=loadImage("monster1.png");
  imgMS2=loadImage("monster2.png");
  boss=loadImage("boss.png");
  plane = loadImage("airplane.png");
  imgBG.resize(width, height);
  sound1=new SoundFile(this,"SW2.mp3");
}
int userX=250, userY=400, userVX=0, userVY=0;
int []bulletX=new int[1000];//更多子彈,就大一點
int []bulletY=new int[1000];
int []bulletVX=new int[1000];
int []bulletVY=new int[1000];
;
boolean []bulletFlying=new boolean[1000];
int bulletN=0;
int []enemyX={25, 125, 225, 325, 425};
int []enemyY={80, 80, 80, 80, 80};
int []enemyLife={3, 3, 3, 3, 3};
void draw() {
  if(stage==3){
    background(imgBG);
    textSize(40);
    text("YOU WIN!",190,240);
  }
  if (stage==1) {
    background(imgC);
    textSize(30);
    fill(#FFFFF2);
    rect(225, 225, 80, 30);
    fill(0,0,0);
    text("START", 225, 250);
    imgC.resize(width, height);
  }
  if (stage==2) {
    println(bulletN);
    background(imgBG);
    for (int k=0; k<5; k++) {//k敵人
      if (enemyLife[k]>0) {
        fill(0, 255, 0);
        //rect(enemyX[k], enemyY[k], 50,10);血條
        image(imgMS1, enemyX[k], enemyY[k], 80, 80);//怪獸本身
      }
      if(enemyLife[0]<=0 && enemyLife[1]<=0 &&enemyLife[2]<=0&&enemyLife[3]<=0&&enemyLife[4]<=0)
      stage=3;  
    }
    fill(255, 255, 0);
    ellipse(userX, userY, 8, 8);
    image(plane, userX-40, userY-40, 80, 80);//主角飛機
    userX += userVX;//人物動起來
    userY += userVY;//人物動起來
    for (int i=0; i<bulletN; i++) {
      if (bulletFlying[i]) {
        bulletX[i] += bulletVX[i];
        bulletY[i] += bulletVY[i];
        if ( bulletY[i]<0) recycleBullet(i);///當子彈i超過範圍, 回收再利用
        fill(255, 0, 0);
        ellipse( bulletX[i], bulletY[i], 6, 6);
        for (int k=0; k<5; k++) {
          if ( enemyLife[k]>0 && enemyX[k] <= bulletX[i] && bulletX[i] <= enemyX[k] + 75 && enemyY[k] <= bulletY[i] && bulletY[i] <= enemyY[k] + 75) {
            bulletFlying[i]=false;
            recycleBullet(i);///當子彈i超過範圍, 回收再利用
            enemyLife[k]--;
          }
        }
      }
    }
  }
}
void recycleBullet(int i) {//i子彈
  for (int k=i; k<1000-1; k++) {
    bulletX[k] = bulletX[k+1];//右邊移動過來
    bulletY[k] = bulletY[k+1];
    bulletVX[k] = bulletVX[k+1];
    bulletVY[k] = bulletVY[k+1];
    bulletFlying[k] = bulletFlying[k+1];
  }
  bulletN--;
}
void keyPressed() {
  if (keyCode==RIGHT) userVX=2;
  if (keyCode==LEFT) userVX=-2;
  if (keyCode==UP) userVY=-2;
  if (keyCode==DOWN) userVY=2;
  if (key==' ') {
    //println("add one");
    bulletN++;
    bulletFlying[bulletN-1]=true;
    bulletX[bulletN-1]=userX;
    bulletY[bulletN-1]=userY;
    bulletVY[bulletN-1] = -1;//往上射
  }
}
void keyReleased() {//放開就不會動了
  if (keyCode==RIGHT) userVX=0;
  if (keyCode==LEFT) userVX=0;
  if (keyCode==UP) userVY=0;
  if (keyCode==DOWN) userVY=0;
}
void mousePressed() {
  if(mouseX>=225&&mouseX<=305&&mouseY>=210&&mouseY<=240){
    if (stage==1)stage=2;
    sound1.play();
  }
}
```


Zi week13

color[] colArray = {

  color(227, 41, 54),

  color(41, 188, 227),

  color(41, 227, 48),

  color(250, 239, 13),

};

void setup() {

  size(600, 500);

  for (int k=0; k<20; k++) hole[0][k]=1;

}

int x=300, y=500;

float angle1=0, angle2=0;

boolean bulletFlying=false;

float bulletX, bulletY;

float bulletVX, bulletVY;

int [][] hole = new int[5][20];


void draw() {

  background(#FFFFF2);

  fill(0, 0, 0);

  ellipse(x, y, 80, 80);

  strokeWeight(40);

  strokeCap(SQUARE);

  line(x, y, x+80*cos(angle1), y+80*sin(angle1));

  strokeWeight(1);

  for (int i=0; i<5; i++) {

    for (int j=0; j<20; j++) {

      if (hole[i][j]==0) continue;//noFill();

      else fill(255, 255, 0);

      ellipse(15+j*30, 15+i*30,30, 30);

    }

  }

  if (bulletFlying) {

    bulletX+= bulletVX;

    bulletY+= bulletVY;

    fill(255, 255, 0);

    ellipse(bulletX, bulletY, 30, 30);

    if (bulletX > 585) bulletVX=-bulletVX;

    if (bulletX < 15) bulletVX=-bulletVX;

    if (bulletY < 15 || touch_yellow_ball() ) {

      //bulletVY=0;bulletVX=0;

      put_ball_in_hole();

      bulletFlying=false;

    }

  }

}


boolean touch_yellow_ball() {

  for (int i=0; i<5; i++) {

    for (int j=0; j<20; j++) {

      if ( hole[i][j]==1 && dist(bulletX, bulletY, 15+j*30, 15+i*30)<23) return true;

    }

  }

  return false;

}


void put_ball_in_hole() {

  float nearest = 99999;

  int nowI=0, nowJ=0;

  for (int i=0; i<5; i++) {

    for (int j=0; j<20; j++) {

      float now = dist( 15+j*30, 15+i*30, bulletX, bulletY);

      if (now<nearest && hole[i][j]==0) {

        nearest = now;

        nowI=i;

        nowJ=j;

      }

    }

  }

  hole[nowI][nowJ]=1;

}


void keyPressed() {

  if (keyCode==UP) angle1-=0.05;

  if (keyCode==DOWN) angle1+=0.05;

  if (key==' ') {

    bulletFlying=true;

    bulletX=x;

    bulletY=y;

    bulletVX=cos(angle1)*5;

    bulletVY=sin(angle1)*5;

  }

}

鯉魚week13

1.填寫Processing問卷
2.繼續期中作業
    -時鐘問題
    -貼圖











永夜初晗凝碧天 week13

```java
float [] objectx= new float[100];
float [] objecty= new float[100];
int [] size1= new int[100];

void setup()
{
  size(1600, 900);
  PFont font=createFont("標楷體", 15);
  textFont(font);
  textAlign(CENTER, CENTER);
  for (int i=0; i<100; i++)
  {
    objectx[i]=random(1500)+50;
    objecty[i]=random(800)+50;
    size1[i]=int(random(100)+30);
  }
}
void draw()
{
  background(#666554);
  for (int i=0; i<100; i++)
  {
    fill(255, 0, 0);
    ellipse(objectx[i], objecty[i], size1[i]/2, size1[i]/2);
    fill(0);
    text(size1[i], objectx[i], objecty[i]);

    if (dist(bx, by, objectx[i], objecty[i]) < (bw+10)/2 && a>size1[i])
    {
      bw+=1;
      bh+=1;
      objectx[i]=-100;
      objecty[i]=-100;
      a+=size1[i]/10;
    }

    if (dist(px, py, objectx[i], objecty[i]) < (bw+10)/2 && b>size1[i])
    {
      pw+=1;
      ph+=1;
      objectx[i]=-100;
      objecty[i]=-100;
      b+=size1[i]/10;
    }
    if (dist(bx, by, px, py) < (bw+10)/2 && a>b)
    {
      bx=-200;
      by=-200;
      px=-200;
      py=-200;
      background(#666554);
      textSize(80);

      fill(0);
      text("blackhole win", 800, 450);

      ellipse(800, 700, 100, 100);
      fill(255);
      textSize(30);
      text(a, 800, 700);
    } else if (dist(px, py, bx, by) < (bw+10)/2 && b>a)
    {
      bx=-200;
      by=-200;
      px=-200;
      py=-200;
      background(#666554);
      textSize(80);
      
      fill(255);
      text("whitehole win", 800, 450);

      ellipse(800, 700, 100, 100);
      fill(0);
      textSize(30);
      text(b, 800, 700);
    } else
    {
      textSize(15);
    }
  }
  fill(0);
  ellipse(bx, by, bw, bh);
  
  fill(255);
  text(a, bx, by);
  bx+=vx;
  by+=vy;
  fill(255);
  ellipse(px, py, pw, ph);
  fill(0);
  text(b, px, py);
  px+=wx;
  py+=wy;
}
int a=50, b=50;
float bx=30, by=30;
int bw=50, bh=50;
float px=1570, py=30;
int pw=50, ph=50;
float vx=0, vy=0;
float wx=0, wy=0;
void keyPressed()
{
  if (a<150)
  {
    if (keyCode==LEFT) vx=-2;
    if (keyCode==RIGHT) vx=2;
    if (keyCode==UP) vy=-2;
    if (keyCode==DOWN) vy=2;
  }
  if (a>=150)
  {
    if (keyCode==LEFT) vx=-1;
    if (keyCode==RIGHT) vx=1;
    if (keyCode==UP) vy=-1;
    if (keyCode==DOWN) vy=1;
  }
  if (bx==-100 &&by==-100)
  {
    if (keyCode==LEFT) vx=0;
    if (keyCode==RIGHT) vx=0;
    if (keyCode==UP) vy=0;
    if (keyCode==DOWN) vy=0;
  }
  if (b<150)
  {
    if (keyCode=='A') wx=-2;
    if (keyCode=='D') wx=2;
    if (keyCode=='W') wy=-2;
    if (keyCode=='S') wy=2;
  }
  if (b>=150)
  {
    if (keyCode=='A') wx=-1;
    if (keyCode=='D') wx=1;
    if (keyCode=='W') wy=-1;
    if (keyCode=='S') wy=1;
  }
  if (px==-200 && py==-200)
  {
    if (keyCode=='A') wx=0;
    if (keyCode=='D') wx=0;
    if (keyCode=='W') wy=0;
    if (keyCode=='S') wy=0;
  }
}
void keyReleased()
{
  if (keyCode==LEFT) vx=0;
  if (keyCode==RIGHT) vx=0;
  if (keyCode==UP) vy=0;
  if (keyCode==DOWN) vy=0;

  if (keyCode=='A') wx=0;
  if (keyCode=='D') wx=0;
  if (keyCode=='W') wy=0;
  if (keyCode=='S') wy=0;
}
```




RH week13

 week13 期中作業

今日進度,完善圖片之間自動黏合及設定好顯示圖片的參數
為了使size更容易設定,更換了1、2兩張圖



```c
PImage imgBig;    //印出圖片
PImage [][]imgSmall;    //代表會有幾乘幾的拼圖框架出現
PVector [][]coord;    //拼圖的座標,用來移動拼圖
void setup(){
  size(1200,600);
  readFile("1.jpg");
}
void readFile(String filename){
  imgBig = loadImage(filename);
  imgSmall = new PImage[6][8];    //因為圖片太大,所以陣列內數字增加
  coord = new PVector[6][8];
  for(int i=0;i<6;i++){
    for(int j=0;j<8;j++){
      imgSmall[i][j] =imgBig.get(200*j,200*i,200,200);    //前者兩個數字圖片視角遠近,數字越大視角越遠,前後數字要一樣
      coord[i][j]=new PVector(85*j,85*i);    //這兩個數字代表拼圖間的間隔,數字越大間距越大,數字越小間距越小
    }
  }
  for(int k=0;k<10;k++){    //此迴圈能隨機改變拼圖位置,而k所寫的數字代表拼圖交換幾次
    int i1=int(random(6)),i2=int(random(6));
    int j1=int(random(8)),j2=int(random(8));
    PVector temp = coord[i1][j1];//new PVector(coord[i1][j1].x,coord[i1][j1].y);
    coord[i1][j1]=coord[i2][j2];
    coord[i2][j2]=temp;
  }  
}
void draw(){
  background(#F1FFB2);    //背景顏色改黑,否則要是背景為白的情況下,移動會出現殘影
  image(imgBig,700,90,480,330);  //前兩個數字是座標,後面則是圖片大小
  fill(#25E539);
  rect(700,430,450,120);  //告示牌
  PFont font = createFont("標楷體",40);  //文字字體,大小
  textFont(font);
  fill(#2C1C76);  
  text("拼圖遊戲",850,60);
  PFont font1 = createFont("宋體",30);  //文字字體,大小
  textFont(font1);
  fill(#2C1C76);  
  text("上一張圖請按1",800,520);
  text("下一張圖請按2",800,480);
  for(int i=0;i<6;i++){
    for(int j=0;j<8;j++){
      image(imgSmall[i][j],coord[i][j].x,coord[i][j].y,80,80);    //此數字代表拼圖框框的大小,寫80的緣故是為了容易分辨    
      noFill();    //保證每個位置都有圖片
      //rect(200*j,200*i,200,200);
    }
  }
}
int selectedI=-1,selectedJ=-1;
void mousePressed(){    //點擊
  int selectI=-1,selectJ=-1;
  for(int i=0;i<6;i++){
    for(int j=0;j<8;j++){
      if(coord[i][j].x<mouseX && mouseX<coord[i][j].x+80 && coord[i][j].y<mouseY && mouseY<coord[i][j].y+80){    //不太理解,只知道x、x+80是指拼圖在該圖片的位置
      selectI =i; selectJ=j;
      }
    }
  }
  if(selectI!=-1){
    selectedI=selectI;
    selectedJ=selectJ;
  }
}
void mouseDragged(){    //拖曳
  if(selectedI!=-1){
    coord[selectedI][selectedJ].add(new PVector(mouseX-pmouseX,mouseY-pmouseY));
  }
}
void mouseReleased(){
  PVector now = coord[selectedI][selectedJ];
  int II=0, JJ=0;
  float min=9999999;
  for(int i=0;i<=6;i++){
    for(int j=0;j<=8;j++){
      float len = dist(now.x, now.y, 85.0*j, 85.0*i);  //數字代表拼圖間的吸附距離
      if(len<min){
        min = len;
        II = i;
        JJ = j;
      }
    }
  }
  now.x = 85.0*JJ;
  now.y = 85.0*II;
  selectedI=-1;
  selectedJ=-1;
}
void keyPressed(){
  if(key=='1') readFile("1.jpg");
  if(key=='2') readFile("2.jpg");
  if(key=='3') readFile("3.jpg");
}
```







*嗚嗚* Week13

 # Week13

上課內容:

-填寫Processing使用問卷。

-排版的技巧。


-爆爆王version4:

    -上週時鐘問題解決:

        1.時間的顯示調整。例:00:00(分:秒)。

            倒數計時2:00

      int m = (120-(millis()/1000)-(startTime/1000))/60%60;

      int s = (120-(millis()/1000)-(startTime/1000))%60;

      String mm = nf(m, 2);

      String ss = nf(s, 2);

      String line1 = "剩下"+":"+mm+":"+ss;

     if(millis()-startTime>=120000){

       stage=3;

       counting();

     }else if(millis()-startTime<=120000){

       text(line1,210,30);

     }

         2.時鐘的顯示會被地盤顏色蓋住。

            把時鐘text()往void draw()後面擺。

            #先寫的先畫!

    -另外一個組員計畫:貼圖

發現的問題:

    -排版問題

雪⛄互動技術概論筆記-W13

   2022/11/28 Week13

# 畫音樂遊戲需要的圖

  • 背景: ....全黑(不用畫)
  • 開始畫面的圖示: 
            - 初稿:

            - 最後:

  • 記分板: 
            - 初稿:
            - 最後(加上均宜的設計):

  • 按鍵:
            - 遊戲開始按鍵:

            - 遊戲結束的選擇按鍵: 
  • 音樂的圖片、mp3、bpm(均宜的程式是根據每首的bpm去下落音鍵,可以查鋼琴譜確認bpm)
            - 想要的歌(努力找各種歌的j-pop粉): 

                  💚歌曲: 達拉崩八

                    https://youtu.be/MIR5zIpWBH0

                    歌手: cover by  ilem


                💚歌曲: Beat Eater

                    https://youtu.be/DaWbq6KeJq4

                    歌手:  Vivid bad Square


                💚歌曲: Party Animal

                    https://youtu.be/uqOxS829bpg

                    歌手: Mayday


                💚歌曲: Orange Kiss 

                    https://youtu.be/KBqCQpBGyV4

                    歌手: Snow Man


                💚歌曲: 春を告げる

                    https://youtu.be/DC6JppqHkaM

                    歌手: yama


                💚歌曲: Good Luck

                    https://youtu.be/bq2vctuvBGY

                    歌手: SixTONES


                💚歌曲: Cheap Thrills

                    https://youtu.be/nEIHHydwec8

                    歌手: sia


            - 因為歌太長會打到心淚...,找差不多2分鐘的歌

                  💜歌曲: 達拉崩八

                     歌長:  3: ...(因為後面戰鬥音樂遊戲需要這首,一定要做)


                💜歌曲: Good Luck

                     歌長:  2:28


                  💜歌曲: D(evil) 

                     https://youtu.be/UyAcwI-vP64

                     歌手: 春野 feat. yama

                     歌長:  2:37


                💜歌曲: Orange Kiss

                     歌長:  2:37


                  💜歌曲:  Give It Up?

                     https://youtu.be/K-AXS8PlIVE

                     歌手: 96猫

                     歌長:  2:37


                  💜歌曲:  Heartbeat (Nightcore ver.)

                      https://youtu.be/GlwIPp677Ds

                     歌手: Marcus & Martinus

                     歌長:  2:46


                  💜歌曲:  ブラッディ・グルービー

                        https://youtu.be/RGELbl63AQI

                     歌手: ChroNoiR

                     歌長:  2:30


                  💜歌曲:  三原色

                      https://youtu.be/ZNFKZI7L9xE

                     歌手: YOASOBI

                     歌長:  2:30


                  💜歌曲:  99 ILLUSION!

                     https://youtu.be/-b-0tlcDe9g

                     歌手: starlight ninety-nine group

                     歌長:  1:50


                  💜歌曲:  Fashion

                     https://youtu.be/Bb3CgOoL2HI

                     歌手: SixTONES

                     歌長:  2:14


                  💜歌曲:  Negative Fighter

                     https://youtu.be/y8RxbC6473k

                     歌手: Hey! Say! JUMP

                     歌長:  2:17


            - 設計不完...最終的歌 (BPM):

                  💛歌曲: 達拉崩八

                     BPM: 132

                💛歌曲: Fashion

                     BPM: 120

                💛歌曲: Orange Kiss

                     BPM: 132

                  💛歌曲:  Give It Up?

                     BPM: 90

                  💛歌曲:  99 ILLUSION!

                     BPM: 83