顯示具有 Week11 標籤的文章。 顯示所有文章
顯示具有 Week11 標籤的文章。 顯示所有文章

2021年12月27日 星期一

岩壁悲歌 Week11

  2021/12/20

----------------------------------------

小葉老師在協助同學期末作品


彈弓的模擬






void setup(){

  size(400,300);

}

float x,y,vx,vy;

boolean flying=false;

void draw(){

  background(255);

  line(mouseX,mouseY,100,200);

  float force = 1*dist(mouseX,mouseY,100,200);

  if(flying){

    ellipse(x,y,30,30);

    x+=vx;  y+=vy;

    vy+=0.98;

  }

  if(frameCount%(2*60)==0){

    x=mouseX;  y=mouseY;  vx=(100-mouseX)*0.1;  vy=(200-mouseY)*0.1;

    flying=true;  

  }

}

------------------------------------------------


馬力歐採怪物









float []turtleX=new float[30];

float x=100,y=200,vx=0,vy=0;

boolean jumping=false,MarioDie=false;

boolean[]turtleAlive=new boolean[30];

void setup(){

  size(500,300);

  turtleX[0]=500;

  for(int i=1;i<30;i++){

    turtleX[i]=turtleX[i-1]+random(100,200);

    turtleAlive[i]=true;

  }

}

void draw(){

  background(255);

  if(MarioDie) background(255,0,0);

  fill(#E5DCB7);  rect(0,200,500,100);

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

    if(turtleAlive[i]){

      if(dist(x,y-20,turtleX[i],200-20)<40){

        if(jumping)  turtleAlive[i]=false;

        else  MarioDie=true;

      }

      fill(0,255,0);  ellipse(turtleX[i],200-20,40,40);

      if(!MarioDie)  turtleX[i]-=3;

    }

  }

  fill(255,0,0);  ellipse(x,y-20,40,40);

  if(jumping){

    x+=vx;  y+=vy;  vy+=0.98;

    if(y>200){

      y=200;  jumping=false;

    }

  }

}

void mousePressed(){

  jumping=true;

  vy-=16;

}

---------------------------------------


寶石方塊








int[][]square=new int[8][8];

color[] c={#FA1E1E,#1E44FA};

void setup(){

  size(400,400);

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

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

      square[i][j]=int(random(2));

    }

  }

}

void draw(){

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

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

      if(mousePressed&&i==moveI&&j==moveJ)  strokeWeight(5);

      else if(mousePressed&&i==moveI2&&j==moveJ2)  strokeWeight(5);

      else  strokeWeight(1);

      if(square[i][j]==0){

        fill(c[0]);  rect(j*50,i*50,50,50);

      }else if(square[i][j]==1){

        fill(c[1]);  rect(j*50,i*50,50,50);

      }

    }

  }

}

int moveI,moveJ,moveI2,moveJ2;

void mousePressed(){

  int j=mouseX/50,i=mouseY/50;

  moveJ=j;  moveI=i;

  moveJ2=j;  moveI2=i;

}

void mouseDragged(){

  int j=mouseX/50,i=mouseY/50;

  moveJ2=j;  moveI2=i;

}

void mouseReleased(){

  int j=mouseX/50,i=mouseY/50;

  moveJ2=j;  moveI2=i;

  if(testNeighbor(i,j,moveI,moveJ)==true){

    int temp=square[i][j];

    square[i][j]=square[moveI][moveJ];

    square[moveI][moveJ]=temp;

  }

}

boolean testNeighbor(int i,int j,int i2,int j2){

  if(i==i2&&j-j2==1)  return true;

  if(i==i2&&j2-j==1)  return true;

  if(j==j2&&i-i2==1)  return true;

  if(j==j2&&i2-i==1)  return true;

  return false;

}

2021年12月25日 星期六

WEEK11-阿噗的神奇小筆記(現在補補補3+姨媽來痛痛)

  

期末作業開工啦3


💓💙💚💛💜💓💙💚💛💜💓💙💚💛💜💓💙💚💛💜💓💙💚💛💜💓💙💚💛💜💓💙

😅繼續補齊Blog,剩這個禮拜了! 
👸那天姨媽來,所以在家裡線上,但痛到無法動作阿阿
💚(這一個禮拜明園有夜市,買了拔絲地瓜,比之前貴了$10阿阿,但我還是照買)

-------------------------------------------------------------------------------------------------------------------------

1.今日繼續奮鬥!(雖然大部分都陳柏在打程式,辛苦他了😢,我會努力畫畫!)
2.開始製作打蟑螂


-依舊先來一張噁心蟑螂圖😵


💩!準備開始囉!💩
-------------------------------------------------------------------------------------------------------------------------

☛首先老師先選出三個核心主題為我們解說(上禮拜重點)

//探討主題:
//(1)蟑螂會從哪裡出現,如何對應移動速度與方向?
//(2)藍白拖怎麼打死蟑螂?
//(3)如何使用三角函數使蟑螂有亂跑的效果? sinx ,cosx,tanx;


-------------------------------------------------------------------------------------------------------------------------

☛全部程式碼如下:



float x,y,vx,vy,x2,y2,vx2,vy2;
int count=600;///計時器的總共時間
int score=0;
int save[]={0,1,2,3};
PFont myFont;///讀入字體
PImage img1,img2,img3,img4,img5;//讀入圖檔

void setup(){
  size(500,500);
  
  img1=loadImage("start1.png");//讀入圖片
  img2=loadImage("restart1.png");
  img3=loadImage("bg.png");//背景圖片
  img4=loadImage("Cockroach.png");
  img5=loadImage("restart.png");//返回鍵
  generateCockroach();//一般的蟑螂
  generateCockroach2();//特別的蟑螂
  fill(255,0,0);
  textSize(80);
   myFont = createFont("微軟正黑體",30);///中文輸入法程式碼
}
int condition;//情況
void mousePressed() {///場景切換
    
    if(condition==0){
      if (mouseButton == LEFT&&dist(150,150, mouseX-120, mouseY-75)<50){  // 切換到開始遊戲介面
          condition=1;
       }
    }
    if(condition==2){
      if (mouseButton == LEFT&&dist(175,175, mouseX-70, mouseY-70)<50) {  // 切換到開始遊戲介面
          condition=0;
        } 
    }
      if(condition==1){
        if(mouseButton==LEFT&& dist(400,400,mouseX-100,mouseY-100)<50){
        condition=0;//返回鍵
        score=0;
        count=600;
        }
      }
}

void draw(){
  if(condition==0){
    background(255,192,103);
    image(img1,75,75,350,350);
    if (mouseButton == LEFT&&dist(200,200, mouseX, mouseY)<60){  // 切換到開始遊戲介面
          condition=1;
       }
  }
  if(condition==1){//condition=1且時間>0=遊戲介面
    image(img3,0,0,500,500);
    image(img4,x,y,300,300);//蟑螂的大小
    image(img5,450,450,50,50);//返回鍵
    x+=vx;  y+=vy;//若超過左邊界、右邊界,則會隨機產生一般蟑螂。
    x2+=vx2;  y2+=vy2;//若超過左邊界、右邊界,則會隨機產生特別蟑螂。
    
    if(frameCount%10==0){//每一秒,改一次角度
      float angle = atan2(vy,vx);
      //float angle2=(angle+radians(90));//時間到就轉90度。
      float angle2=(angle+radians(random(-30,30)));//時間到就轉30度。
      vx =cos(angle2);//一般蟑螂
      vy =sin(angle2);//一般蟑螂
      vx2=sin(angle2);//特別蟑螂
      vy2=cos(angle2);//特別蟑螂
      }
    if(x<0 || y<0||x>500||y>500)generateCockroach();//不管邊界x,y<0或x,y>500,都會產生新的蟑螂。
    noFill(); ellipse(mouseX,mouseY,50,50);//產生藍白拖。
    if(mousePressed && dist(mouseX-150,mouseY-150,x,y)<40){
      generateCockroach();//死後產生新的蟑螂。
      score+=10;///分數加10分
    }//一般蟑螂
    

    
      if(frameCount>180&&frameCount<360){
      fill(0);rect(x2,y2,20,20);//特別的蟑螂
      if(x2<0 || y2<0||x2>500||y2>500)generateCockroach2();//不管邊界x,y<0或x,y>500,都會產生新的蟑螂。
      if(mousePressed && dist(mouseX,mouseY,x2,y2)<40){
        generateCockroach2();//死後產生新的特別蟑螂。
        score+=100;//分數加100分
        } 
      }//特別蟑螂 
      textFont(myFont);
      text("分數:"+score,350,45); 
      
      fill(255,255,255);
      textSize(36);
      text("Time:" +int(count/60)+"秒",50,45); ///計時器。
      count--;
      
      if(count<=0){
       
        condition=2;//結束介面
        count+=600;
        score=0;
        
      }
      
  }
       if(condition==2){//結束畫面
       background(186,85,211);
       image(img2,10,5,500,500);
       textFont(myFont,80);
       text("遊戲結束",80,160);
      }
  
}


void generateCockroach(){//一般的蟑螂
  int edge=int (random(4));//4個邊
  if(edge==0){
  x=300;y=random(300);vx=-random(1,3);vy=random(-3,+3);
  }else if(edge==1){
    x=random(300);y=300;vx=-random(-3,3);vy=random(1,3);
  }else if(edge==2){
    x=0;y=random(300);vx=random(1,3);vy=random(-3,+3);
  }else if(edge==3){
    x=random(300);y=0;vx=random(-3,3);vy=random(1,3);
  }
}
  void generateCockroach2(){///特別的蟑螂
    int edge2=int (random(4));//4個邊
    if(edge2==0){
    x2=300;y2=random(300);vx=-random(1,3);vy=random(-3,+3);
    }else if(edge2==1){
      x2=random(300);y2=300;vx=-random(-3,3);vy=random(1,3);
    }else if(edge2==2){
      x2=0;y2=random(300);vx=random(1,3);vy=random(-3,+3);
    }else if(edge2==3){
      x2=random(300);y2=0;vx=random(-3,3);vy=random(1,3);
    }
}
-------------------------------------------------------------------------------------------------------------------------
此為執行畫面:




有開始的按鈕,可切換至遊戲畫面。


此為遊戲畫面
已有秒數及分數,並加了一隻蟑螂進去試試。
右下角也加了返回鈕,可跳至開始畫面。
而背景先至網路上找圖,之後會在自己重畫。


此為結束畫面
可按返回建,跳至一開始畫面,之後也會畫畫面進去。





---------------------------------------------------------------------------------------------------------------------------
以上為現在的進度,結構已大致上完成了。
(下次會再做更細緻,並將畫面丟入)

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.分數計算

橘貓(互動技術期末_week11)

 

 Timberman-期末作品第三步

解說遊戲內容

遊戲規則與機制:
  • 限時內把樹砍倒
  • 躲過樹枝,時間會增加
  • 每砍掉一段木頭就可以得分!
  • 按"↑"可重新開始遊戲
  • 可刷新最高紀錄,重新挑戰
解說遊戲判定與設定
遊戲開始畫面

死亡畫面

按"↑"可重新開始遊戲

時間到了所以判定死亡
程式碼:

2021年12月13日 星期一

大家標題禮拜數都不一樣

 今天是在做自己的作業

一開始上課的時候老師就開始講解教室同學的問題

我一開始定的題目是彈力球打板的遊戲







但老師說不要太常見的

我覺得這個遊戲應該網路上很多資料

所以我在想要不要把遊戲改成類似彈幕遊戲











但基本架構不太清楚可能要上課的時候詢問老師一下作法

在最後一節課有問老師

詳細過程下課再自己研究


作業中

 




程式碼:

PImage img;

void setup(){

  size(500,500);

  img = loadImage("ground.jpg");

  imageMode(CENTER);

}

void draw(){

  background(255);

  image(img,250,305);

}

week11

 這周我們還是繼續聽老師示範講解各組題目








2021年12月6日 星期一

酷喔

 小葉老師在協助同學期末作品


彈弓的模擬






void setup(){

  size(400,300);

}

float x,y,vx,vy;

boolean flying=false;

void draw(){

  background(255);

  line(mouseX,mouseY,100,200);

  float force = 1*dist(mouseX,mouseY,100,200);

  if(flying){

    ellipse(x,y,30,30);

    x+=vx;  y+=vy;

    vy+=0.98;

  }

  if(frameCount%(2*60)==0){

    x=mouseX;  y=mouseY;  vx=(100-mouseX)*0.1;  vy=(200-mouseY)*0.1;

    flying=true;  

  }

}

------------------------------------------------


馬力歐採怪物









float []turtleX=new float[30];

float x=100,y=200,vx=0,vy=0;

boolean jumping=false,MarioDie=false;

boolean[]turtleAlive=new boolean[30];

void setup(){

  size(500,300);

  turtleX[0]=500;

  for(int i=1;i<30;i++){

    turtleX[i]=turtleX[i-1]+random(100,200);

    turtleAlive[i]=true;

  }

}

void draw(){

  background(255);

  if(MarioDie) background(255,0,0);

  fill(#E5DCB7);  rect(0,200,500,100);

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

    if(turtleAlive[i]){

      if(dist(x,y-20,turtleX[i],200-20)<40){

        if(jumping)  turtleAlive[i]=false;

        else  MarioDie=true;

      }

      fill(0,255,0);  ellipse(turtleX[i],200-20,40,40);

      if(!MarioDie)  turtleX[i]-=3;

    }

  }

  fill(255,0,0);  ellipse(x,y-20,40,40);

  if(jumping){

    x+=vx;  y+=vy;  vy+=0.98;

    if(y>200){

      y=200;  jumping=false;

    }

  }

}

void mousePressed(){

  jumping=true;

  vy-=16;

}

---------------------------------------


寶石方塊








int[][]square=new int[8][8];

color[] c={#FA1E1E,#1E44FA};

void setup(){

  size(400,400);

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

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

      square[i][j]=int(random(2));

    }

  }

}

void draw(){

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

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

      if(mousePressed&&i==moveI&&j==moveJ)  strokeWeight(5);

      else if(mousePressed&&i==moveI2&&j==moveJ2)  strokeWeight(5);

      else  strokeWeight(1);

      if(square[i][j]==0){

        fill(c[0]);  rect(j*50,i*50,50,50);

      }else if(square[i][j]==1){

        fill(c[1]);  rect(j*50,i*50,50,50);

      }

    }

  }

}

int moveI,moveJ,moveI2,moveJ2;

void mousePressed(){

  int j=mouseX/50,i=mouseY/50;

  moveJ=j;  moveI=i;

  moveJ2=j;  moveI2=i;

}

void mouseDragged(){

  int j=mouseX/50,i=mouseY/50;

  moveJ2=j;  moveI2=i;

}

void mouseReleased(){

  int j=mouseX/50,i=mouseY/50;

  moveJ2=j;  moveI2=i;

  if(testNeighbor(i,j,moveI,moveJ)==true){

    int temp=square[i][j];

    square[i][j]=square[moveI][moveJ];

    square[moveI][moveJ]=temp;

  }

}

boolean testNeighbor(int i,int j,int i2,int j2){

  if(i==i2&&j-j2==1)  return true;

  if(i==i2&&j2-j==1)  return true;

  if(j==j2&&i-i2==1)  return true;

  if(j==j2&&i2-i==1)  return true;

  return false;

}

08160741_Week09

 1.恐龍動畫、地面


PImage[] Dino_idle = new PImage[2];


int DinoAnim_Timer = 0,PlayerFrame = 2,currentFrame = 0;

void setup()

{

  size(1200,700);

  frameRate(24);

  //恐龍的預設動畫圖片

  Dino_idle[0] = loadImage("dino_idle_0.png");

  Dino_idle[1] = loadImage("dino_idle_1.png");

}


void draw()

{

  background(255);

  

  //恐龍動畫

  DinoAnim_Timer++;  

  imageMode(CENTER);

  if(DinoAnim_Timer % PlayerFrame == 0)

  {

    currentFrame++;

    if(currentFrame == PlayerFrame) currentFrame = 0;

    DinoAnim_Timer = 0;

  }

  image(Dino_idle[currentFrame],100,550);

  

  //地面

  line(0,600,1200,600);

  

}


2.下次規劃

製作障礙物的圖片、初步的碰撞檢測、開始計算分數、地面開始有變化、不同階段的關卡、恐龍的速度變化



天文社社員招募中week11

    

期末作品開始囉!


1.做他的框框








程式如下:

int[][]grid={ ///12x20
  {1,1,1,1,1,1,1,1,1,1,1,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,1,1,1,1,1,1,1,1,1,1,1}
};
void setup(){
  size(300,500);
}
void draw(){
  background(0);
  for(int x=0;x<12;x++){
    for(int y=0;y<20;y++){
      if(grid[y][x]==1)fill(70,130,180);
      else fill(0);
      rect(x*25,y*25,25,25);
    }
  }
}


2.製作紅色方塊讓他下降






程式如下:


int[][]grid={
  {1,1,1,1,1,1,1,1,1,1,1,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,1,1,1,1,1,1,1,1,1,1,1}
};
void one(int x,int y){
  fill(255,0,0);
  if(grid[y][x]==0)rect(25*x,25*y,25,25); ///xy是相反的
}
void setup(){
  size(300,500);
}
void draw(){
  background(0);
  for(int x=0;x<12;x++){
    for(int y=0;y<20;y++){
      if(grid[y][x]==1)fill(70,130,180);
      else fill(0);
      rect(x*25,y*25,25,25);
    }
  }
  one(nowX,nowY);
  if(frameCount%20==0){  ///讓他下降
        nowY++;
    }
  }
}
int nowX=6,nowY=1;




3.掉到最下面會停住!

 


程式如下:


int[][]grid={
  {1,1,1,1,1,1,1,1,1,1,1,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,1,1,1,1,1,1,1,1,1,1,1}
};
void one(int x,int y){
  fill(255,0,0);
  if(grid[y][x]==0)rect(25*x,25*y,25,25);
}
void setup(){
  size(300,500);
}
void draw(){
  background(0);
  for(int x=0;x<12;x++){
    for(int y=0;y<20;y++){
      if(grid[y][x]==1)fill(70,130,180);
      else if(grid[y][x]==2)fill(255,0,0);
      else fill(0);
      rect(x*25,y*25,25,25);
    }
  }
  one(nowX,nowY);
  if(frameCount%20==0){
    if(grid[nowY+1][nowX]==0)nowY++;
    else{
      grid[nowY][nowX]=2;
      nowX=6;nowY=1;
    }
  }
}
int nowX=6,nowY=1;

  

4.讓方塊可以左右移動





程式如下:


int[][]grid={
  {1,1,1,1,1,1,1,1,1,1,1,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,1,1,1,1,1,1,1,1,1,1,1}
};
void one(int x,int y){
  fill(255,0,0);
  if(grid[y][x]==0)rect(25*x,25*y,25,25);
}
void setup(){
  size(300,500);
}
int b=0;
void draw(){
  background(0);
  for(int x=0;x<12;x++){
    for(int y=0;y<20;y++){
      if(grid[y][x]==1)fill(70,130,180);
      else if(grid[y][x]==2)fill(255,0,0);
      else fill(0);
      rect(x*25,y*25,25,25);
    }
  }
  one(nowX,nowY);
  if(frameCount%20==0){
    if(grid[nowY+1][nowX]==0)nowY++;
    else{
      grid[nowY][nowX]=2;
      nowX=6;nowY=1;
    }
  }
}
int nowX=6,nowY=1;
void keyPressed(){
  if(keyCode==RIGHT){ b=3; nowX++; }
  if(keyCode==LEFT) { b=2; nowX--; }
  if(keyCode==UP) { b=1; nowY--; }
  if(keyCode==DOWN){ b=0; nowY++; }
}


5.顏色資料庫



   (70,130,180)

  (250,128,124)




6.撞牆會融入牆(欠改裝)





程式如下:


int[][]grid={
  {1,1,1,1,1,1,1,1,1,1,1,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,1,1,1,1,1,1,1,1,1,1,1}
};
void one(int x,int y){
  fill(250,128,124);
  if(grid[y][x]==0)rect(25*x,25*y,25,25);
}
void setup(){
  size(300,500);
}
int b=0;
float []vx={0,0,300,500};
void draw(){
  background(0);
  for(int x=0;x<12;x++){
    for(int y=0;y<20;y++){
      if(grid[y][x]==1)fill(70,130,180);
      else if(grid[y][x]==2)fill(250,128,124);
      else fill(0);
      rect(x*25,y*25,25,25);
      if(x>300)x=-x;
      if(x<0)x=-x; 
    }
  }
  one(nowX,nowY);
  if(frameCount%20==0){
    if(grid[nowY+1][nowX]==0)nowY++;
    else{
      grid[nowY][nowX]=2;
      nowX=6;nowY=1;
    }
  }
}
int nowX=6,nowY=1;
void keyPressed(){
  if(keyCode==RIGHT){ b=3; nowX++; }
  if(keyCode==LEFT) { b=2; nowX--; }
  if(keyCode==UP) { b=1; nowY--; }
  if(keyCode==DOWN){ b=0; nowY++; }
}

老師講解:
int[][]grid={
  {1,1,1,1,1,1,1,1,1,1,1,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,0,0,0,0,0,0,0,0,0,0,1},
  {1,1,1,1,1,1,1,1,1,1,1,1}
};
void one(int x,int y){
  fill(250,128,124);
  if(grid[y][x]==0)rect(25*x,25*y,25,25);
}
void setup(){
  size(300,500);
}
int b=0;
float []vx={0,0,300,500};
void draw(){
  background(0);
  for(int x=0;x<12;x++){
    for(int y=0;y<20;y++){
      if(grid[y][x]==1)fill(70,130,180);
      else if(grid[y][x]==2)fill(250,128,124);
      else fill(0);
      rect(x*25,y*25,25,25);
      if(x>300)x=-x;
      if(x<0)x=-x; 
    }
  }
  one(nowX,nowY);
  if(frameCount%20==0){
    //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
    //else{....}
    if(grid[nowY+1][nowX]==0)nowY++;
    else{
      grid[nowY][nowX]=2;
      nowX=6;nowY=1;
    }
  }
}
boolean testSafe( int shape, int x, int y, int angle ){
  if(shape==1){
    //testSafeShape1(x, y, angle);
    
  }else if(shape==2){
    //testSafeShape2(x,y, angle);
  }
  return true;//safe
}
int nowX=6,nowY=1;
void keyPressed(){
  // if(keyCode==RIGHT && testSafe( nowShape, nowX+1, nowY, nowAngle)==true ){ b=3; nowX++; } 
  if(keyCode==RIGHT && grid[nowY][nowX+1]==0 ){ b=3; nowX++; }
  if(keyCode==LEFT && grid[nowY][nowX-1]==0 ) { b=2; nowX--; }
  if(keyCode==UP) { b=1; nowY--; }
  if(keyCode==DOWN){ b=0; nowY++; }
}



🍮加油加油🍩