2023年11月23日 星期四

Week11

 week 11

step 01-1 先做出6*4的座位格子 

                                

                                用fill(顏色#) 填充田顏色


void setup()
{
  size(600,500);
}
void draw()
{
  background(255);
  for(int i=0;i<4;i++)//左手 i
  {
    for(int j=0;j<6;j++)//右手j
    {
      fill(#F5B4B4); rect(j*100,i*100,100,100);
      fill(0); text("Hello",j*100+25,i*100+50);
    }
  }
}

step 01-2 把上一個程式裡面的Hello換成用亂數給數字


void setup()
{
  size(600,500);
  for(int i=0;i<4;i++)
  {
    for(int j=0;j<6;j++)
    {
      value[i][j] = int(random(40));
    }
  }

}
int [][] value = new int[4][6];
void draw()
{
  background(255);
  for(int i=0;i<4;i++)//左手 i
  {
    for(int j=0;j<6;j++)//右手j
    {
      fill(#F5B4B4); rect(j*100,i*100,100,100);
      fill(0); text(value[i][j],j*100+25,i*100+50);
    }
  }
}

step 01-3 把數字起始職改為10開始 做兩次數字交換 用temp = ? ?= ?? ??=temp 去做


void setup()
{
  size(600,500);
  for(int i=0;i<4;i++)
  {
    for(int j=0;j<6;j++)
    {
      value[i][j] = i*6+j+10;//數字從10開始 數字不重複
    }
  }
  for(int k=0;k<2;k++ )//重覆要做幾次
  {
    int i=int(random(4)), j=int(random(6));
    int i2=int(random(4)),j2=int(random(6));
    int temp = value[i][j];
    value[i][j] = value[i2][j2];
    value[i2][j2] = temp;
  }
}
int [][] value = new int[4][6];
void draw()
{
  background(255);
  for(int i=0;i<4;i++)//左手 i
  {
    for(int j=0;j<6;j++)//右手j
    {
      fill(#F5B4B4); rect(j*100,i*100,100,100);
      fill(0); text(value[i][j],j*100+25,i*100+50);
    }
  }
}

step 01-4 作轉場的先前動作



int state = 0;//0表白色狀態 1表紅色狀態 2表藍色狀態
void setup()
{
  size(400,400);
}
void draw()
{
  if(state==0)
  {
    background(255);//白色
  }
  
  else if(state==1)
  {
    background(255,0,0);//第1關 紅色
  }
  
  else if(state==2)
  {
    background(0,0,255);//第2關 藍色
  }
  
}

step 02-1  增加一個可以換場景的按鍵 按下去 進到下一個關卡




int state = 0;//0表白色狀態 1表紅色狀態 2表藍色狀態
void setup()
{
  size(400,400);
  textSize(50);
}
void draw()
{
  if(state==0)
  {
    background(255);//白色
    fill(0); text("Click to Start",80,200);
  }
  
  else if(state==1)
  {
    background(255,0,0);//第1關 紅色
  }
  
  else if(state==2)
  {
    background(0,0,255);//第2關 藍色
  } 
}

void mousePressed()
{
  if(state==0) state=1;//滑鼠按下去 進到下一關
}

step 02-2 做兩個正方形 當灰色正方形完全和白色正方形重疊時 直接進到下一關畫面



int state = 0;//0表白色狀態 1表紅色狀態 2表藍色狀態
void setup()
{
  size(400,400);
  textSize(50);
}
int x = 50,y = 50;
void draw()
{
  if(state==0)
  {
    background(255);//白色
    fill(0); text("Click to Start",80,200);
  }
  
  else if(state==1)
  {
    background(255,0,0);//第1關 紅色
    fill(255); rect(300,50,50,50);
    fill(128); rect(x,y,50,50);
  }
  
  else if(state==2)
  {
    background(0,0,255);//第2關 藍色
  } 
}

void mousePressed()
{
  if(state==0) state=1;
}
void keyPressed()
{
  if(state==1 && keyCode==RIGHT)
  {
    x += 10;//往右走10步
    if(x==300) state=2;//如果兩個正方形完全疊合 進到下一關
  }
}

step 02-3 增加一個倒數計時 當時間等於0時 會跳回第一關的畫面



int state = 0;//0表白色狀態 1表紅色狀態 2表藍色狀態
void setup()
{
  size(400,400);
  textSize(50);
}
int x = 50,y = 50, t = 100;
void draw()
{
  if(state==0)
  {
    background(255);//白色
    fill(0); text("Click to Start",80,200);
    x = 50;
  }
  
  else if(state==1)
  {
    background(255,0,0);//第1關 紅色
    fill(255); rect(300,50,50,50);
    fill(128); rect(x,y,50,50);
    t = 100;
  }
  
  else if(state==2)
  {
    background(0,0,255);//第2關 藍色
    fill(255,255,0);  text("Wait" +t,80,200);
    t--;//倒數計時
    if(t==0) state = 0;//時間等於0 回到第一關畫面
  } 
}

void mousePressed()
{
  if(state==0) state=1;
}
void keyPressed()
{
  if(state==1 && keyCode==RIGHT)
  {
    x += 10;//往右走10步
    if(x==300) state=2;//如果兩個正方形完全疊合 進到下一關
  }
}

step 02-4 投籃劃出拋物線 但會盤到看不見的地方



PImage imgRack;
void setup()
{
  size(300,300);
  imgRack = loadImage("rack.jpg");
}
void draw()
{
  background(255);
  image(imgRack,0,0);
  if(mousePressed)
  {
    fill(255); ellipse(posX,posY,20,20);
    line(posX,posY,mouseX,mouseY);
    fill(#FFA652); ellipse(mouseX,mouseY,20,20);
  }
}
float posX =-100,posY = -100;//一開始 求不會出現
void mousePressed()
{
  posX = mouseX;
  posY = mouseY;
}

step 03-1 完成投籃機


PImage imgRack;
void setup()
{
  size(300,300);
  imgRack = loadImage("rack.jpg");
}
void draw()
{
  background(255);
  image(imgRack,0,0);
  if(flying)
  {
    x += vx;
    y += vy;
    vy += 0.98;
  }
  else
  {
    x = mouseX;
    y = mouseY;
 
    if(mousePressed)
    {
      fill(255); ellipse(posX,posY,20,20);
      line(posX,posY,x,y);
    }
  }
  fill(#FFA652);ellipse(x,y,20,20);
  
}
boolean flying = false;
float x,y,vx,vy;
float posX =-100,posY = -100;//一開始 求不會出現
void mousePressed()
{
  x = posX = mouseX;
  y = posY = mouseY;
  flying = false;
}
void mouseReleased()
{
  vx = posX - mouseX;
  vy = posY - mouseY;
  flying = true;
}

step 03-2 如果遊戲結束的話 要怎麼暫停


PImage imgRack;
void setup()
{
  size(300,300);
  imgRack = loadImage("rack.jpg");
}
boolean gameOver=false;
void keyPressed()
{
  gameOver = true;
}
void draw()
{
  background(255);
  image(imgRack,0,0);
  if(flying)
  {
    if( ! gameOver )
    {
      x += vx;
      y += vy;
      vy += 0.98;
    }
  }
  else
  {
    x = mouseX;
    y = mouseY;
 
    if(mousePressed)
    {
      fill(255); ellipse(posX,posY,20,20);
      line(posX,posY,x,y);
    }
  }
  fill(#FFA652);ellipse(x,y,20,20);
  
}
boolean flying = false;
float x,y,vx,vy;
float posX =-100,posY = -100;//一開始 求不會出現
void mousePressed()
{
  x = posX = mouseX;
  y = posY = mouseY;
  flying = false;
}
void mouseReleased()
{
  vx = posX - mouseX;
  vy = posY - mouseY;
  flying = true;
}

step 03-3 謝謝老師說明踩地雷大概的想法怎麼寫









沒有留言:

張貼留言