2022年9月26日 星期一

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

 2022/09/26 Week04

# 實作彈彈珠遊戲

1. 做一顆球往右上移動(影像會重疊...)

void setup(){

  size(500,500);

}

int x=250, y=250; //變數(位置)

void draw(){

  ellipse(x, y, 10, 10);       //橢圓形

  x = x + 1; //往右跑

  y = y - 1; //往上跑

}


2. 球撞到四周的牆會反彈

void setup(){

  size(500,500);

}

float x=250, y=250;//變數(位置),浮點數數值會比較細緻

float vx=1.0, vy=-0.5;

void draw(){

  ellipse(x, y, 10, 10);//橢圓形

  x = x + vx; //往右跑

  y = y + vy; //往上跑

  if( x > 500 ) vx = -vx;

  if( y < 0 ) vy = -vy;

  if( x < 0 ) vx = -vx;

  if( y > 500 ) vy = -vy;

}


3. 多一個反彈的板子

void setup(){

  size(500,500);

}

float x=250, y=250;//變數(位置),浮點數數值會比較細緻

float vx=2.0, vy=-1.5;

void draw(){

  background(#FFFFF2); //背景,去除殘影

  int boardX = mouseX;

  rect(boardX, 470, 100, 20, 3); //控制的板子

  ellipse(x, y, 10, 10);//橢圓形

  x = x + vx; //往右跑

  y = y + vy; //往上跑

  if( x > 500 ) vx = -vx;

  if( y < 0 ) vy = -vy;

  if( x < 0 ) vx = -vx;

  if( y > 470 && x>boardX  &&  x<boardX+100) vy = -vy;

                       //x>boardX  &&  x<boardX  -->跟板子的長度有關

}


4. 精化程式碼 and 按滑鼠左右鍵板子可以變長變短

void setup(){

  size(500,500);

}

float x=250, y=250;//變數(位置),浮點數數值會比較細緻

float vx=2.0, vy=-1.5;

float boardX, boardY=470, boardW=100, boardH=20;

void draw(){

  background(#FFFFF2); //背景,去除殘影

  boardX = mouseX-boardW/2; //讓滑鼠在板子中間移動

  rect(boardX, boardY, boardW, boardH, 3); //控制的板子

  ellipse(x, y, 10, 10);//橢圓形

  x = x + vx; //往右跑

  y = y + vy; //往上跑

  if( x > 500 ) vx = -vx;

  if( y < 0 ) vy = -vy;

  if( x < 0 ) vx = -vx;

  if(( y > boardY && y < boardY + boardH ) && 

     ( x > boardX && x < boardX + boardW )){ //x->跟板子的長度有關

       vy = -vy; 

       vx += (mouseX-pmouseX)/2; ///pmouse=之前滑鼠位置、mouse=現在滑鼠位置,==>現在滑鼠位置-mouse的移動速度

     }

  if(mousePressed && mouseButton==LEFT) boardW *= 1.01;

  if(mousePressed && mouseButton==RIGHT) boardW *= 0.99;

}


# 實作圍棋

5. 在一個範圍內畫一堆圓

void setup(){

  size(500,500);

}


void draw(){

  //用迴圈畫很多棋子

  for(int x=50; x<=450; x+=50){

    for(int y=50; y<=450; y+=50){

      ellipse(x, y, 50, 50);

    }

  }

}


6. 用陣列畫圓+顏色

void setup(){

  size(500,500);

}

int [][]go = {

  {0,0,0,0,0,0,0,0,0},

  {0,0,0,0,1,0,0,0,0},

  {0,0,0,0,0,0,0,0,1},

  {0,1,0,0,0,0,0,0,0},

  {0,0,0,0,0,0,0,0,0},

  {0,0,0,0,1,0,0,0,0},

  {0,0,0,0,0,0,0,0,0},

  {0,1,0,0,0,0,0,0,0},

  {0,0,0,0,0,0,0,0,0},

};

void draw(){

  //用迴圈畫很多棋子

  for(int i=0; i<9; i++){ //左手i,對應y座標

    for(int j=0; j<9; j++){ //右手j,對應x座標

      if(go[i][j]==1) fill(0);

      else fill(255);

      //               x            y

      ellipse(50+j*50, 50+i*50, 50, 50);

    }

  }

}


7. 畫出棋盤上的線

void setup(){

  size(500,500);

}

int [][]go = {

  {0,0,0,0,0,0,0,0,0},

  {0,0,0,0,1,0,2,0,0},

  {0,0,0,0,0,0,0,0,1},

  {0,1,0,0,0,0,0,0,0},

  {0,0,0,0,0,0,0,0,0},

  {0,0,0,0,1,0,0,0,0},

  {0,0,0,0,0,0,0,0,0},

  {0,1,0,0,0,0,0,0,0},

  {0,0,0,0,0,0,0,0,0},

};

void draw(){

  background(246, 194, 108); ///棋盤顏色

  for(int i=1; i<=9; i++){ //迴圈

    line(50, 50*i, 450, 50*i);  //橫線

    line(50*i, 50, 50*i, 450);  //縱線

  }

  

  for(int i=0; i<9; i++){ //左手i,對應y座標

    for(int j=0; j<9; j++){ //右手j,對應x座標

      if(go[i][j]==1){

        fill(0); //黑棋

        ellipse(50+j*50, 50+i*50, 40, 40);

      }

      else if(go[i][j]==2){

        fill(255); //白棋

        ellipse(50+j*50, 50+i*50, 40, 40);

      }

    }

  }

}


8. 可以互動的玩五圍棋了~

void setup(){

  size(500,500);

}

int [][]go = {

  {0,0,0,0,0,0,0,0,0},      //陣列清0

  {0,0,0,0,0,0,0,0,0},

  {0,0,0,0,0,0,0,0,0},

  {0,0,0,0,0,0,0,0,0},

  {0,0,0,0,0,0,0,0,0},

  {0,0,0,0,0,0,0,0,0},

  {0,0,0,0,0,0,0,0,0},

  {0,0,0,0,0,0,0,0,0},

  {0,0,0,0,0,0,0,0,0},

};

int N=0; //目前有幾個棋子

void mousePressed(){

  int j = (mouseX-25)/50; //右手j,對應x座標

  int i = (mouseY-25)/50; //左手i,對應y座標

  go[i][j] = (N%2==0) ? 1 : 2 ; //if(N%2==0) 用1,否則2

  N++;

}


void draw(){

  background(246, 194, 108); ///棋盤顏色

  for(int i=1; i<=9; i++){ //迴圈

    line(50, 50*i, 450, 50*i); //橫線

    line(50*i, 50, 50*i, 450); //縱線

  }

  

  for(int i=0; i<9; i++){ //左手i,對應y座標

    for(int j=0; j<9; j++){ //右手j,對應x座標

      if(go[i][j]==1){

        fill(0); //黑棋

        ellipse(50+j*50, 50+i*50, 40, 40);

      }

      else if(go[i][j]==2){

        fill(255); //白棋

        ellipse(50+j*50, 50+i*50, 40, 40);

      }

    }

  }

}




沒有留言:

張貼留言