OneHourProcessing 三日目

OneHourProcessing 三日目

今日作ったのはこんな感じの避けゲー

かかった時間は「1時間10分」。
またオーバーしました…

コード

ArrayList<Enemy> enemys = new ArrayList<Enemy>();

int Time;
int Score;

PVector PlayerPos = new PVector(400, 400);
int PlayerSize = 20;
int PlayerCoreRadius = 5;
int PlayerCanMove = 3;

String Phase = "GAME";

void setup()
{
  size(800, 450);
  noFill();
}

void draw()
{
  background(0);

  if (Phase.equals("END"))
  {
    textSize(50);
    textAlign(CENTER, CENTER);
    text("GAME OVER (SCORE : " + Score + ")", width / 2, height / 2);
    return;
  }

  Time++;
  Score = Time;

  boolean isTouch = false;

  if (Time % 5 == 0)
    enemys.add(new Enemy(new PVector(random(width), -5), new PVector(0, 5), new PVector(0, 0), 10));

  for (Enemy enemy : enemys)
  {
    enemy.update();
    enemy.display();
    if (enemy.isTouch(PlayerPos, PlayerCoreRadius))
      Phase = "END";
    if (enemy.isTouch(PlayerPos, PlayerSize))
    {
      isTouch = true;
      Score += 5;
    }
  }
  for (int i = 0; i < enemys.size(); i++)
    if (enemys.get(i).isDestroy())
    {
      enemys.remove(i);
      i--;
    }

  PlayerUpdate();
  PlayerDisplay(isTouch);
  
  textSize(20);
  textAlign(LEFT, CENTER);
  text("TIME :" + (Time / 60), 10, 10);
  text("SCORE:" + Score, 10, 30);
  text("MOVE :(ArrowKey)", 10, 50);
  text("RESET:(EnterKey)", 10, 70);
}

void keyPressed()
{
  if (keyCode == ENTER)
    reset();
}

void reset()
{
  Time = 0;
  enemys.clear();
  PlayerPos = new PVector(400, 400);
  Phase = "GAME";
}

void PlayerUpdate()
{
  if (keyPressed)
  {
    switch(keyCode)
    {
    case LEFT:
      PlayerPos.x -= PlayerCanMove;
      break;
    case RIGHT:
      PlayerPos.x += PlayerCanMove;
      break;
    case UP:
      PlayerPos.y -= PlayerCanMove;
      break;
    case DOWN:
      PlayerPos.y += PlayerCanMove;
      break;
    }
  }
  if (PlayerPos.x < 0)
    PlayerPos.x = 0;
  if (PlayerPos.x > width)
    PlayerPos.x = width;
  if (PlayerPos.y < 0)
    PlayerPos.y = 0;
  if (PlayerPos.y > height)
    PlayerPos.y = height;
}

void PlayerDisplay(boolean isTouch)
{
  float rad = PI / 180 * Time;
  float sixty = PI / 3 * 2;
  strokeWeight(1);
  stroke(255);
  ellipse(PlayerPos.x, PlayerPos.y, PlayerCoreRadius * 2, PlayerCoreRadius * 2);
  if (isTouch)
    stroke(255, 0, 0);
  pushMatrix();
  translate(PlayerPos.x + 5, PlayerPos.y);
  rotate(-PI / 2);
  triangle(cos(-rad) * PlayerSize, sin(-rad) * PlayerSize, cos(-rad + sixty) * PlayerSize, sin(-rad + sixty) * PlayerSize, cos(-rad + sixty * 2) * PlayerSize, sin(-rad + sixty * 2) * PlayerSize);
  rotate(PI / 2);
  translate(-10, 0);
  rotate(-PI / 2);
  triangle(cos(rad) * PlayerSize, sin(rad) * PlayerSize, cos(rad + sixty) * PlayerSize, sin(rad + sixty) * PlayerSize, cos(rad + sixty * 2) * PlayerSize, sin(rad + sixty * 2) * PlayerSize);
  popMatrix();
}

Enemyクラス

class Enemy
{
  PVector pos;
  PVector vec;
  PVector acc;
  int radius;

  Enemy(PVector pos, PVector vec, PVector acc, int radius)
  {
    this.pos = pos;
    this.vec = vec;
    this.acc = acc;
    this.radius = radius;
  }

  void update()
  {
    vec.add(acc);
    pos.add(vec);
  }

  void display()
  {
    strokeWeight(radius / 2);
    stroke(255);
    ellipse(pos.x, pos.y, radius * 2, radius * 2);
  }
  
  boolean isDestroy()
  {
    return pos.y > height + radius;
  }

  boolean isTouch(PVector player_pos, float player_size)
  {
    return pos.dist(player_pos) <= radius + player_size;
  }
}