2022年10月17日 星期一

week07 互動技術 08160873

 Step1:喚起上上禮拜的記憶,將暗棋程式碼從week05_8貼回Processing,如下圖(程式碼如下):

int [][]show={

  {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 [][]board={

  { 1, 2, 2, 3, 3, 4, 4, 5},

  { 5, 6, 6, 7, 7, 7, 7, 7},

  {-1,-2,-2,-3,-3,-4,-4,-5},

  {-5,-6,-6,-7,-7,-7,-7,-7}

}; //暗棋的格子,比較少 4x8=32個棋子

void setup(){

  size(500,400);

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

  textFont(font);

  textAlign(CENTER, CENTER);

}

void draw(){

  background(#F0B82C);

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

    line( x, 50, x, 250);

  }

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

    line( 50, y, 450, y);

  }  

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

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

      if(show[i][j]==0){

        fill(255);

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

      }else{

        int id = board[i][j];

        drawChess(50+25+j*50, 50+25+i*50, id);

      }

    }

  }

}

void mousePressed(){

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

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

      if(dist(mouseX,mouseY,50+25+j*50, 50+25+i*50)<20){

        if(show[i][j]==0 ) show[i][j] = 1;//

      }

    }

  }

}

String [] name = {"將", "士", "象", "車", "馬", "包", "卒"};

String [] name2 = {"帥", "仕", "相", "俥", "傌", "炮", "兵"};

void drawChess(int x, int y, int id){

    fill(255);

    ellipse( x, y, 40, 40);

    if(id>0){//黑

      fill(0);

      text( name[id-1], x, y-3);///將name2改name

    }else{//紅

      fill(255,0,0);

      text( name2[-id-1], x, y-3);

    }

}


Step2:將暗棋亂數洗牌(設定k<1000)洗很多次的意思~>_<(新增下列程式碼):

for(int k=0; k<1000; k++){///很多次:所以k<1000
    int i1=int(random(4)),j1=int(random(8));
    int i2=int(random(4)),j2=int(random(8));
    int temp= board[i1][j1];
    board[i1][j1]=board[i2][j2];
    board[i2][j2]=temp;
}///上述迴圈是洗牌的動作

void mousePressed(){
  for(int i=0; i<4; i++){///10錯的,將i<10改成i<4
    for(int j=0; j<8; j++){///9錯的將i<9改成i<8
///[以上為修改讓程式不會當機:因為不是大盤象棋!!
Step03:將想移動的棋子設為綠色以下為新增之程式碼:
if(moving){
     drawChess(50+25+moveJ*50, 50+25+moveI*50, 9);//9很怪
int moveI = -1, moveJ = -1;
boolean moving = false;//不是移動中
 else{
          moveI = i;//我們想移動的棋子 i座標
          moveJ = j;//我們想移動的棋子 j座標 
          moving = true;//現在移動中  
        }//現在要加棋子的移動
if(id==9){
      fill(0,255,0);//綠色
      ellipse( x, y, 40, 40);
    }else if


Step04:將原本綠色的棋子修改成半透明並讓他能跟著滑鼠走:
int [][]show={
  {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 [][]board={
  { 1, 2, 2, 3, 3, 4, 4, 5},
  { 5, 6, 6, 7, 7, 7, 7, 7},
  {-1,-2,-2,-3,-3,-4,-4,-5},
  {-5,-6,-6,-7,-7,-7,-7,-7}
}; //暗棋的格子,比較少 4x8=32個棋子
void setup(){
  size(500,400);
  PFont font = createFont("標楷體", 30);
  textFont(font);
  textAlign(CENTER, CENTER);
  for(int k=0; k<1000; k++){///很多次:所以k<1000
    int i1=int(random(4)),j1=int(random(8));
    int i2=int(random(4)),j2=int(random(8));
    int temp= board[i1][j1];
    board[i1][j1]=board[i2][j2];
    board[i2][j2]=temp;
  }
}
void draw(){
  background(#F0B82C);
  for (int x=50; x<=450; x+=50) {
    line( x, 50, x, 250);
  }
  for (int y=50; y<=250; y+=50) {
    line( 50, y, 450, y);
  }  
  for(int i=0; i<4; i++){
    for(int j=0; j<8; j++){
      if(show[i][j]==0){
        fill(255);
        ellipse(50+25+j*50, 50+25+i*50,40,40);
      }else{
        int id = board[i][j];
        drawChess(50+25+j*50, 50+25+i*50, id);
      }
    }
  }
  if(moving){
    fill(0,255,0,128);//綠色,半透明
    ellipse(50+25+moveJ*50, 50+25+moveI*50, 40,40);//原來的位置
    
    drawChess(mouseX,mouseY,moveID);//正在飛行.移動的棋子
  }
}
int moveI = -1, moveJ = -1, moveID = -1;
boolean moving = false;//不是移動中
void mousePressed(){
  for(int i=0; i<4; i++){///10錯的,將i<10改成i<4
    for(int j=0; j<8; j++){///9錯的將i<9改成i<8
      if(dist(mouseX,mouseY,50+25+j*50, 50+25+i*50)<20){
        if(show[i][j]==0 ) show[i][j] = 1;//
        else{
          moveI = i;//我們想移動的棋子 i座標
          moveJ = j;//我們想移動的棋子 j座標 
          moveID = board[i][j];
          moving = true;//現在移動中  
        }//現在要加棋子的移動
      }
    }
  }
}
String [] name = {"將", "士", "象", "車", "馬", "包", "卒"};
String [] name2 = {"帥", "仕", "相", "俥", "傌", "炮", "兵"};
void drawChess(int x, int y, int id){
    fill(255);
    ellipse( x, y, 40, 40);
    //if(id==9){//等待移動的棋子
      //fill(0,255,0);//綠色
     // ellipse( x, y, 40, 40);
    //}else 
    if(id>0){//黑
      fill(0);
      text( name[id-1], x, y-3);///將name2改name
    }else{//紅
      fill(255,0,0);
      text( name2[-id-1], x, y-3);
    }
}
Step05:讓程式碼變成可以吃掉棋子!!:

int [][]show={
  {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 [][]board={
  { 1, 2, 2, 3, 3, 4, 4, 5},
  { 5, 6, 6, 7, 7, 7, 7, 7},
  {-1,-2,-2,-3,-3,-4,-4,-5},
  {-5,-6,-6,-7,-7,-7,-7,-7}
}; //暗棋的格子,比較少 4x8=32個棋子
void setup(){
  size(500,400);
  PFont font = createFont("標楷體", 30);
  textFont(font);
  textAlign(CENTER, CENTER);
  for(int k=0; k<1000; k++){///很多次:所以k<1000
    int i1=int(random(4)),j1=int(random(8));
    int i2=int(random(4)),j2=int(random(8));
    int temp= board[i1][j1];
    board[i1][j1]=board[i2][j2];
    board[i2][j2]=temp;
  }
}
void draw(){
  background(#F0B82C);
  for (int x=50; x<=450; x+=50) {
    line( x, 50, x, 250);
  }
  for (int y=50; y<=250; y+=50) {
    line( 50, y, 450, y);
  }  
  for(int i=0; i<4; i++){
    for(int j=0; j<8; j++){
      if(show[i][j]==0){
        fill(255);
        ellipse(50+25+j*50, 50+25+i*50,40,40);
      }else{
        int id = board[i][j];
        drawChess(50+25+j*50, 50+25+i*50, id);
      }
    }
  }
}
void mousePressed(){
  for(int i=0; i<4; i++){///10錯的,將i<10改成i<4
    for(int j=0; j<8; j++){///9錯的將i<9改成i<8
      if(dist(mouseX,mouseY,50+25+j*50, 50+25+i*50)<20){
        if(show[i][j]==0 ) show[i][j] = 1;//
      }
    }
  }
}
String [] name = {"將", "士", "象", "車", "馬", "包", "卒"};
String [] name2 = {"帥", "仕", "相", "俥", "傌", "炮", "兵"};
void drawChess(int x, int y, int id){
    fill(255);
    ellipse( x, y, 40, 40);
    if(id>0){//黑
      fill(0);
      text( name[id-1], x, y-3);///將name2改name
    }else{//紅
      fill(255,0,0);
      text( name2[-id-1], x, y-3);
    }
}
Step06:製作忍者音樂遊戲:
//存檔,MP3拉進來,Ctrl-K看檔案
import processing.sound.*;//音樂功能
//使用外掛,要先把外掛裝起來!!!
SoundFile file1,file2,file3,file4;
void setup(){
  file1 = new SoundFile(this,"Intro Song_Final.mp3");
  file2 = new SoundFile(this,"In Game Music.mp3");
  file3 = new SoundFile(this,"Intro Song_Final.mp3");
  file4 = new SoundFile(this,"Fruit Missed.mp3");
  
  file1.play();
}
void draw(){

}
void mousePressed(){
  file2.play();
}
void keyPressed(){
  file3.play();
}
















沒有留言:

張貼留言