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

2022年1月3日 星期一

2021年12月31日 星期五

WEEK12-阿噗的神奇小筆記(要準備跨年了!!)

   

期末作業開工啦4


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

😅繼續補齊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月27日 星期一

岩壁悲歌 Week12

  2021/12/27

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

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


子彈碰到會死掉








float x,y;

boolean die=false;

float []bulletX=new float[40];

float []bulletY=new float[40];

float []bulletVX=new float[40];

float []bulletVY=new float[40];;

void setup(){

  size(300,500);

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

    bulletX[i]=random(0,300);

    bulletY[i]=random(-30.0);

    bulletVX[i]=random(-1,+1);

    bulletVY[i]=random(1,2);

  }

}

void draw(){

  background(0);

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

    if(!die){

      bulletX[i]+=bulletVX[i];  bulletY[i]+=bulletVY[i];

    }

    fill(255,255,0);  ellipse(bulletX[i],bulletY[i],8,8);

    if(dist(x,y,bulletX[i],bulletY[i])<12){

      die=true;

    }

    if(bulletY[i]>500)  bulletY[i]=0;

  }

  if(die)  ellipse(x,y,30,30);

  else{

    fill(255);  ellipse(x,y,15,15);

    x=mouseX; y=mouseY;

  }

}

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

消除的問題
















int [][]stone={
  {1,2,2,2},
  {1,2,2,1},
  {1,2,2,1},
  {1,2,2,1},
};
void checkRow(int i){
  for(int j=0;j<4;j++){
    int now=stone[i][j];
    int combo=1;
    for(int k=j+1;k<4;k++){
      if(stone[i][k]==now){
        combo++;
      }else{
        break;
      }
    }
    if(combo>=3){
      for(int k=j;k<j+combo;k++){
        stone[i][k]=0;
      }
    }
  }
}
void check(){
  for(int i=0;i<4;i++){
    checkRow(i);
  }
  for(int j=0;j<4;j++){
    //ckeckCol(j);
  }
}
void setup(){
  size(400,400);
}
void draw(){
  for(int i=0;i<4;i++){
    for(int j=0;j<4;j++){
      if(stone[i][j]==1)  fill(0);
      else if(stone[i][j]==1)  fill(255,0,0);
      else if(stone[i][j]==2)  fill(0,255,0);
      rect(j*100,i*100,100,100);
    }
  }
}
void mousePressed(){
  checkRow(0);
  checkRow(1);
  checkRow(2);
  checkRow(3);
}
--------------------------------------------------------------
如何過關






int state=0;

void setup(){

  size(500,200);

}

float x=400,y=100,vx=0;

void draw(){

  if(state==0){

    background(255);

    x+=vx;

    ellipse(x,y,20,20);

    line(40,0,40,200);

    if(x<40) state=1;

  }else if(state==1){;

    background(255,255,0);

    fill(0);  textSize(80);  text("過關",20,100);

  }

}

void keyPressed(){

  if(keyCode==LEFT) vx=-3;

}

void keyReleased(){

  if(keyCode==LEFT) vx=0;

}


week12課程

期末作品製作

炸潛水艇

1.船和炸彈的操控

▲船隻左右移動
image(img1,x,y,300,200);//船隻大小
if(keyPressed && keyCode==LEFT)x-=1.5;//船隻向左移動
if(keyPressed && keyCode==RIGHT)x+=1.5;//船隻向右移動

▲滑鼠點擊發射
void mousePressed()
{
  N++;
  bombX[N-1]=x+50;bombY[N-1]=y+110;//每次砲彈都會從船隻發射
  bombVX[N-1]=0;bombVY[N-1]=1;
}

2.潛水艇亂數移動

▲用陣列設定潛水艇的變數
float []boatX=new float[3];//潛水艇由左至右的xy座標和速度
float []boatY=new float[3];
float []boatVX=new float[3];
float []boatX1=new float[3];//潛水艇由右至左xy座標和速度
float []boatY1=new float[3];
float []boatVX1=new float[3];

void setup()
{
    for(int i=0 ; i<3 ; i++)//亂數生成潛水艇位置和速度
  {
    boatX[i]=random(-200,-200);//潛水艇從左方產生
    boatY[i]=random(300,600);
    boatVX[i]=random(1,2);
    boatX1[i]=random(800,800);//潛水艇從右方產生
    boatY1[i]=random(300,600);
    boatVX1[i]=random(-2,-1);
  }
}

3.新增倒數計時器和結算畫面

fill(#030303);textSize(30);
text("剩餘時間:"+int(count/60)+"秒",600,50);//倒數計時器
if(count<=0)//結算畫面
{
  background(0,255,255);
  fill(0);textSize(80);text("Game Over",180,300);
  fill(0);textSize(40);text("Score: ",300,500);
}
else{
  count--;
}

▲預期製作進度

1.船隻隨機生成(完成)
2.砲彈和潛水艇的碰撞偵測(碰撞條件有問題,需做更正)
3.結束畫面(完成)
4.倒數計時器(完成)
5.分數計算(和碰撞偵測一併完成)

★目前程式碼★

float x=300,y=85;//船隻起始位置
float []bombX=new float[100];//用陣列計算砲彈生成數和速度
float []bombY=new float[100];
float []bombVX=new float[100];
float []bombVY=new float[100];
float []boatX=new float[3];//潛水艇由左至右的xy座標和速度
float []boatY=new float[3];
float []boatVX=new float[3];
float []boatX1=new float[3];//潛水艇由右至左xy座標和速度
float []boatY1=new float[3];
float []boatVX1=new float[3];
PImage img1,img2,img3,img4;
boolean []die={false,false,false};
int count=3000;
int score=0;
PFont myFont;//讀入字體
int N=0;
void setup()
{
  size(800,800);//視窗大小
  img1=loadImage("boat.png");//船
  img2=loadImage("deep1.png");//潛水艇
  img3=loadImage("deep.png");//反向潛水艇
  img4=loadImage("bomb.png");//魚雷
  for(int i=0 ; i<3 ; i++)//亂數生成潛水艇位置和速度
  {
    boatX[i]=random(-200,-200);//潛水艇從左方產生
    boatY[i]=random(300,600);
    boatVX[i]=random(1,2);
    boatX1[i]=random(800,800);//潛水艇從右方產生
    boatY1[i]=random(300,600);
    boatVX1[i]=random(-2,-1);
  }
  myFont = createFont("微軟正黑體",30);//讀入需要的中文字體
  textFont(myFont);
}
void draw()
{
  background(#C9E4F0);//天空顏色
  fill(#225BD3);rect(0,200,800,1000);//海洋顏色與調整位置
  image(img1,x,y,300,200);//船隻大小
  if(keyPressed && keyCode==LEFT)x-=1.5;//船隻向左移動
  if(keyPressed && keyCode==RIGHT)x+=1.5;//船隻向右移動
  for(int i=0;i<3;i++)
  {
    boatX[i]+=boatVX[i];
    image(img2,boatX[i],boatY[i],250,120);//由左至右潛水艇大小和座標
    if(dist(bombX[i],bombY[i],boatX[i],boatY[i])<50)
    {
      die[i]=true;
    }
    if(boatX[i]>850)//由左至右重新隨機生成
    {
      boatX[i]=-200;
      boatY[i]=random(300,750);
      boatVX[i]=random(1,2);
    }
    if(die[i])//這段判斷需改
    {
      boatX[i]=0;
      boatY[i]=random(300,750);
      boatVX[i]=random(1,2);
    }
  }
  for(int i=0;i<3;i++)
  {
    boatX1[i]+=boatVX1[i];
    image(img3,boatX1[i],boatY1[i],200,80);//由右至左潛水艇大小和座標
    if(dist(bombX[i],bombY[i],boatX1[i],boatY1[i])<50)
    {
      die[i]=true;
    }
    if(boatX1[i]<-200)//由右至左重新隨機生成
    {
      boatX1[i]=1000;
      boatY1[i]=random(300,750);
      boatVX1[i]=random(-2,-1);
    }
    if(die[i])//這段判斷需改
    {
      boatX1[i]=800;
      boatY1[i]=random(300,750);
      boatVX1[i]=random(-2,-1);
    }
  }
  for(int i=0;i<N;i++)
  {
    bombY[i]+=bombVY[i];
    image(img4,bombX[i],bombY[i],200,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);
  fill(#030303);textSize(30);
  text("剩餘時間:"+int(count/60)+"秒",600,50);//倒數計時器
  if(count<=0)//結算畫面
  {
    background(0,255,255);
    fill(0);textSize(80);text("Game Over",180,300);
    fill(0);textSize(40);text("Score: ",300,500);
  }
  else{
    count--;
  }
}
void mousePressed()
{
  N++;
  bombX[N-1]=x+50;bombY[N-1]=y+110;//每次砲彈都會從船隻發射
  bombVX[N-1]=0;bombVY[N-1]=1;
}




2021年12月13日 星期一

期末

 都在做作業所以忘記寫部落格

沒注意老師講了什麼

08160741_week10

 2.恐龍跳躍、仙人掌、分數顯示






PImage[] Dino_idle = new PImage[2];

PImage[] Saboten = new PImage[3];


int DinoAnim_Timer = 0,PlayerFrame = 2,currentFrame = 0,bad_cooldown = 0,score = 0,distance = 0;


float randomX,randomY,random;

float jump_force,gravity;


float playerX,playerY;


int[] saboten_if = new int[10];

int[] saboten_pos = new int[10];


boolean jumping = false,Onground = true;


void setup()

{

  size(1200,700);

  frameRate(24);

  

  //基本屬性

  jump_force = 40;

  gravity = 0;

  

  //恐龍的預設動畫圖片

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

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

  

  //仙人掌

  Saboten[0] = loadImage("bad_0.png");

  Saboten[1] = loadImage("bad_1.png");

  Saboten[2] = loadImage("bad_2.png");

  

  //玩家初始位置

  playerX = 100;

  playerY = 580;

}


void draw()

{

  background(255);

  display();

  ObjectMove();

  

  //跳躍處理

  if(jumping == true)

  {

    playerY -= jump_force;

    if(jump_force > 0) jump_force -= 3;

    Onground = false;

    if(playerY <= 300) jumping = false;

  }

  if(jumping == false && Onground == false)

  {

    playerY += gravity;

    gravity += 8;

    if(playerY >= 580)

    {

      playerY = 580;

      Onground = true;

      jump_force = 40;

      gravity = 0;

    }

  }

  

  //分數增加

  distance++;  

  score = distance/3;

  

  //判定產生仙人掌

  random = random(0,50);

  random = int(random);

  

  if(random == 5 && bad_cooldown == 0)

  {

    for(int i = 0;i < 10;i++)

    {

      if(saboten_if[i] == 0)

      {

        saboten_if[i] = 1;

        saboten_pos[i] = 1300;

        bad_cooldown = 30;

        break;

      }

    }

  }

  

}


void display()

{

  //分數顯示

  textSize(80);

  fill(0); 

  String m_score = nf(score, 4);

  text(m_score,950,100);

  

  //恐龍動畫

  DinoAnim_Timer++;  

  imageMode(CENTER);

  if(DinoAnim_Timer % PlayerFrame == 0)

  {

    currentFrame++;

    if(currentFrame == PlayerFrame) currentFrame = 0;

    DinoAnim_Timer = 0;

  }

  image(Dino_idle[currentFrame],playerX,playerY);

  

  //地面

  stroke(0);

  line(0,600,1200,600);

  

  //仙人掌

  for(int i = 0;i < 10;i++)

  {

    if(saboten_if[i] != 0)

    {

        image(Saboten[0],saboten_pos[i],580);

      

    }

  }

}


void ObjectMove()

{

  //仙人掌移動

  for(int i =0;i < 10;i++)

  {

    if(saboten_pos[i] < -50) saboten_if[i] = 0;

    saboten_pos[i] -= 20;

  }

  if(bad_cooldown > 0) bad_cooldown--;

}


void keyPressed()

{

  if(key == 32)

  {

    if(Onground)

    {

      jumping = true;

      Onground = false;

    }

  }

}


2.下次規劃

初步的碰撞檢測、地面開始有變化、不同階段的關卡、恐龍的速度變化

天文社社員招募中week12

     

期末作品進度2!


1.做其他形狀(L)





程式如下:

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);
}
boolean Lsafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x]==0 && grid[y+2][x]==0 && grid[y+2][x+1]==0)return true;
  return false;
}
void L(int x,int y){
  fill(255,165,79);
  if(Lsafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*x    ,25*(y+2),25,25);
    rect(25*(x+1),25*(y+2),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 if(grid[y][x]==3)fill(255,165,79);
      else fill(0);
      rect(x*25,y*25,25,25);
      if(x>300)x=-x;
      if(x<0)x=-x; 
    }
  }
  L(nowX,nowY);
  if(frameCount%20==0){
    //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
    //else{....}
    if(Lsafe(nowX,nowY+1))nowY++;
    else{
      grid[nowY][nowX]=3;
      grid[nowY+1][nowX]=3;
      grid[nowY+2][nowX]=3;
      grid[nowY+2][nowX+1]=3;
      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++; }
}


2.做其他形狀(O)




程式如下:


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);
}
boolean Lsafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x]==0 && grid[y+2][x]==0 && grid[y+2][x+1]==0)return true;
  return false;
}
void L(int x,int y){
  fill(255,165,79);
  if(Lsafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*x    ,25*(y+2),25,25);
    rect(25*(x+1),25*(y+2),25,25);
  }
}
boolean RECTsafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x+1]==0 && grid[y+1][x]==0 && grid[y][x+1]==0)return true;
  return false;
}
void RECT(int x,int y){
  fill(238,230,133);
  if(RECTsafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*(x+1),25*y    ,25,25);
    rect(25*(x+1),25*(y+1),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 if(grid[y][x]==3)fill(255,165,79);
      else if(grid[y][x]==4)fill(238,230,133);
      else fill(0);
      rect(x*25,y*25,25,25);
      if(x>300)x=-x;
      if(x<0)x=-x; 
    }
  }

  RECT(nowX,nowY);
  if(frameCount%20==0){
    //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
    //else{....}
    if(RECTsafe(nowX,nowY+1))nowY++;
    else{
      grid[nowY][nowX]=4;
      grid[nowY+1][nowX]=4;
      grid[nowY][nowX+1]=4;
      grid[nowY+1][nowX+1]=4;
      nowX=1;nowY=3;
    }
  }
}
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++; }
}



3.做其他形狀(I)

 


程式如下:


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);
}
boolean Lsafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x]==0 && grid[y+2][x]==0 && grid[y+2][x+1]==0)return true;
  return false;
}
void L(int x,int y){
  fill(255,165,79);
  if(Lsafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*x    ,25*(y+2),25,25);
    rect(25*(x+1),25*(y+2),25,25);
  }
}
boolean Osafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x+1]==0 && grid[y+1][x]==0 && grid[y][x+1]==0)return true;
  return false;
}
void O(int x,int y){
  fill(238,230,133);
  if(Osafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*(x+1),25*y    ,25,25);
    rect(25*(x+1),25*(y+1),25,25);
  }
}
boolean Isafe(int x,int y){
  if(grid[y][x]==0 && grid[y][x+1]==0 && grid[y][x+2]==0 && grid[y][x+3]==0)return true;
  return false;
}
void I(int x,int y){
  fill(176,226,255);
  if(Isafe(x,y) ){
    rect(25*x    ,25*y,25,25);
    rect(25*(x+1),25*y,25,25);
    rect(25*(x+2),25*y,25,25);
    rect(25*(x+3),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 if(grid[y][x]==3)fill(255,165,79);
      else if(grid[y][x]==4)fill(238,230,133);
      else if(grid[y][x]==5)fill(176,226,255);
      else fill(0);
      rect(x*25,y*25,25,25);
      if(x>300)x=-x;
      if(x<0)x=-x; 
    }
  }
  I(nowX,nowY);
  if(frameCount%20==0){
    //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
    //else{....}
    if(Isafe(nowX,nowY+1))nowY++;
    else{
      grid[nowY][nowX]=5;
      grid[nowY][nowX+1]=5;
      grid[nowY][nowX+2]=5;
      grid[nowY][nowX+3]=5;
      nowX=1;nowY=3;
    }
  }
}
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++; }
}

  

4.做其他形狀(J)







程式如下:


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);
}
boolean Lsafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x]==0 && grid[y+2][x]==0 && grid[y+2][x+1]==0)return true;
  return false;
}
void L(int x,int y){
  fill(255,165,79);
  if(Lsafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*x    ,25*(y+2),25,25);
    rect(25*(x+1),25*(y+2),25,25);
  }
}
boolean Osafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x+1]==0 && grid[y+1][x]==0 && grid[y][x+1]==0)return true;
  return false;
}
void O(int x,int y){
  fill(238,230,133);
  if(Osafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*(x+1),25*y    ,25,25);
    rect(25*(x+1),25*(y+1),25,25);
  }
}
boolean Isafe(int x,int y){
  if(grid[y][x]==0 && grid[y][x+1]==0 && grid[y][x+2]==0 && grid[y][x+3]==0)return true;
  return false;
}
void I(int x,int y){
  fill(176,226,255);
  if(Isafe(x,y) ){
    rect(25*x    ,25*y,25,25);
    rect(25*(x+1),25*y,25,25);
    rect(25*(x+2),25*y,25,25);
    rect(25*(x+3),25*y,25,25);
  }
}
boolean Jsafe(int x,int y){
  if(grid[y][x+1]==0 && grid[y+1][x+1]==0 && grid[y+2][x+1]==0 && grid[y+2][x]==0)return true;
  return false;
}
void J(int x,int y){
  fill(0,0,139);
  if(Jsafe(x,y) ){
    rect(25*x    ,25*(y+2),25,25);
    rect(25*(x+1),25*(y+1),25,25);
    rect(25*(x+1),25*(y+2),25,25);
    rect(25*(x+1),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 if(grid[y][x]==3)fill(255,165,79);
      else if(grid[y][x]==4)fill(238,230,133);
      else if(grid[y][x]==5)fill(176,226,255);
      else if(grid[y][x]==6)fill(0,0,139);
      else fill(0);
      rect(x*25,y*25,25,25);
      if(x>300)x=-x;
      if(x<0)x=-x; 
    }
  }
  J(nowX,nowY);
  if(frameCount%20==0){
    //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
    //else{....}
    if(Jsafe(nowX,nowY+1))nowY++;
    else{
      grid[nowY+2][nowX]=6;
      grid[nowY][nowX+1]=6;
      grid[nowY+1][nowX+1]=6;
      grid[nowY+2][nowX+1]=6;
      nowX=1;nowY=3;
    }
  }
}
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++; }
}

5.做其他形狀(T)




程式如下:


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);
}
boolean Lsafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x]==0 && grid[y+2][x]==0 && grid[y+2][x+1]==0)return true;
  return false;
}
void L(int x,int y){
  fill(255,165,79);
  if(Lsafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*x    ,25*(y+2),25,25);
    rect(25*(x+1),25*(y+2),25,25);
  }
}
boolean Osafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x+1]==0 && grid[y+1][x]==0 && grid[y][x+1]==0)return true;
  return false;
}
void O(int x,int y){
  fill(238,230,133);
  if(Osafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*(x+1),25*y    ,25,25);
    rect(25*(x+1),25*(y+1),25,25);
  }
}
boolean Isafe(int x,int y){
  if(grid[y][x]==0 && grid[y][x+1]==0 && grid[y][x+2]==0 && grid[y][x+3]==0)return true;
  return false;
}
void I(int x,int y){
  fill(176,226,255);
  if(Isafe(x,y) ){
    rect(25*x    ,25*y,25,25);
    rect(25*(x+1),25*y,25,25);
    rect(25*(x+2),25*y,25,25);
    rect(25*(x+3),25*y,25,25);
  }
}
boolean Jsafe(int x,int y){
  if(grid[y][x+1]==0 && grid[y+1][x+1]==0 && grid[y+2][x+1]==0 && grid[y+2][x]==0)return true;
  return false;
}
void J(int x,int y){
  fill(0,0,139);
  if(Jsafe(x,y) ){
    rect(25*x    ,25*(y+2),25,25);
    rect(25*(x+1),25*(y+1),25,25);
    rect(25*(x+1),25*(y+2),25,25);
    rect(25*(x+1),25*y,25,25);
  }
}
boolean Tsafe(int x,int y){
  if(grid[y][x]==0 && grid[y][x+1]==0 && grid[y][x+2]==0 && grid[y+1][x+1]==0)return true;
  return false;
}
void T(int x,int y){
  fill(205,181,205);
  if(Tsafe(x,y) ){
    rect(25*x    ,25*y,25,25);
    rect(25*(x+1),25*y,25,25);
    rect(25*(x+2),25*y,25,25);
    rect(25*(x+1),25*(y+1),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 if(grid[y][x]==3)fill(255,165,79);
      else if(grid[y][x]==4)fill(238,230,133);
      else if(grid[y][x]==5)fill(176,226,255);
      else if(grid[y][x]==6)fill(0,0,139);
      else if(grid[y][x]==7)fill(205,181,205);
      else fill(0);
      rect(x*25,y*25,25,25);
      if(x>300)x=-x;
      if(x<0)x=-x; 
    }
  }
  T(nowX,nowY);
  if(frameCount%20==0){
    //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
    //else{....}
    if(Tsafe(nowX,nowY+1))nowY++;
    else{
      grid[nowY][nowX]=7;
      grid[nowY][nowX+1]=7;
      grid[nowY][nowX+2]=7;
      grid[nowY+1][nowX+1]=7;
      nowX=1;nowY=3;
    }
  }
}
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++; }
}


6.做其他形狀(S)






程式如下:


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);
}
boolean Lsafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x]==0 && grid[y+2][x]==0 && grid[y+2][x+1]==0)return true;
  return false;
}
void L(int x,int y){
  fill(255,165,79);
  if(Lsafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*x    ,25*(y+2),25,25);
    rect(25*(x+1),25*(y+2),25,25);
  }
}
boolean Osafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x+1]==0 && grid[y+1][x]==0 && grid[y][x+1]==0)return true;
  return false;
}
void O(int x,int y){
  fill(238,230,133);
  if(Osafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*(x+1),25*y    ,25,25);
    rect(25*(x+1),25*(y+1),25,25);
  }
}
boolean Isafe(int x,int y){
  if(grid[y][x]==0 && grid[y][x+1]==0 && grid[y][x+2]==0 && grid[y][x+3]==0)return true;
  return false;
}
void I(int x,int y){
  fill(176,226,255);
  if(Isafe(x,y) ){
    rect(25*x    ,25*y,25,25);
    rect(25*(x+1),25*y,25,25);
    rect(25*(x+2),25*y,25,25);
    rect(25*(x+3),25*y,25,25);
  }
}
boolean Jsafe(int x,int y){
  if(grid[y][x+1]==0 && grid[y+1][x+1]==0 && grid[y+2][x+1]==0 && grid[y+2][x]==0)return true;
  return false;
}
void J(int x,int y){
  fill(0,0,139);
  if(Jsafe(x,y) ){
    rect(25*x    ,25*(y+2),25,25);
    rect(25*(x+1),25*(y+1),25,25);
    rect(25*(x+1),25*(y+2),25,25);
    rect(25*(x+1),25*y,25,25);
  }
}
boolean Tsafe(int x,int y){
  if(grid[y][x]==0 && grid[y][x+1]==0 && grid[y][x+2]==0 && grid[y+1][x+1]==0)return true;
  return false;
}
void T(int x,int y){
  fill(205,181,205);
  if(Tsafe(x,y) ){
    rect(25*x    ,25*y,25,25);
    rect(25*(x+1),25*y,25,25);
    rect(25*(x+2),25*y,25,25);
    rect(25*(x+1),25*(y+1),25,25);
  }
}
boolean Ssafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x]==0 && grid[y+1][x+1]==0 && grid[y+2][x+1]==0)return true;
  return false;
}
void S(int x,int y){
  fill(193,255,193);
  if(Ssafe(x,y) ){
    rect(25*x    ,25*y,25,25);
    rect(25*x,25*(y+1),25,25);
    rect(25*(x+1),25*(y+1),25,25);
    rect(25*(x+1),25*(y+2),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 if(grid[y][x]==3)fill(255,165,79);
      else if(grid[y][x]==4)fill(238,230,133);
      else if(grid[y][x]==5)fill(176,226,255);
      else if(grid[y][x]==6)fill(0,0,139);
      else if(grid[y][x]==7)fill(205,181,205);
      else if(grid[y][x]==8)fill(193,255,193);
      else fill(0);
      rect(x*25,y*25,25,25);
      if(x>300)x=-x;
      if(x<0)x=-x; 
    }
  }
  S(nowX,nowY);
  if(frameCount%20==0){
    //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
    //else{....}
    if(Ssafe(nowX,nowY+1))nowY++;
    else{
      grid[nowY][nowX]=8;
      grid[nowY+1][nowX+1]=8;
      grid[nowY+2][nowX+1]=8;
      grid[nowY+1][nowX+0]=8;
      nowX=1;nowY=3;
    }
  }
}
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++; }
}


7.做其他形狀(Z)






程式如下:


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);
}
boolean Lsafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x]==0 && grid[y+2][x]==0 && grid[y+2][x+1]==0)return true;
  return false;
}
void L(int x,int y){
  fill(255,165,79);
  if(Lsafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*x    ,25*(y+2),25,25);
    rect(25*(x+1),25*(y+2),25,25);
  }
}
boolean Osafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x+1]==0 && grid[y+1][x]==0 && grid[y][x+1]==0)return true;
  return false;
}
void O(int x,int y){
  fill(238,230,133);
  if(Osafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*(x+1),25*y    ,25,25);
    rect(25*(x+1),25*(y+1),25,25);
  }
}
boolean Isafe(int x,int y){
  if(grid[y][x]==0 && grid[y][x+1]==0 && grid[y][x+2]==0 && grid[y][x+3]==0)return true;
  return false;
}
void I(int x,int y){
  fill(176,226,255);
  if(Isafe(x,y) ){
    rect(25*x    ,25*y,25,25);
    rect(25*(x+1),25*y,25,25);
    rect(25*(x+2),25*y,25,25);
    rect(25*(x+3),25*y,25,25);
  }
}
boolean Jsafe(int x,int y){
  if(grid[y][x+1]==0 && grid[y+1][x+1]==0 && grid[y+2][x+1]==0 && grid[y+2][x]==0)return true;
  return false;
}
void J(int x,int y){
  fill(0,0,139);
  if(Jsafe(x,y) ){
    rect(25*x    ,25*(y+2),25,25);
    rect(25*(x+1),25*(y+1),25,25);
    rect(25*(x+1),25*(y+2),25,25);
    rect(25*(x+1),25*y,25,25);
  }
}
boolean Tsafe(int x,int y){
  if(grid[y][x]==0 && grid[y][x+1]==0 && grid[y][x+2]==0 && grid[y+1][x+1]==0)return true;
  return false;
}
void T(int x,int y){
  fill(205,181,205);
  if(Tsafe(x,y) ){
    rect(25*x    ,25*y,25,25);
    rect(25*(x+1),25*y,25,25);
    rect(25*(x+2),25*y,25,25);
    rect(25*(x+1),25*(y+1),25,25);
  }
}
boolean Ssafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x]==0 && grid[y+1][x+1]==0 && grid[y+2][x+1]==0)return true;
  return false;
}
void S(int x,int y){
  fill(193,255,193);
  if(Ssafe(x,y) ){
    rect(25*x    ,25*y,25,25);
    rect(25*x,25*(y+1),25,25);
    rect(25*(x+1),25*(y+1),25,25);
    rect(25*(x+1),25*(y+2),25,25);
  }
}
boolean Zsafe(int x,int y){
  if(grid[y+1][x+1]==0 && grid[y+2][x+1]==0 && grid[y+2][x]==0 && grid[y+3][x]==0)return true;
  return false;
}
void Z(int x,int y){
  fill(250,128,124);
  if(Zsafe(x,y) ){
    rect(25*x    ,25*(y+3),25,25);
    rect(25*x,25*(y+2),25,25);
    rect(25*(x+1),25*(y+1),25,25);
    rect(25*(x+1),25*(y+2),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 if(grid[y][x]==3)fill(255,165,79);
      else if(grid[y][x]==4)fill(238,230,133);
      else if(grid[y][x]==5)fill(176,226,255);
      else if(grid[y][x]==6)fill(0,0,139);
      else if(grid[y][x]==7)fill(205,181,205);
      else if(grid[y][x]==8)fill(193,255,193);
      else if(grid[y][x]==9)fill(250,128,124);
      else fill(0);
      rect(x*25,y*25,25,25);
      if(x>300)x=-x;
      if(x<0)x=-x; 
    }
  }
  Z(nowX,nowY);
  if(frameCount%20==0){
    //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
    //else{....}
    if(Zsafe(nowX,nowY+1))nowY++;
    else{
      grid[nowY+3][nowX]=9;
      grid[nowY+2][nowX]=9;
      grid[nowY+1][nowX+1]=9;
      grid[nowY+2][nowX+1]=9;
      nowX=1;nowY=3;
    }
  }
}
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++; }
}


8.這周全部程式(未刪減版)


程式如下:

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);
}
boolean Lsafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x]==0 && grid[y+2][x]==0 && grid[y+2][x+1]==0)return true;
  return false;
}
void L(int x,int y){
  fill(255,165,79);
  if(Lsafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*x    ,25*(y+2),25,25);
    rect(25*(x+1),25*(y+2),25,25);
  }
}
boolean Osafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x+1]==0 && grid[y+1][x]==0 && grid[y][x+1]==0)return true;
  return false;
}
void O(int x,int y){
  fill(238,230,133);
  if(Osafe(x,y) ){
    rect(25*x    ,25*y    ,25,25);
    rect(25*x    ,25*(y+1),25,25);
    rect(25*(x+1),25*y    ,25,25);
    rect(25*(x+1),25*(y+1),25,25);
  }
}
boolean Isafe(int x,int y){
  if(grid[y][x]==0 && grid[y][x+1]==0 && grid[y][x+2]==0 && grid[y][x+3]==0)return true;
  return false;
}
void I(int x,int y){
  fill(176,226,255);
  if(Isafe(x,y) ){
    rect(25*x    ,25*y,25,25);
    rect(25*(x+1),25*y,25,25);
    rect(25*(x+2),25*y,25,25);
    rect(25*(x+3),25*y,25,25);
  }
}
boolean Jsafe(int x,int y){
  if(grid[y][x+1]==0 && grid[y+1][x+1]==0 && grid[y+2][x+1]==0 && grid[y+2][x]==0)return true;
  return false;
}
void J(int x,int y){
  fill(0,0,139);
  if(Jsafe(x,y) ){
    rect(25*x    ,25*(y+2),25,25);
    rect(25*(x+1),25*(y+1),25,25);
    rect(25*(x+1),25*(y+2),25,25);
    rect(25*(x+1),25*y,25,25);
  }
}
boolean Tsafe(int x,int y){
  if(grid[y][x]==0 && grid[y][x+1]==0 && grid[y][x+2]==0 && grid[y+1][x+1]==0)return true;
  return false;
}
void T(int x,int y){
  fill(205,181,205);
  if(Tsafe(x,y) ){
    rect(25*x    ,25*y,25,25);
    rect(25*(x+1),25*y,25,25);
    rect(25*(x+2),25*y,25,25);
    rect(25*(x+1),25*(y+1),25,25);
  }
}
boolean Ssafe(int x,int y){
  if(grid[y][x]==0 && grid[y+1][x]==0 && grid[y+1][x+1]==0 && grid[y+2][x+1]==0)return true;
  return false;
}
void S(int x,int y){
  fill(193,255,193);
  if(Ssafe(x,y) ){
    rect(25*x    ,25*y,25,25);
    rect(25*x,25*(y+1),25,25);
    rect(25*(x+1),25*(y+1),25,25);
    rect(25*(x+1),25*(y+2),25,25);
  }
}
boolean Zsafe(int x,int y){
  if(grid[y+1][x+1]==0 && grid[y+2][x+1]==0 && grid[y+2][x]==0 && grid[y+3][x]==0)return true;
  return false;
}
void Z(int x,int y){
  fill(250,128,124);
  if(Zsafe(x,y) ){
    rect(25*x    ,25*(y+3),25,25);
    rect(25*x,25*(y+2),25,25);
    rect(25*(x+1),25*(y+1),25,25);
    rect(25*(x+1),25*(y+2),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 if(grid[y][x]==3)fill(255,165,79);
      else if(grid[y][x]==4)fill(238,230,133);
      else if(grid[y][x]==5)fill(176,226,255);
      else if(grid[y][x]==6)fill(0,0,139);
      else if(grid[y][x]==7)fill(205,181,205);
      else if(grid[y][x]==8)fill(193,255,193);
      else if(grid[y][x]==9)fill(250,128,124);
      else fill(0);
      rect(x*25,y*25,25,25);
      if(x>300)x=-x;
      if(x<0)x=-x; 
    }
  }
  //L(nowX,nowY);
  //if(frameCount%20==0){
  //  //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
  //  //else{....}
  //  if(Lsafe(nowX,nowY+1))nowY++;
  //  else{
  //    grid[nowY][nowX]=3;
  //    grid[nowY+1][nowX]=3;
  //    grid[nowY+2][nowX]=3;
  //    grid[nowY+2][nowX+1]=3;
  //    nowX=6;nowY=1;
  //  }
  //}
  //O(nowX,nowY);
  //if(frameCount%20==0){
  //  //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
  //  //else{....}
  //  if(Osafe(nowX,nowY+1))nowY++;
  //  else{
  //    grid[nowY][nowX]=4;
  //    grid[nowY+1][nowX]=4;
  //    grid[nowY][nowX+1]=4;
  //    grid[nowY+1][nowX+1]=4;
  //    nowX=1;nowY=3;
  //  }
  //}
  //I(nowX,nowY);
  //if(frameCount%20==0){
  //  //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
  //  //else{....}
  //  if(Isafe(nowX,nowY+1))nowY++;
  //  else{
  //    grid[nowY][nowX]=5;
  //    grid[nowY][nowX+1]=5;
  //    grid[nowY][nowX+2]=5;
  //    grid[nowY][nowX+3]=5;
  //    nowX=1;nowY=3;
  //  }
  //}
  //J(nowX,nowY);
  //if(frameCount%20==0){
  //  //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
  //  //else{....}
  //  if(Jsafe(nowX,nowY+1))nowY++;
  //  else{
  //    grid[nowY+2][nowX]=6;
  //    grid[nowY][nowX+1]=6;
  //    grid[nowY+1][nowX+1]=6;
  //    grid[nowY+2][nowX+1]=6;
  //    nowX=1;nowY=3;
  //  }
  //}
  //T(nowX,nowY);
  //if(frameCount%20==0){
  //  //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
  //  //else{....}
  //  if(Tsafe(nowX,nowY+1))nowY++;
  //  else{
  //    grid[nowY][nowX]=7;
  //    grid[nowY][nowX+1]=7;
  //    grid[nowY][nowX+2]=7;
  //    grid[nowY+1][nowX+1]=7;
  //    nowX=1;nowY=3;
  //  }
  //}
  //S(nowX,nowY);
  //if(frameCount%20==0){
  //  //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
  //  //else{....}
  //  if(Ssafe(nowX,nowY+1))nowY++;
  //  else{
  //    grid[nowY][nowX]=8;
  //    grid[nowY+1][nowX+1]=8;
  //    grid[nowY+2][nowX+1]=8;
  //    grid[nowY+1][nowX+0]=8;
  //    nowX=1;nowY=3;
  //  }
  //}
  Z(nowX,nowY);
  if(frameCount%20==0){
    //if( testSafe(nowShape, nowY+1, nowX, nowAngle) ) nowY++;
    //else{....}
    if(Zsafe(nowX,nowY+1))nowY++;
    else{
      grid[nowY+3][nowX]=9;
      grid[nowY+2][nowX]=9;
      grid[nowY+1][nowX+1]=9;
      grid[nowY+2][nowX+1]=9;
      nowX=1;nowY=3;
    }
  }
}
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++; }
}



顏色資料庫



   (70,130,180)

  (250,128,124)

 (255,165,79)

(176,226,255)

 (176,226,255)

(205,181,205)

(193,255,193)

(250,128,124)



🍮已經寫250行囉🍩