2021年12月20日 星期一

week11課程

期末作業進度

炸潛水艇

1.畫出背景

void setup()
{
  size(800,800);//視窗大小
}
float x=400,y=175;//船隻起始位置
float bombX,bombY,bombVX,bombVY;
void draw()
{
    background(#C9E4F0);//天空顏色
    fill(#225BD3);rect(0,200,800,1000);//海洋顏色與調整位置
    fill(255);ellipse(x,y,200,50);//船隻大小
}

2.畫出砲彈、發射砲彈

void setup()
{
  size(800,800);//視窗大小
}
float x=400,y=175;//船隻起始位置
float bombX,bombY,bombVX,bombVY;
boolean shooting=false;
void draw()
{
    background(#C9E4F0);//天空顏色
    fill(#225BD3);rect(0,200,800,1000);//海洋顏色與調整位置
    fill(255);ellipse(x,y,200,50);//船隻大小
    if(shooting)
    {
        bombX+=bombVX;bombY+=bombVY;
        ellipse(bombX,bombY,10,10);
    }
}
void mousePressed()//滑鼠點擊就發射砲彈
{
    bombX=x;bombY=y;
    bombVX=0;bombVY=1;
    shooting=true;
}

3.砲彈生成數

float []bombX=new float[100];//用陣列計算砲彈生成數和速度
float []bombY=new float[100];
float []bombVX=new float[100];
float []bombVY=new float[100];

void draw()
{
    background(#C9E4F0);//天空顏色
    fill(#225BD3);rect(0,200,800,1000);//海洋顏色與調整位置
    fill(255);ellipse(x,y,200,50);//船隻大小
    for(int i=0;i<N;i++)
   {
        bombY[i]+=bombVY[i];
        fill(#555252);ellipse(bombX[i],bombY[i],20,50);
    }
}


4.計算砲彈發射數和重置

for(int i=0;i<N;i++)
  {
    bombY[i]+=bombVY[i];
    fill(#555252);ellipse(bombX[i],bombY[i],20,50);
    if(bombY[i]>800)
    {
      for(int k=i;k<N-1;k++)//此迴圈作為回收砲彈用途,陣列從0計算,0...i...N-1,補中間的空洞,需左移補上
      {
        bombX[k]=bombX[k+1];
        bombY[k]=bombY[k+1];
        bombVX[k]=bombVX[k+1];
        bombVY[k]=bombVY[k+1];
      }
      N--;
    }
  }
  println(N);
void mousePressed()
{
  N++;
  bombX[N-1]=x;bombY[N-1]=y;//矩陣從0開始算,頭尾都算在計算時需-1
  bombVX[N-1]=0;bombVY[N-1]=1;
}


▲進度預期

1.潛水艇隨機生成
2.砲彈和潛水艇的碰撞偵測及消失
3.結尾畫面
4.倒數計時器
5.分數計算

沒有留言:

張貼留言