顯示具有 08160741_何晴為 標籤的文章。 顯示所有文章
顯示具有 08160741_何晴為 標籤的文章。 顯示所有文章

2021年12月27日 星期一

08160741_week12

 1.雲朵、快速落地、關卡平衡

PImage[] Dino_idle = new PImage[2];
PImage[] Dino_land = new PImage[3];
PImage Dino_die;
PImage cloud;
PImage[] Saboten = new PImage[3];
PImage Game_Over;

int DinoAnim_Timer = 0,PlayerFrame = 2,currentFrame = 0,bad_cooldown = 0,c_bad_cooldown = 0,score = 0,distance = 0,stage_lv = 0,LandingCD = 0;
int failednumber = 0;

float randomX,randomY,random;
float jump_force,gravity;

float playerX,playerY;
float c_playerX,c_playerY;

int cloud_posX = -100,cloud_posY = -100;

int[] saboten_if = new int[10];
int[] saboten_pos = new int[10];

int[] cloud_if = new int[10];
int[][] cloud_pos = new int[10][2];


float[] m_CollisionX = new float[10];
float[] m_CollisionY = new float[10];
float[] s_CollisionX = new float[10];
float[] s_CollisionY = new float[10];

boolean isDebug = false;

boolean jumping = false,Onground = true;
boolean isgameover = false;
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");
  
  //恐龍的落地動畫圖片
  Dino_land[0] = loadImage("dino_land_0.png");
  Dino_land[1] = loadImage("dino_land_1.png");
  Dino_land[2] = loadImage("dino_land_2.png");
  
  //恐龍的死亡圖片
  Dino_die = loadImage("dino_die_0.png");
  
  //仙人掌
  Saboten[0] = loadImage("bad_0.png"); //65x100
  Saboten[1] = loadImage("bad_1.png"); //75x110
  Saboten[2] = loadImage("bad_2.png"); //35x120
  
  //雲
  cloud = loadImage("cloud_0.png");
  //遊戲結束
  Game_Over = loadImage("game_over_0.png");
  
  //玩家初始位置
  playerX = 100;
  playerY = 580;
}

void draw()
{
   background(255);
   display();
  if(isgameover == false)
  {
    ObjectMove();
    
    //跳躍處理      
    if(LandingCD > 0)
    {
      LandingCD -= (stage_lv + 1);
      if(LandingCD < 0) LandingCD = 0;
    }
    if(LandingCD == 0)
    {
      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/2;
    
    //根據分數進行階段提升
    if(score > 100) stage_lv = 1;
    if(score > 500) stage_lv = 2;
    if(score > 1000) stage_lv = 3;
    
    //判定產生仙人掌
    random = random(0,10);
    random = int(random);
    
    if(random == 1 && bad_cooldown == 0)
    {
      for(int i = 0;i < 10;i++)
      {
        if(saboten_if[i] == 0)
        {
          random = random(0,3);
          random = int(random);
          if(random == 0)
            saboten_if[i] = 1;
          if(random == 1)
            saboten_if[i] = 2;
          if(random == 2)
            saboten_if[i] = 3;
            
          saboten_pos[i] = 1300;
          
          if(stage_lv == 0) bad_cooldown = 30;
          if(stage_lv == 1) bad_cooldown = 25;
          if(stage_lv == 2) bad_cooldown = 15;
          if(stage_lv == 3) bad_cooldown = 15;
          
          break;
        }
      }
    }
    else failednumber++;
    
    //判定生成雲朵
    random = random(0,25);
    random = int(random);
    
    if(c_bad_cooldown == 0)
    {
      for(int i = 0;i < 10;i++)
      {
        if(random == 5)
        {
          if(cloud_if[i] == 0) cloud_if[i] = 1;
          else continue;
        }
        for(int j = 0;j < 2;j++)
        {
          if(cloud_if[i] == 1)
          {
            if(cloud_pos[i][j] == 0 && j == 0) cloud_pos[i][j] = 1300;
            if(cloud_pos[i][j] == 0 && j == 1)
            {
              random = random(200,400);
              cloud_pos[i][j] = int(random);
              c_bad_cooldown = 60;
              
              break;
            }            
          }
        }
        if(cloud_if[i] == 1) break;
      }
    }
    
    
  }
}

void display()
{ 
  //debug
  if(isDebug == true) debug(); 
  //雲
  for(int i = 0;i < 10;i++)
  {
    if(cloud_if[i] == 0) continue; 
    for(int j = 0;j < 2;j++)
    { 
      if(j == 0)
      {
        cloud_posX = cloud_pos[i][j];
        continue;
      }
      if(j == 1)
      {
        cloud_posY = cloud_pos[i][j];
        image(cloud,cloud_posX,cloud_posY);
      }
    }
  }
  
  //遊戲結束
  if(isgameover) image(Game_Over,600,350);
  
  
  //分數顯示
  textSize(80);
  fill(0); 
  String m_score = nf(score, 4);
  text(m_score,950,100);
  
  //text(cloud_pos[0][0],950,300);
  //text(cloud_pos[0][1],950,400);
  
  //恐龍動畫
  DinoAnim_Timer++;  
  imageMode(CENTER);
  if(isgameover)
  {
    image(Dino_die,playerX,playerY);
  }
  else if(LandingCD == 0)
  {
    if(DinoAnim_Timer % PlayerFrame == 0)
    {
      currentFrame++;
      if(currentFrame == PlayerFrame) currentFrame = 0;
      DinoAnim_Timer = 0;
    }
    image(Dino_idle[currentFrame],playerX,playerY);
  }
  else if(LandingCD > 0)
  {
    if(LandingCD > LandingCD/2)
    {
      image(Dino_land[0],playerX,playerY);
    }
    if(LandingCD > (LandingCD/2)/2)
    {
      image(Dino_land[1],playerX,playerY);
    }
    if(LandingCD > 0)
    {
      image(Dino_land[2],playerX,playerY);
    }
  }
  
  //地面
  stroke(0);
  line(0,600,1200,600);
  
  //仙人掌
  for(int i = 0;i < 10;i++)
  {
    if(saboten_if[i] != 0)
    {
        if(saboten_if[i] == 1) image(Saboten[0],saboten_pos[i],580);
        if(saboten_if[i] == 2) image(Saboten[1],saboten_pos[i],580);
        if(saboten_if[i] == 3) image(Saboten[2],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 * ((stage_lv/1.8) + 1);
  }
  if(bad_cooldown > 0) bad_cooldown--;
  
  CollisionDet();
  
  for(int i = 0;i < 10;i++)
  {
    if(cloud_if[i] == 0) continue;
    for(int j = 0;j < 2;j++)
    {  
      if(j == 1) cloud_pos[i][j] = 0;
      if(j == 0)
      {
        if(cloud_pos[i][j] < -100)
        {
          cloud_pos[i][j] = 0;
          cloud_if[i] = 0;
          continue;
        }
        
        
        cloud_pos[i][j] -= 20;
        break;
      }
    }
  }
  if(c_bad_cooldown > 0) c_bad_cooldown--;
}

void keyPressed()
{
  if(key == 32)
  {
    if(Onground && LandingCD == 0)
    {
      jumping = true;
      Onground = false;
    }
    
    if(isgameover == true)
    {
      restart();
    }  
    return;

  }
  
  if(key == CODED)
  {
    if(keyCode == DOWN)
    {
      if(jumping) jumping = false;
      if(!Onground) Onground = true;
      
      LandingCD = 8 - stage_lv;
      
      jump_force = 40;
      gravity = 0;
      playerY = 580;
    }
    return;
  }
  /*if(key == 's')
  {
    stop();
  }*/
}

void CollisionDet()
{
  c_playerX = playerX;
  c_playerY = playerY;
  
  for(int i = 0;i < 10;i++)
  {
    if(saboten_if[i] == 1)
    {
      s_CollisionX[i] = saboten_pos[i] - 32.5 + 5;
      s_CollisionY[i] = 580 - 50;
      m_CollisionX[i] = saboten_pos[i] + 32.5 - 5;
      m_CollisionY[i] = 580 + 50;
    }
    if(saboten_if[i] == 2)
    {
      s_CollisionX[i] = saboten_pos[i] - 37.5 + 8;
      s_CollisionY[i] = 580 - 55;
      m_CollisionX[i] = saboten_pos[i] + 37.5 - 8;
      m_CollisionY[i] = 580 + 55;
    }
    if(saboten_if[i] == 3)
    {
      s_CollisionX[i] = saboten_pos[i] - 17.5 + 3;
      s_CollisionY[i] = 580 - 60;
      m_CollisionX[i] = saboten_pos[i] + 17.5 - 3;
      m_CollisionY[i] = 580 + 60;
    }
    
    if(saboten_if[i] != 0 && c_playerX + 30 >= s_CollisionX[i] && c_playerX + 30 <= m_CollisionX[i] && c_playerY + 40 >= s_CollisionY[i] && c_playerY + 40 <= m_CollisionY[i])
    {
         //撞到了
      isgameover = true;   
      
          textSize(40);
      text(c_playerX,0,100);
      text(c_playerY,0,200);
      
      
      text(s_CollisionX[i],200,100);
      text(m_CollisionX[i],200,200);
      text(s_CollisionY[i],200,300);
      text(m_CollisionY[i],200,400); 
         
    }
    else if(saboten_if[i] != 0 && c_playerX - 30 >= s_CollisionX[i] && c_playerX - 30 <= m_CollisionX[i] && c_playerY + 40 >= s_CollisionY[i] && c_playerY + 40 <= m_CollisionY[i])
    {
      //撞到了
      isgameover = true;    
      
          textSize(40);
      text(c_playerX,0,100);
      text(c_playerY,0,200);
      
      text(s_CollisionX[i],200,100);
      text(m_CollisionX[i],200,200);
      text(s_CollisionY[i],200,300);
      text(m_CollisionY[i],200,400); 
    }
  }
  
}

void restart()
{
  for(int i = 0;i < 10;i++)
  {
    saboten_if[i] = 0;
    saboten_pos[i] = 0;
    
  }
  distance = 0;
  stage_lv = 0;  
  
  for(int i = 0;i < 10;i++)
  {
    saboten_if[i] = 0;
    saboten_pos[i] = 0;
    
    cloud_if[i] = 0;
  }
  
  for(int i = 0;i < 10;i++)
  {
    for(int j = 0;j < 2;j++)
    {
      cloud_pos[i][j] = 0;
    }
  }
  
  
  isgameover = false;
}

void debug()
{
    textSize(40);
    text(c_playerX,0,100);
    text(c_playerY,0,200);
    
    text(failednumber,400,100);
}

2.預計進度:階段提高提示、地面些微變化、空中障礙、場景裝飾

2021年12月20日 星期一

08160741_week11

 1.場景階段、遊戲結束畫面、debug介面、碰撞處理、不同仙人掌(共3個)



PImage[] Dino_idle = new PImage[2];
PImage[] Saboten = new PImage[3];
PImage Game_Over;

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

float randomX,randomY,random;
float jump_force,gravity;

float playerX,playerY;
float c_playerX,c_playerY;

int[] saboten_if = new int[10];
int[] saboten_pos = new int[10];

float[] m_CollisionX = new float[10];
float[] m_CollisionY = new float[10];
float[] s_CollisionX = new float[10];
float[] s_CollisionY = new float[10];

boolean isDebug = false;

boolean jumping = false,Onground = true;
boolean isgameover = false;
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"); //65x100
  Saboten[1] = loadImage("bad_1.png"); //75x110
  Saboten[2] = loadImage("bad_2.png"); //35x120
  
  //遊戲結束
  Game_Over = loadImage("game_over_0.png");
  
  //玩家初始位置
  playerX = 100;
  playerY = 580;
}

void draw()
{
  if(isgameover == false)
  {
    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;
      }
    }
  }
  else image(Game_Over,600,350);
  
  //分數增加
  distance++;  
  score = distance/3;
  
  //根據分數進行階段提升
  if(score > 100) stage_lv = 1;
  if(score > 500) stage_lv = 2;
  
  //判定產生仙人掌
  random = random(0,50/(stage_lv + 1));
  random = int(random);
  
  if(random == 5 && bad_cooldown == 0)
  {
    for(int i = 0;i < 10;i++)
    {
      if(saboten_if[i] == 0)
      {
        random = random(0,3);
        random = int(random);
        if(random == 0)
          saboten_if[i] = 1;
        if(random == 1)
          saboten_if[i] = 2;
        if(random == 2)
          saboten_if[i] = 3;
          
        saboten_pos[i] = 1300;
        
        if(stage_lv == 0) bad_cooldown = 30;
        if(stage_lv == 1) bad_cooldown = 18;
        if(stage_lv == 2) bad_cooldown = 12;
        
        break;
      }
    }
  }
  else failednumber++;
}

void display()
{ 
  //debug
  if(isDebug == true) debug();
  
  //分數顯示
  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)
    {
        if(saboten_if[i] == 1) image(Saboten[0],saboten_pos[i],580);
        if(saboten_if[i] == 2) image(Saboten[1],saboten_pos[i],580);
        if(saboten_if[i] == 3) image(Saboten[2],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 * ((stage_lv/1.8) + 1);
  }
  if(bad_cooldown > 0) bad_cooldown--;
  
  CollisionDet();
}

void keyPressed()
{
  if(key == 32)
  {
    if(Onground)
    {
      jumping = true;
      Onground = false;
    }
    
    if(isgameover == true)
    {
      restart();
    }  

  }
  
  if(key == 'a')
  {
    isDebug = true;
  }
  /*if(key == 's')
  {
    stop();
  }*/
}

void CollisionDet()
{
  c_playerX = playerX;
  c_playerY = playerY;
  
  for(int i = 0;i < 10;i++)
  {
    if(saboten_if[i] == 1)
    {
      s_CollisionX[i] = saboten_pos[i] - 32.5 + 5;
      s_CollisionY[i] = 580 - 50;
      m_CollisionX[i] = saboten_pos[i] + 32.5 - 5;
      m_CollisionY[i] = 580 + 50;
    }
    if(saboten_if[i] == 2)
    {
      s_CollisionX[i] = saboten_pos[i] - 37.5 + 8;
      s_CollisionY[i] = 580 - 55;
      m_CollisionX[i] = saboten_pos[i] + 37.5 - 8;
      m_CollisionY[i] = 580 + 55;
    }
    if(saboten_if[i] == 3)
    {
      s_CollisionX[i] = saboten_pos[i] - 17.5 + 3;
      s_CollisionY[i] = 580 - 60;
      m_CollisionX[i] = saboten_pos[i] + 17.5 - 3;
      m_CollisionY[i] = 580 + 60;
    }
    
    if(saboten_if[i] != 0 && c_playerX + 30 >= s_CollisionX[i] && c_playerX + 30 <= m_CollisionX[i] && c_playerY + 40 >= s_CollisionY[i] && c_playerY + 40 <= m_CollisionY[i])
    {
         //撞到了
      isgameover = true;   
      
          textSize(40);
      text(c_playerX,0,100);
      text(c_playerY,0,200);
      
      
      text(s_CollisionX[i],200,100);
      text(m_CollisionX[i],200,200);
      text(s_CollisionY[i],200,300);
      text(m_CollisionY[i],200,400); 
         
    }
    else if(saboten_if[i] != 0 && c_playerX - 30 >= s_CollisionX[i] && c_playerX - 30 <= m_CollisionX[i] && c_playerY + 40 >= s_CollisionY[i] && c_playerY + 40 <= m_CollisionY[i])
    {
      //撞到了
      isgameover = true;    
      
          textSize(40);
      text(c_playerX,0,100);
      text(c_playerY,0,200);
      
      text(s_CollisionX[i],200,100);
      text(m_CollisionX[i],200,200);
      text(s_CollisionY[i],200,300);
      text(m_CollisionY[i],200,400); 
    }
  }
  
}

void restart()
{
  for(int i = 0;i < 10;i++)
  {
    saboten_if[i] = 0;
    saboten_pos[i] = 0;
    
  }
  distance = 0;
  stage_lv = 0;
  
  isgameover = false;
}

void debug()
{
    textSize(40);
    text(c_playerX,0,100);
    text(c_playerY,0,200);
    
    text(failednumber,400,100);
}

2.預計進度:

    關卡平衡、快速落地、重玩切換、階段提高提示、場景變化、空中障礙、場景裝飾




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.下次規劃

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

2021年12月6日 星期一

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.下次規劃

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



2021年11月29日 星期一

08160741_week08

 期末規劃


簡單2D卷軸操作得分小遊戲


1.主要內容

    操控一名角色並利用鍵盤的空白鍵進行跳躍,操控的角色會不停地往前進無法停下來,並同時計算玩家所移動的距離,並以最後移動的距離作為結算的分數


2.關卡設計

    採以可移動的平面和會掉落的落穴作為地圖構成,每次遊玩的地圖構成都是隨機生成的,而隨著玩家的移動距離增長,玩家本身的移動速度會跟著增加,就意味著遊戲的難度會提升,藉以挑戰玩家所能達到的極限距離

    而地圖上也會充斥著不同的道具(有好有壞),玩家操作的角色碰觸到後會有不同的效果影響,以此增加遊戲的趣味性

2021年11月22日 星期一

08160741_Week07

1.紅點碰黃點,黃點會消失;黃點會上下跑,紅點會跟著滑鼠

float []x  = {250,150,350,300};
float []y  = {0,50,80,100};
float []vx = {0,0,0,0};
float []vy = {3,2,2,5,4};
boolean []dead = {false,false,false,false};
void setup()
{
  size(500,600);
}

void draw()
{
  background(255);
  for(int i = 0;i < 4;i++)
  {
    if(dist(mouseX,mouseY,x[i],y[i]) <= 50)
    {
      dead[i] = true;
    }
    if(dead[i] == true) continue;
    fill(255,255,0);
    ellipse(x[i],y[i],50,50);
    
    y[i] = y[i] + vy[i];
    if(y[i] > 600) vy[i] = -vy[i];
    if(y[i] < 0) vy[i] = - vy[i];
  }
  fill(255,0,0);
  ellipse(mouseX,mouseY,50,50);
}

2.隨機反彈,碰到滑鼠消失

class Ball
{
  float x,y,vx,vy;
  boolean dead;
  Ball()
  {
    x = random(500);
    y = random(500);
    vy = random(-4,4);
    vx = random(-4,4);
    dead = false;
  }
  void draw()
  {
    if(dead == true) return;
    ellipse(x,y,50,50);
    if(dist(mouseX,mouseY,x,y) < 50)
    {
      dead = true;
    }
    x = x + vx;
    y = y + vy;
    if(y > 500 || y < 0) vy = -vy;
    if(x > 500 || x < 0) vx = -vx;
  }
}

Ball []balls;
void setup()
{
  size(500,500);
  balls = new Ball[20];
  for(int i = 0;i < 20;i++)
  {
    balls[i] = new Ball();
  }
}

3.重力加速度

class Ball
{
  float x,y,vx,vy;
  boolean dead;
  Ball()
  {
    reborn();
  }
   void reborn()
   {
      x = random(500);
      y = random(500);
      vy = random(-4,4);
      vx = random(-4,4);
      dead = false;
   }
  void draw()
  {
    if(dead == true) return;
    ellipse(x,y,50,50);
    if(dist(mouseX,mouseY,x,y) < 50)
    {
      dead = true;
    }
    x = x + vx;
    y = y + vy;
    vy += 0.98;
    if(y > 500 || y < 0) vy = -vy;
    if(x > 500 || x < 0) vx = -vx;
  }
}

Ball []balls;
void setup()
{
  size(500,500);
  balls = new Ball[20];
  for(int i = 0;i < 20;i++)
  {
    balls[i] = new Ball();
  }
}
boolean gameOber = false;
void draw()
{
  background(255);
  for(int i = 0;i < 20;i++)
  {
    balls[i].draw();
  }
}

2021年11月15日 星期一

08160741_Week06

1.目前時間


void setup()

{

  size(600,600);

  fill(255,0,0);

  textSize(80);

}


void draw()

{

  background(255);

  text(hour()+":"+minute()+":"+second(),50,100);

  text("mills()"+millis()/1000,50,200);

}

 


2.顯示文字

PFont myFont;
void setup()
{
  size(500,500);
  myFont = createFont("標楷體",100);
  textFont(myFont);
  text("中文",100,100);
}

3.不同字體


PFont font1,font2;

void setup()

{

  size(500,500);

  font1 = createFont("標楷體",100);

  textFont(font1);

  font2 = createFont("微軟正黑體",100);

}


void draw()

{

  background(0);

  text("中文",100,100);

  if(mousePressed) textFont(font2);

  else textFont(font1);

}

4.其他的時間計算

PFont font1;

void setup()

{

  size(800,600);

  fill(255);

  textSize(80);

  

  font1 = createFont("微軟正黑體",100);

  textFont(font1);

}


void draw()

{

  background(#075BB2);

  String hh=nf(hour(),2);

  String mm=nf(minute(),2);

  String ss=nf(second(),2);

  text("現在"+hh+":"+mm+":"+ss,50,100);

  text("下課:15:40:00",50,200);

  

  int now = hour()*60*60 + minute()*60 + second();

  int next = 15 *60*60 + 40*60 + 0;

  int remain = next - now;

  text("剩下的時間:" + remain,50,300);

  hh = nf(remain/60/60%60,2);

  mm = nf(remain/60%60,2);

  ss = nf(remain%60,2);

  text("剩下:"+hh+":"+mm+":"+ss,50,400);

}


5.迴圈圖片


PImage []img = new PImage[10];

void setup()

{

  size(1120,450);

  for(int i = 0;i < 10;i++) img[i] = loadImage(i + ".png");

}


void draw()

{

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

  {

    int x = (i%5) * 224,y = int(i/5)*225;

    image(img[i],x,y);

  }

}


2021年11月1日 星期一

08160741_鏡頭_week05

1.播影片


import processing.video.*;

Movie movie;


void setup()

{

  size(640,480);

  movie = new Movie(this,"launch2.mp4");

  movie.loop();

}


void draw()

{

  image(movie,0,0);

}


void movieEvent(Movie m)

{

  m.read();

}

2.鏡頭

import processing.video.*;

Capture cam;

void setup()

{

  size(640,480);

  cam = new Capture(this,Capture.list()[0]);

  cam.start();

}


void draw()

{

  if(cam.available())

  {

    cam.read();

  }

  image(cam,0,0);

}

 3.更新幀並轉成圖片



void setup()

{

  size(640,480);

}


void draw()

{

  background(255,0,0);

  println(frameCount);

}


void mousePressed()

{

  loadPixels();

  for(int i = 0;i < 640*480;i++)

  {

    pixels[i] = color(0,255,0);

  }

  updatePixels();

  saveFrame();

}


2021年10月25日 星期一

08160741_week04_棋盤

 1.棋盤

void setup()

{

  size(500,500);

}

void draw()

{

  background(253,236,180);

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

  {

    line(50+50*i,50,50+50*i,450);

    line(50,50+50*i,450,50+50*i);

  }

}

2.棋子
int [][]go = {
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{1,1,0,0,0,0,0,0,0},
};
void setup()
{
  size(500,500);
}
void draw()
{
  background(253,236,180);
  for(int i = 0;i < 9;i++)
  {
    line(50+50*i,50,50+50*i,450);
    line(50,50+50*i,450,50+50*i);
  }
  for(int i = 0;i < 9;i++)
  {
    for(int j = 0;j < 9;j++)
    {
      if(go[i][j] == 1)
      {
        int x = 50+50*j,y = 50+50*i;
        fill(255);
        ellipse(x,y,40,40); 
      }
    }
  }
}

3.滑鼠點擊下棋


int [][]go = {
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{1,1,0,0,0,0,0,0,0},
};
void setup()
{
  size(500,500);
}
void draw()
{
  background(253,236,180);
  for(int i = 0;i < 9;i++)
  {
    line(50+50*i,50,50+50*i,450);
    line(50,50+50*i,450,50+50*i);
  }
  for(int i = 0;i < 9;i++)
  {
    for(int j = 0;j < 9;j++)
    {
      if(go[i][j] == 1)
      {
        int x = 50+50*j,y = 50+50*i;
        fill(255);
        ellipse(x,y,40,40); 
      }
      else if(go[i][j] == 2)
      {
        int x = 50+50*j,y = 50+50*i;
        fill(0);
        ellipse(x,y,40,40); 
      }
    }
  }
}

void mousePressed()
{
  int j = (mouseX -25)/50;
  int i = (mouseY -25)/50;
  if(mouseButton == LEFT) go[i][j] = 1;
  if(mouseButton == RIGHT) go[i][j] = 2;
  if(mouseButton == CENTER) go[i][j] = 0;
  
}

4.奇怪的東東


void setup()

{

  size(500,500);

}


void draw()

{

  background(255);

  noFill();

  for(float a = 0;a < 360;a++)

  {

    float x = 250+mouseX*cos(radians(a));

    float y = 250+mouseY*sin(radians(a));

    ellipse(x,y,mouseX,mouseY);

  }

}

2021年10月18日 星期一

08160741_week03_圖片

1.圖片



PImage img;

void setup()
{
  size(500,500);
  img = loadImage("d76.jpg");
}

void draw()
{
  image(img,0,0,500,500);
}

2.兩張圖片(一張背景 一張去被圖)




PImage img1,img2;

void setup()
{
  size(1280,720);
  img1 = loadImage("1.png");
  img2 = loadImage("2.jpg");
}

void draw()
{
  imageMode(CORNER);
  image(img2,0,0,1280,720);
  imageMode(CENTER);
  image(img1,mouseX,mouseY,200,200);
}

3.音樂



import ddf.minim.*;
Minim minim;
AudioPlayer player;
void setup()
{
  size(500,500);
  minim = new Minim(this);
  player = minim.loadFile("groove.mp3");
  player.play();
}

void draw()
{
  
}

4.兩個音樂




 import ddf.minim.*;

Minim minim;
AudioPlayer player1,player2;
void setup()
{
  size(500,500);
  minim = new Minim(this);
  player1 = minim.loadFile("groove.mp3");
  player2 = minim.loadFile("12.mp3");
  player1.play();
}

void draw()
{
  
}

void mousePressed()
{
  player2.play();
}

5.按鍵發聲

import ddf.minim.*;
Minim minim;
AudioPlayer doo,re,mi,fa,so;
void setup()
{
  size(500,500);
  minim = new Minim(this);
  doo = minim.loadFile("do.wav");
  re = minim.loadFile("re.wav");
  mi = minim.loadFile("mi.wav");
  fa = minim.loadFile("fa.wav");
  so = minim.loadFile("so.wav");
  
}

void draw()
{
  
}

void keyPressed()
{
  if(key == '1') {doo.rewind(); doo.play();}
  if(key == '2') {re.rewind(); re.play();}
  if(key == '3') {mi.rewind(); mi.play();}
  if(key == '4') {fa.rewind(); fa.play();}
  if(key == '5') {so.rewind(); so.play();}
}

2021年10月4日 星期一

08160741_week04_小畫家

 1.小畫家 顏色


void setup()
{
  size(500,500);
  fill(255,0,0);
  rect(0,0,100,100);
  fill(0,255,00);
  rect(0,100,100,100);
}

void draw()
{
  if(mousePressed)
  {
    if(mouseX < 100)
    {
      if(mouseY < 100) stroke(255,0,0);
      else if (mouseY < 200) stroke(0,255,0);
    }
    else line(mouseX,mouseY,pmouseX,pmouseY);
  }
}

2.小畫家 粗細
void setup()
{
  size(500,500);
  for(int i=1;i<8;i++)
  {
    rect(0,i*50,50,50);
    ellipse(25,25+i*50,i,i);
  }
}
void draw()
{
  if(mousePressed)
  {
    if(mouseX<50)
    {
      for(int i=1;i<8;i++)
      {
        if(mouseY>i*50 && mouseY<i*50+50)
        {
          strokeWeight(i);
        }
      }
    }
    else line(mouseX,mouseY,pmouseX,pmouseY); 
  }
}

2021年9月27日 星期一

08160741_Week03_呆企鵝

 1.程式碼


size(600,600);
background(#8E8E8E);

noStroke();
fill(255);
rect(100,100,400,400);

fill(255);
stroke(0);
strokeWeight(5);
ellipse(200,300,30,30);
ellipse(400,300,30,30);

noStroke();
fill(#FF9224);
ellipse(300,400,200,100);

stroke(255);
line(200,400,400,400);

2.結果