2015年1月18日 星期日

期末作業 貪吃小精靈


import processing.serial.*;
Serial myPort;

void draw() {
  background(imgBG);
  ser();
  image(Elf, EX, EY);
  touchGhost();
  if(dir!=0){
    image(ghostr, redx, redy);
    ghost();
  }
  if(dirp!=0){
    image(ghostp, pinkx, pinky);
    ghostp();
  }
  if(dirg!=0){
    image(ghostg, greenx, greeny);
    ghostg();
  }
}
void ser(){
  if(myPort.available()>0){
    int value=myPort.read();
    int leftEX=EX, leftEY=EY, rightEX=EX+15, rightEY=EY+15;
    if (table[leftEX][leftEY]<0)
    {
      if(value==82)
        EY+=5;
      if(value==76)
        EX-=5;
    }
    
    if (table[rightEX][rightEY]<0)
    {
        if(value==85)
          EX+=5;
        if(value==68)
          EY-=5;
    }
    println(value);
  }
}
void mouseMoved() {
  println(mouseX, mouseY);
}
void keyPressed()
{
  int leftEX=EX, leftEY=EY, rightEX=EX+15, rightEY=EY+15;
  if (table[leftEX][leftEY]<0)
  {
    if (keyCode == UP)
      EY-=5;
    if (keyCode == LEFT)
      EX-=5;
  }
  if (table[rightEX][rightEY]<0)
  {
    if (keyCode == RIGHT)
      EX+=5;
    if (keyCode == DOWN)
      EY+=5;
  }
 /* if (table[rightEX][rightEY]<0) println("safe");
  else println("ac");*/
}
int dir= 1;
void ghost() {
  float r = random(1, 5);
  //if(table[redx][redy]==0)
  //println("dir:"+dir+"*");
  switch(dir) {
  case 1: 
    {
      if (table[redx+25][redy]<0)
      {
        redx+=2;
        break;
      }
      else {  
        r = random(1, 5);
        dir = int(r);
        break;
      }
    }
  case 2: 
    {
      if (table[redx][redy+25]<0) {
        redy+=2;
        break;
      }
      else {  
        r = random(1, 5);
        dir = int(r);
        break;
      }
    }
  case 3: 
    {
      if (table[redx-5][redy]<0) {
        redx-=2;
        break;
      }
      else {  
        r = random(1, 5);
        dir = int(r);
        break;
      }
    }
  case 4: 
    {
      if (table[redx][redy-5]<0) {
        redy-=2;
        break;
      }
      else {  
        r = random(1, 5);
        dir = int(r);
        break;
      }
    }
  }
  println("rgb:"+table[redx][redy]);
}
int dirp= 2;
void ghostp() {
  float r = random(1, 5);
  //if(table[redx][redy]==0)
  //println("dir:"+dir+"*");
  switch(dirp) {
  case 1: 
    {
      if (table[pinkx+25][pinky]<0)
      {
        pinkx+=2;
        break;
      }
      else {  
        r = random(1, 5);
        dirp = int(r);
        break;
      }
    }
  case 2: 
    {
      if (table[pinkx][pinky+25]<0) {
        pinky+=2;
        break;
      }
      else {  
        r = random(1, 5);
        dirp = int(r);
        break;
      }
    }
  case 3: 
    {
      if (table[pinkx-5][pinky]<0) {
        pinkx-=2;
        break;
      }
      else {  
        r = random(1, 5);
        dirp = int(r);
        break;
      }
    }
  case 4: 
    {
      if (table[pinkx][pinky-5]<0) {
        pinky-=2;
        break;
      }
      else {  
        r = random(1, 5);
        dirp = int(r);
        break;
      }
    }
  }
}
int dirg= 3;
void ghostg() {
  float r = random(1, 5);
  //if(table[redx][redy]==0)
  //println("dir:"+dir+"*");
  switch(dirg) {
  case 1: 
    {
      if (table[greenx+25][greeny]<0)
      {
        greenx+=2;
        break;
      }
      else {  
        r = random(1, 5);
        dirg = int(r);
        break;
      }
    }
  case 2: 
    {
      if (table[greenx][greeny+25]<0) {
        greeny+=2;
        break;
      }
      else {  
        r = random(1, 5);
        dirg = int(r);
        break;
      }
    }
  case 3: 
    {
      if (table[greenx-5][greeny]<0) {
        greenx-=2;
        break;
      }
      else {  
        r = random(1, 5);
        dirg = int(r);
        break;
      }
    }
  case 4: 
    {
      if (table[greenx][greeny-5]<0) {
       greeny-=2;
        break;
      }
      else {  
        r = random(1, 5);
        dirg = int(r);
        break;
      }
    }
  }
}
void touchGhost()
{
  println("EX"+EX+",EY"+EY+",PX"+pinkx+",PY"+pinky);
  if(abs(pinkx-EX)<=10 && abs(pinky-EY)<=10)
  {
    dirp=0;
  }
  if(abs(redx-EX)<=10 && abs(redy-EY)<=10)
  {
    dir=0; 
  }
  if(abs(greenx-EX)<=10 && abs(greeny-EY)<=10)
  {
    dirg=0; 
  }
  if(dir==0 && dirp==0 && dirg==0)
  println("YOU WIN");
}

沒有留言:

張貼留言