2014年10月27日 星期一

期中作業 貓頭跑跑





遊戲玩法:
玩家必須利用旁邊的箭頭,想辦法讓貓咪老師到達最後終點(crown),且在最短的步數之內,分數越高,每吃到一顆星星加10分,分數從100分開始算,每多走一步路,或多用一個箭頭扣一分。
void setup()
{
  minim = new Minim(this);
  player = minim.loadFile("walking by the sea.mp3");
  player.play();
  size(700,600);
  start=loadImage("start.png");
  start.resize(100,100);
  up=loadImage("up.png");
  down=loadImage("down.png");
  left=loadImage("left.png");
  right=loadImage("right.png");
  delete=loadImage("X.png");
  delete.resize(50,50);
  host=loadImage("HAT.png");
  host.resize(100,100);
  goal=loadImage("goal.png");
  goal.resize(700,500);
  gameover=loadImage("Game_Over.png");
  gameover.resize(700,600);
  star=loadImage("host.png");
  star.resize(100,100);
  crown=loadImage("crown.png");
  crown.resize(100,100);
}
void draw()
{
  background(0, 102, 153);
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<5;j++)
    {
      rect(i*100,j*100,100,100);
    }
  }
  if(go<1)
  image(host,0,0);
  image(up,600,0);
  image(down,600,100);
  image(left,600,200);
  image(right,600,300);
  image(delete,600,400);
  image(start,600,500);
  image(crown,400,400);
  if(count==0){
    star();
    count++;
  }
  for(int i=0;i<5;i++){
    for(int j=0;j<5;j++){
      if(starCount[i][j]==1) image(star,i*100,j*100);
    }
  }
  if(mY<100 && mX>600){
    image(up,mouseX,mouseY);  s=1;}
  else if(mY<200 && mX>600){
    image(down,mouseX,mouseY);  s=2;}
  else if(mY<300 && mX>600){
    image(left,mouseX,mouseY);  s=3;}
  else if(mY<400 && mX>600){
    image(right,mouseX,mouseY);  s=4;}
  else if(mY<500 && mX>600){
    image(delete,mouseX,mouseY);  s=5;}
 
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<5;j++)
    {
      if(block[i][j]==1)
        image(up,i*100+25,j*100+25);
      else if(block[i][j]==2)
        image(down,i*100+25,j*100+25);
      else if(block[i][j]==3)
        image(left,i*100+25,j*100+25);
      else if(block[i][j]==4)
        image(right,i*100+25,j*100+25);
      else
        block[i][j]=0;  
    }
  }
  if(mouseX>600 && mouseY>500 && mousePressed)
  {
    go=1;
  }
  if(go==1 && finish==0)
  {
    hostMove(block[countX][countY]);
    print(countX+","+countY+","+sum+" ");
  }
  if(finish==1)
  {
    image(host,countX*100,countY*100);
    image(gameover,0,0);
    if(mousePressed==true)
    restart();
 
  }
  if(finish==2)
  {
    image(host,countX*100,countY*100);
    tint(255, 126);
    image(goal,0,0);
    noTint();
    textSize(32);
    text("your score="+sum, 200, 550);
    text("CLICK TO RESTART",200,580);
    if(mousePressed==true)
    restart();
  }

}
void mousePressed()
{
  mX=mouseX;mY=mouseY;
  if(mY<500 && mX<500 && s>0)
  {
    block[(int)mX/100][(int)mY/100]=s;
  }
  s=0;

}
void hostMove(int x)
{

  if(x>0)
    g=x;
  if(countX+countY!=8 && sum>0){
    switch(g)
    {
      case 1:{
        if(countY>0){
        image(host,(countX*100),(countY*100-100));
        bonous();
        countY--;}
        sum--;break;}
      case 2:{
        if(countY<4){
        image(host,(countX*100),(countY*100+100));
        bonous();
        countY++;}
        sum--;break;}
      case 3:{
        if(countX>0){
        image(host,(countX*100-100),(countY*100));
        bonous();
        countX--;}
        sum--;break;}
      case 4:{
        if(countX<4){
        image(host,(countX*100+100),(countY*100));
        bonous();
        countX++;}
        sum--;break;}
    }
  }
  else if(sum==0)
    finish=1;
  else
    finish=2;
}
void star(){
  for(int i=0;i<5;i++){
    rabonousX=(int)(random(0,500)/100);
    rabonousY=(int)(random(0,500)/100);
    if(rabonousX==0 && rabonousY==0){
      starCount[rabonousX+1][rabonousY+1]=1;
    }
    else if(starCount[rabonousX][rabonousY]==1) i--;
    else if(rabonousX==4 && rabonousY==4) i--;
    else starCount[rabonousX][rabonousY]=1;
  }
}
void bonous(){
  if(starCount[countX][countY]==1) sum+=10;
  starCount[countX][countY]=0;

}
void restart()
{
  mX=0;mY=0;
  countX=0;countY=0;go=0;g=2;sum=100;finish=0;count=0;
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<5;j++)
    {
      starCount[i][j]=0;
      block[i][j]=0;
    }
  }
}

沒有留言:

張貼留言