2022年1月16日 星期日

岩壁悲歌 Week13

 2022/1/3 我的期末作品

------------------------------------------------------------






玩法:選取左邊任相鄰且相同的圖片,選對了可以消除,選取不相同

或不相鄰的圖片便不行

程式碼運用方向:基本的讀圖、讀音檔、讀影檔都包含在內,還有文

字以及時間的呈現。首先先讀入所需的圖片檔(一共有6種),然後利

用random隨機在100張圖片中呈現,接著使用boolean neighbor來判斷

是否為相鄰。最後利用mousePressed()、mouseDragged()、mouseRelease()

滑鼠按下、拖曳、放開來完成施放動作。

PFont myFont;


import processing.video.*;

Movie movie;


import ddf.minim.*;

Minim minim;

AudioPlayer player,player2,player3;


int [][]card = new int[10][10];

PImage []img=new PImage[6];

PImage pic,like;

void setup(){

  size(800,500);

  pic = loadImage("pic.png");

  like = loadImage("like.png");

  

  movie = new Movie(this, "run.mp4");

  movie.loop();

  

  myFont = createFont("新細明體",100);//中文

  textFont(myFont);//中文

  

  minim = new Minim(this);

  player = minim.loadFile("run.mp3");

  player2 = minim.loadFile("bingo.mp3");

  player3 = minim.loadFile("wrong.mp3");

  //player.play();

  

  for(int i=0;i<6;i++) img[i]=loadImage(""+i+".png");

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

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

      card[i][j]=int(random(4));

    }

  }

}

int firstI=-1,firstJ=-1,secondI=-1,secondJ=-1;

void draw(){

  

  background(255);

  image(pic, 0, 0);

  textSize(20);  fill(0);

    text("選取左側任意兩個相連的圖片" ,520,50);

    text("若圖片相同則可以消除" ,520,100);

    text("您一共浪費了"+millis()/1000+"秒鐘",520,150);

    text("恭喜找到"+ans+"組" ,520,200);    

  

  image(like, 530, 400);

  image(movie, 520,250, width/3, height/3);//衝衝

  

  

  strokeWeight(1);

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

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

      if(card[i][j]==-1)  continue;

      image(img[card[i][j]], j*50,i*50);

    }

  }

  if(firstI!=-1){

    noFill(); strokeWeight(5);

    rect(firstJ*50,firstI*50,50,50);

  }

  if(secondI!=-1){

    noFill(); strokeWeight(5);

    rect(secondJ*50,secondI*50,50,50);

  }

}

void movieEvent(Movie m){

  m.read();

}

void mousePressed(){

  if(mouseX<500&&mouseY<500){

    int j = mouseX/50, i=mouseY/50;

    firstI=i; firstJ=j;

    secondI=-1;

  }

}

void mouseDragged(){

  if(mouseX<500&&mouseY<500){

    int j = mouseX/50, i=mouseY/50;

    secondI=i; secondJ=j;

  }

}

int ans=0;

void mouseReleased(){

  if(mouseX<500&&mouseY<500){

    if(firstI==secondI && firstJ==secondJ)  return;

    if(secondI==-1) return;

    if(card[firstI][firstJ] == card[secondI][secondJ]){

      if(neighbor(firstI,firstJ,secondI,secondJ)==true){

        card[firstI][firstJ]=-1;

        card[secondI][secondJ]=-1;

        ans++;

  

        player2.rewind();

        player2.play();

        println(ans);

        }else{

        player3.rewind();

        player3.play();

        }

      }else{

        player3.rewind();

        player3.play();

      }

    }

}

boolean neighbor(int firstI,int firstJ,int secondI,int secondJ){

  if(firstI==secondI){

    if(firstJ+1==secondJ)  return true;

    if(firstJ-1==secondJ)  return true;

  }

  if(firstJ==secondJ){

    if(firstI+1==secondI)  return true;

    if(firstI-1==secondI)  return true;

  }

  return false;

}

沒有留言:

張貼留言