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;
}
沒有留言:
張貼留言