2023年11月23日 星期四

Week11

 

WEEK 11


1.利用程式規劃出一排排方格列,並在這些方格內填塞且打上文字

程式碼:

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


2.改善方格內文字,改為數字呈現,利用for迴圈來隨機排列並疊加數字在方格內


相關程式碼:

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++)
   {
      for(int j=0;j<6;j++)
      {
         fill(#F5B4B4);
         rect(j*100,i*100,100,100);
         fill(0);
         text(value[i][j],j*100+25,i*100+50);
      }
   }
}


3.進一步改善數字排列的大小,並加入會讓隨機選取數字對換位子的機制


相關程式碼:

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; 
      }
   }
   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;
   }
}

4.嘗試做出可切換場景的程式,透過滑鼠點擊畫面的方式來切換場景

相關程式碼:

int state = 0;
void setup()
{
   size(400,400); 
   textSize(50);
}
void draw()
{
   if(state==0)
   {
      background(255); 
      fill(0); text("Please Click to Start",80,200);
   }
   else if(state==1)
   {
      background(255,0,0);
   }
   else if(state==2)
   {
      background(0,0,255);
   }
}
void mousePressed()
{
   if(state==0) state=1; 
}

5.在畫面2(紅畫面)個別設置一個灰方塊(玩家)跟白方塊(終點),當灰方塊移動到白方塊並完全重疊時(X軸至300時)會切換到下一個場景(畫面3)


相關程式碼:

int state = 0;
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);
      fill(255); rect(300,50,50,50);
      fill(128); rect(x,y,50,50);
   }
   else if(state==2)
   {
      background(0,0,255);
   }
}
void mousePressed()
{
   if(state==0) state=1; 
}
void keyPressed()
{
   if(state==1 && keyCode==RIGHT)
   {
      x+=10;
      if(x==300) state=2;
   }
}


6.在畫面3(藍畫面)加入計時器,並在倒數至0時會回到畫面1(白畫面)重新開始輪迴



相關程式碼:

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);
      fill(255); rect(300,50,50,50);
      fill(128); rect(x,y,50,50);
      t=100;
   }
   else if(state==2)
   {
      background(0,0,255);
      fill(255,255,0); text("Wait "+ t ,80,200);
      t--;
      if(t==0) state=0;
   }
}


7.製作一個藍球機,案住可以拖曳出一條線表示拋物線


相關程式碼:

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;
}


8.加入重力程式讓籃球在拖曳時丟出會依照拖曳的長短來判定加速後再掉落

相關程式碼:
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;
}


9.加入暫停功能,當按下任意按鍵時,籃球就不再能被丟出去


相關程式碼:

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);
}


10.製作踩地雷遊戲,利用程式碼排列出一排排方格,並隨機分配地雷位置


完整程式碼:

int[][]mine=new int [9][9];
void setup()
{
   size(450,450);
   for(int i=0;i<9;i++)
   {
     mine[i][0]=9;
   }
   for(int k=0;k<1000;k++)
   {
      int i=int(random(9)),j=int(random(9)); 
      int i2=int(random(9)),j2=int(random(9)); 
      int temp=mine[i][j];
      mine[i][j]=mine[i2][j2];
      mine[i2][j2]=temp;
   }
   for(int i=0;i<9;i++)
   {
      for(int j=0;j<9;j++)
      {
         if(mine[i][j]==9)
         {
            addNumber(i-1,j-1); 
            addNumber(i-1,j);
            addNumber(i-1,j+1);
            addNumber(i,j-1);
            addNumber(i-1,j);
            addNumber(i,j+1);
            addNumber(i+1,j-1);
            addNumber(i+1,j+1);
         }
      }
   }
}
void addNumber(int i,int j)
{
   if(i<0||j<0||i>=9||j>=9) return; 
   if(mine[i][j]!=9)mine[i][j]++;
}
void draw()
{
   for(int i=0;i<9;i++)
   {
      for(int j=0;j<9;j++)
      {
         if(mine[i][j]==9) fill(255,128,128);
         else fill(255);
         rect(j*50,i*50,45,45);
         if(mine[i][j]!=0)
         {
            fill(0); text(""+mine[i][j],j*50+23,i*50+23,45,45) ;
         }
      }
   }
}


























































沒有留言:

張貼留言