2017年1月12日 星期四

0112 許君平 上課筆記

2017/1/12

Target: Pacman
1. Play It
2. draw pacman

3. move pacman
4. draw map


先玩玩看



實作

畫出嘴巴







void setup(){
size(500,300);
}
int S=100;
void draw(){
background(255);
float mouth=30;
fill(#F7E007);
//ellipse(250,150, S,S);
arc(250,150,S,S, radians(mouth), radians(360-mouth) );
mouth++;

}


用滑鼠控制嘴巴大小






















void setup(){
size(500,300);
}
int S=100;
float mouth=30;
void draw(){
background(255);
fill(#F7E007);
//ellipse(250,150, S,S);
arc(250,150,S,S, radians(mouth), radians(360-mouth),PIE);
mouth=mouseX;

}


自動開關嘴巴


















void setup(){
size(500,300);
}
int S=100;
int mouth=30;//45
void draw(){
background(255);
fill(#F7E007);
//ellipse(250,150, S,S);
arc(250,150,S,S, radians(mouth), radians(360-mouth),PIE);
mouth=abs((frameCount*3)%90-45);
println(mouth);
}



















void setup(){
size(500,300);
}
int S=100;
int mouth=30;//45
int pacX=250, pacY=150;
void draw(){
background(255);
fill(#F7E007);
//ellipse(250,150, S,S);
arc(pacX,pacY,S,S, radians(mouth), radians(360-mouth),PIE);
mouth=abs((frameCount*3)%90-45);
println(mouth);
}
void keyPressed(){
if(keyCode==UP)pacY -=10;
if(keyCode==DOWN)pacY +=10;
if(keyCode==RIGHT)pacX+=10;
if(keyCode==LEFT)pacX-=10;
}


畫地圖/// draw map elements (0,1,2,3,4,5,6,7,8,9)


記得先把圖抓進去


















PImage [] img=new PImage[10];
void setup(){

size(500,300);
for(int i=0;i<=9;i++) img[i]=loadImage(i + ".png");
}
int S=100;
int mouth=30;//45
int pacX=250, pacY=150, pacDir=0;//0,90,180,270
void draw(){
background(255);
image(img[(frameCount)%10],0,0);
fill(#F7E007);
//ellipse(250,150, S,S);
arc(pacX,pacY,S,S, radians(mouth+pacDir), radians(360-mouth+pacDir),PIE);
mouth=abs((frameCount*3)%90-45);
println(mouth);
}
void keyPressed(){
if(keyCode==RIGHT){pacX+=10; pacDir=0;}
if(keyCode==DOWN){pacY +=10; pacDir=90;}
if(keyCode==LEFT){pacX-=10; pacDir=180;}
if(keyCode==UP){pacY -=10; pacDir=270;}
}





用二維矩陣畫地圖/// draw the map by 2D array















int [][]map={
{7,8,8,8,8,8,8,9},

{4,0,0,0,0,0,0,4},
{1,8,8,8,8,8,8,3}};
PImage [] img=new PImage[10];
void setup(){
size(800,300);
for(int i=0;i<=9;i++) img[i]=loadImage(i + ".png");
}
int S=100;
int mouth=30;//45
int pacX=250, pacY=150, pacDir=0;//0,90,180,270
void draw(){
background(255);
for(int y=0;y<3;y++){
for(int x=0;x<8;x++){
image(img[ map[y][x] ],x*100,y*100);
}
}
fill(#F7E007);
//ellipse(250,150, S,S);
arc(pacX,pacY,S,S, radians(mouth+pacDir), radians(360-mouth+pacDir),PIE);
mouth=abs((frameCount*3)%90-45);
println(mouth);
}
void keyPressed(){
if(keyCode==RIGHT){pacX+=10; pacDir=0;}
if(keyCode==DOWN){pacY +=10; pacDir=90;}
if(keyCode==LEFT){pacX-=10; pacDir=180;}
if(keyCode==UP){pacY -=10; pacDir=270;}
}





畫出可以變大的地圖(但畫出來嘴巴張開變很慢) /// scalable map, but too slow because image() resize 















int [][]map={
{7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9},
{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
{1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,3}};
PImage [] img=new PImage[10];
void setup(){
size(800,300);
for(int i=0;i<=9;i++) img[i]=loadImage(i + ".png");
}
int S=50;
int mouth=30;//45
int pacX=250, pacY=150, pacDir=0;//0,90,180,270
void draw(){
background(255);
for(int y=0;y<6;y++){
for(int x=0;x<16;x++){
image(img[ map[y][x] ],x*S,y*S, S,S);
}
}
fill(#F7E007);
//ellipse(250,150, S,S);
arc(pacX,pacY,S,S, radians(mouth+pacDir), radians(360-mouth+pacDir),PIE);
mouth=abs((frameCount*3)%90-45);
println(mouth);
}
void keyPressed(){
if(keyCode==RIGHT){pacX+=10; pacDir=0;}
if(keyCode==DOWN){pacY +=10; pacDir=90;}
if(keyCode==LEFT){pacX-=10; pacDir=180;}
if(keyCode==UP){pacY -=10; pacDir=270;}
}




// Map editor version 0.1














int [][]map={
{7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9},
{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
{4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4},
{1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,3}};
PImage [] img=new PImage[10];
void setup(){
size(800,300);
for(int i=0;i<=9;i++) img[i]=loadImage(i + ".png");
}
int S=50;
int mouth=30;//45
int pacX=250, pacY=150, pacDir=0;//0,90,180,270
void draw(){
background(255);
for(int y=0;y<6;y++){
for(int x=0;x<16;x++){
image(img[ map[y][x] ],x*S,y*S, S,S);
}
}
fill(#F7E007);
//ellipse(250,150, S,S);
arc(pacX,pacY,S,S, radians(mouth+pacDir), radians(360-mouth+pacDir),PIE);
mouth=abs((frameCount*3)%90-45);

int editorX=int(mouseX/S), editorY=int(mouseY/S);
fill(255,0,0); rect(editorX*S,editorY*S, S,S);
}
void keyPressed(){
if(keyCode==RIGHT){pacX+=10; pacDir=0;}
if(keyCode==DOWN){pacY +=10; pacDir=90;}
if(keyCode==LEFT){pacX-=10; pacDir=180;}
if(keyCode==UP){pacY -=10; pacDir=270;}
}
void mouseDragged(){
int editorX=int(mouseX/S), editorY=int(mouseY/S);
float dx=mouseX-pmouseX, dy=mouseY-pmouseY;
if(abs(dx)> 2*abs(dy)) map[editorY][editorX]=8;
if(abs(dy)> 2*abs(dx)) map[editorY][editorX]=4;
}



完整版!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(耶耶可以玩了)

























PImage [] img=new PImage[10];
int [][] map={
  {7,8,8,8,8,8,8,9,  7,8,8,8,8,8,8,9},
  {4,0,0,0,0,0,0,4,  4,0,0,0,0,0,0,4},
  {4,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,4},
  {4,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,4},
  {4,0,0,0,0,0,0,4,  4,0,0,0,0,0,0,4},
  {1,8,8,8,8,8,8,3,  1,8,8,8,8,8,8,3}};
int S=50, pacDir=0, mouth=30;//pacDir: 0,90,180,270
void setup(){
  size(800,300);
  for(int i=0;i<=9;i++) img[i]=loadImage(i+".png");
  for(int y=0;y<6;y++){
    for(int x=0;x<16;x++){
      if(map[y][x]==0) map[y][x]=5;
    }
  }
}
float alpha=0;// x = alpha*(pacXX*S) + (1-alpha)*(ppacXX*S);
int pacXX=1,pacYY=1, ppacXX=1, ppacYY=1;// 0,1,2,....15
void draw(){
  background(255);
  for(int y=0;y<6;y++){
    for(int x=0;x<16;x++){
      image(img[ map[y][x]  ], x*S,y*S, S,S);
    }
  }
  if( map[ pacYY ][ pacXX ] ==5) map[ pacYY ][ pacXX ]=0; 
  fill(#FEFF05);
  float tempX= alpha*(pacXX) + (1-alpha)*(ppacXX);
  float tempY= alpha*(pacYY) + (1-alpha)*(ppacYY);
  float pacX=tempX*S+S/2, pacY=tempY*S+S/2;
  alpha = (alpha+0.1);
  if(alpha>=1){
    alpha=0; ppacXX=pacXX; ppacYY=pacYY;
    pacMove(pacDir);
  }

  arc(pacX,pacY, S,S, radians(mouth+pacDir), radians(360-mouth+pacDir), PIE);
  mouth = abs( (frameCount*3)%90 -45 ) ;
}
int now=0;//now we are drawin 0 on the map[y][x]
void pacMove(int dir){
  if(alpha!=0) {ppacXX=pacXX; ppacYY=pacYY; }
  if(dir==0 && map[pacYY][pacXX+1]%5==0) {alpha=0; ppacXX=pacXX; pacXX++; pacDir=0;}
  if(dir==90 &&map[pacYY+1][pacXX]%5==0) {alpha=0; ppacYY=pacYY; pacYY++; pacDir=90;}
  if(dir==180&&map[pacYY][pacXX-1]%5==0) {alpha=0; ppacXX=pacXX; pacXX--; pacDir=180;}
  if(dir==270&&map[pacYY-1][pacXX]%5==0) {alpha=0; ppacYY=pacYY; pacYY--; pacDir=270;}  
}
void keyPressed(){
  if(keyCode==RIGHT)pacMove(0);
  if(keyCode==DOWN) pacMove(90);
  if(keyCode==LEFT) pacMove(180);
  if(keyCode==UP)   pacMove(270);
  if(key=='0') now=0;
  if(key=='1') now=1;
  if(key=='2') now=2;
  if(key=='3') now=3;
  if(key=='4') now=4;
  if(key=='5') now=5;
  if(key=='6') now=6;
  if(key=='7') now=7;
  if(key=='8') now=8;
  if(key=='9') now=9;
}
void mouseDragged(){
  int x= int(mouseX/S), y= int(mouseY/S);
  map[y][x]=now;
 // float dx=mouseX-pmouseX, dy=mouseY-pmouseY;
 // if(abs(dx)> 2* abs(dy)) map[y][x]=8;
 // if(abs(dy)> 2* abs(dx)) map[y][x]=4;

}



沒有留言:

張貼留言