2022年11月21日 星期一

@W@ Week11

 

Week11

1.) 嘗試用程式畫出地圖

1.1 嘗試畫出地圖(框出來的線)

PImage imgFloor;
void setup(){
 size(1050,784); 要跟圖片一樣大
 imgFloor = loadImage("01.png"); 把圖片抓進來
 myFindAllC();
}
void myFindAllC(){
 imgFloor.loadPixels(); 讀取pixels
 for(int i = 0 ; i<imgFloor.width*imgFloor.height; i++){ 掃描每個pixel
  if(red(imgFloor.pixels[i])>254 && green(imgFloor.pixels[i])>227 && blue(imgFloor.pixels[i])>180)
 {imgFloor.pixels[i]=color(255,228,181);} 如果碰到這個顏色,就畫出這個顏色
  else imgFloor.pixels[i]=color(0); 其他就顯示黑色
  }
  imgFloor.updatePixels(); 
}
void draw(){
 background(imgFloor); 
 }

int calci(int x, int y) { 計算pixel位置

  return y*imgFloor.width + x;

}



2.) 畫出紅點

2-1.
void Red(){
  stroke(255,0,0);外框
  fill(255,188,204);填滿
  ellipse(userX, userY, 30, 30);//紅圈(弟弟)
  if (userVX==1 || userVX==-1) {//紅左右
    for(int a = 0; a < 6; a++){ 
      for (int k =0; k<4; k++) {
        int i=calci(int(userX+userVX), userY-k );
        if (imgFloor.pixels[i]==color(0)) {
          userX += userVX;
          userY-=k; 讓紅球可以上下坡
          break;
        }
      }
    }
  }
  if( userVY>0){ 紅往上跳
    for (int k=1; k<=userVY; k++) {
      int i =calci(userX, int(userY+1) );
      if( imgFloor.pixels[i]==color(0) ){
        userY ++;
      }
    }
    userVY += 0.98; 重力
  }else if( userVY<0){
    for (int k=1; k<=-userVY; k++) {
      int i = calci(userX, int(userY-1) );
      if(  imgFloor.pixels[i]==color(0) ){
        userY --;
      }
    }
    userVY += 0.98;
  }
int calci(int x, int y) { 讀取每個pixels
  return y*imgFloor.width + x;
}
void keyPressed() { 紅球按向左鍵往左:右鍵往右
  if (keyCode==RIGHT) userVX=1;
  if (keyCode==LEFT) userVX=-1;
  if (keyCode==UP && flying==false){
    userVY=-12;
    flying=true;
  }
  }
void keyReleased() {放開左右鍵紅點停止
  if (keyCode==RIGHT || keyCode==LEFT) userVX=0;
}












沒有留言:

張貼留言