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

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

沒有留言:

張貼留言