2023年1月7日 星期六

YJ week11

泡泡射手遊戲製作: 

*       : 新增的程式碼        : 註釋

1.  畫出一個圓當砲台

程式碼:

void setup(){

  size(600,500);

}

int x=300, y=450;

void draw(){

  ellipse(x,y,50,50);

}



2. 在砲台上畫出瞄準線

程式碼:

void setup(){

  size(600,500);

}

int x=300, y=450;

int angle1=0,angle2=0;

void draw(){

  ellipse(x,y,50,50);

  line(x,y, x+80*cos(angle1), y+80*sin(angle1));//線的長短

}



3. 讓準線能動

程式碼:

void setup(){

  size(600,500);

}

int x=300, y=450;

float angle1=0,angle2=0;

void draw(){

  background(#FFFFF2);

  ellipse(x,y,50,50);

  line(x,y, x+80*cos(angle1), y+80*sin(angle1));//線的長短

}

void keyPressed(){

  if(keyCode==UP) angle1-=0.1;//轉動大小

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

}



4.射出砲彈

程式碼:

void setup(){

  size(600,500);

}

int x=300, y=450;

float angle1=0,angle2=0;

boolean bulletFlying1=false;

float bulletX1,bulletY1;

float bulletVX1,bulletVY1;

void draw(){

  background(#FFFFF2);

  ellipse(x,y,50,50);

  line(x,y, x+80*cos(angle1), y+80*sin(angle1));//線的長短

  if(bulletFlying1){

    bulletX1+= bulletVX1;

    bulletY1+= bulletVY1;

    ellipse(bulletX1,bulletY1,30,30);

  }

}

void keyPressed(){

  if(keyCode==UP) angle1-=0.1;//轉動大小

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

  if(key==' '){

    bulletFlying1=true;

    bulletX1=x;

    bulletY1=y;

    bulletVX1=cos(angle1)*1;//速度

    bulletVY1=sin(angle1)*1;//速度

  }

}



5. 讓子彈碰到左右邊界會反彈,上面會停下來

程式碼:

void setup(){

  size(600,500);

}

int x=300, y=450;

float angle1=0,angle2=0;

boolean bulletFlying=false;

float bulletX,bulletY;

float bulletVX,bulletVY;

void draw(){

  background(#FFFFF2);

  fill(255,255,0);

  ellipse(x,y,50,50);

  line(x,y, x+80*cos(angle1), y+80*sin(angle1));//線的長短

  if(bulletFlying){

    bulletX+= bulletVX;

    bulletY+= bulletVY;

    fill(255,0,0);

    ellipse(bulletX,bulletY,30,30);

    if(bulletX > 585) bulletVX=-bulletVX;

    if(bulletX < 15) bulletVX=-bulletVX;

    if(bulletY < 17) {bulletVY=0;bulletVX=0;}

  }

}

void keyPressed(){

  if(keyCode==UP) angle1-=0.1;//轉動大小

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

  if(key==' '){

    bulletFlying=true;

    bulletX=x;

    bulletY=y;

    bulletVX=cos(angle1)*5;//速度

    bulletVY=sin(angle1)*5;

  }

}



6. 使子彈能停留上方

程式碼:

void setup(){

  size(600,500);

}

int x=300, y=450;

float angle1=0,angle2=0;

boolean bulletFlying=false;

float bulletX,bulletY;

float bulletVX,bulletVY;

int [][] hole = new int[3][20];//先畫格子

void draw(){

  background(#FFFFF2);

  fill(255,255,0);

  ellipse(x,y,50,50);

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

  

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

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

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

      else fill(255,255,0);

      ellipse(15+j*30, 15+i*30, 30, 30);//格子排序、大小

    }

  }

  

  if(bulletFlying){

    bulletX+= bulletVX;

    bulletY+= bulletVY;

    fill(255,0,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<3; i++){

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

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

    }

  }

  return false;

}

void put_ball_in_hole(){//使泡泡停在格子中並變成黃色

  float nearest = 99999;

  int nowI=0, nowJ=0;

  for(int i=0; i<3; 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 drawHex(int x,int y,float r){

  beginShape();

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

    float angle = radians(i*60);

    vertex(x+r*cos(angle),y+r*sin(angle));

  }

  endShape(CLOSE);

}*/

void keyPressed(){

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

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

  if(key==' '){

    bulletFlying=true;

    bulletX=x;

    bulletY=y;

    bulletVX=cos(angle1)*5;

    bulletVY=sin(angle1)*5;

  }

}








沒有留言:

張貼留言