class Pacman {
float radius = 40;
float x = radius;
float y = 250;
float vel = 2.75;//velocity (speed)
float vx;//velocity x (x-speed)
float vy;//velocity y (y-speed)
float mouth = 0;//mouth angle (theta)//θ
float openClose = 0.05;//angle delta//Δθ//open close speed
float start;
float end;
float sigs;//sign start
float sige;//sign end
Pacman() {
setRight();
}
void setRight() {
vx = vel;
vy = 0;
start = 0;
end = TWO_PI;
sigs = 1;
sige = -1;
}
void setLeft() {
vx = -vel;
vy = 0;
start = -5*(PI/6);
end = 5*(PI/6);
sigs = -1;
sige = 1;
}
void setUp() {
vx = 0;
vy = -vel;
start = -PI/2;
end = TWO_PI + -PI/2;
sigs = 1;
sige = -1;
}
void setDown() {
vx = 0;
vy = vel;
start = PI/2;
end = TWO_PI + PI/2;
sigs = 1;
sige = -1;
}
void keyPressed() {
if (key == CODED) {
switch(keyCode) {
case RIGHT:
setRight();
break;
case LEFT:
setLeft();
break;
case UP:
setUp();
break;
case DOWN:
setDown();
break;
}
}
}
void mouth(){
mouth += openClose;
if (mouth > PI/6 || mouth < 0) {
openClose = openClose * -1;
}
}
void draw() {
//draw
fill(255, 255, 0);
arc(x, y, radius, radius, start+sigs*mouth, end+sige*mouth);
//update
mouth();
warp();
raid();
move();
}
void move() {
x += vx;
y += vy;
}
void warp() {
if (x<-radius) {
x=width+radius;
}
if (x>width+radius) {
x=-radius;
}
if (y>height+radius) {
y=-radius;
}
if (y<-radius) {
y=height+radius;
}
}
void raid() {
if (x > width - radius) {
if (y!=height/2) {
x = width-radius;
} else {
y=height/2;
if (x>width+radius) {
x=-radius;
}
}
}
}
}
Pacman pacman;
void setup() {
size(1020, 500);
smooth();
ellipseMode(RADIUS);
pacman = new Pacman();
}
void draw() {
background(0);
pacman.draw();
}
void keyPressed() {
pacman.keyPressed();
}
Y2xhc3MgUGFjbWFuIHsKICBmbG9hdCByYWRpdXMgPSA0MDsKICBmbG9hdCB4ID0gcmFkaXVzOwogIGZsb2F0IHkgPSAyNTA7CiAgCiAgZmxvYXQgdmVsID0gMi43NTsvL3ZlbG9jaXR5IChzcGVlZCkKICBmbG9hdCB2eDsvL3ZlbG9jaXR5IHggKHgtc3BlZWQpCiAgZmxvYXQgdnk7Ly92ZWxvY2l0eSB5ICh5LXNwZWVkKQoKICBmbG9hdCBtb3V0aCA9IDA7Ly9tb3V0aCBhbmdsZSAodGhldGEpLy/OuAogIGZsb2F0IG9wZW5DbG9zZSA9IDAuMDU7Ly9hbmdsZSBkZWx0YS8vzpTOuC8vb3BlbiBjbG9zZSBzcGVlZAoKICBmbG9hdCBzdGFydDsKICBmbG9hdCBlbmQ7CiAgZmxvYXQgc2lnczsvL3NpZ24gc3RhcnQKICBmbG9hdCBzaWdlOy8vc2lnbiBlbmQKICAKICBQYWNtYW4oKSB7CiAgICBzZXRSaWdodCgpOwogIH0KICB2b2lkIHNldFJpZ2h0KCkgewogICAgdnggPSB2ZWw7CiAgICB2eSA9IDA7CiAgICBzdGFydCA9IDA7CiAgICBlbmQgPSBUV09fUEk7CiAgICBzaWdzID0gMTsKICAgIHNpZ2UgPSAtMTsKICB9CiAgdm9pZCBzZXRMZWZ0KCkgewogICAgdnggPSAtdmVsOwogICAgdnkgPSAwOwogICAgc3RhcnQgPSAtNSooUEkvNik7CiAgICBlbmQgPSA1KihQSS82KTsKICAgIHNpZ3MgPSAtMTsKICAgIHNpZ2UgPSAxOwogIH0KICB2b2lkIHNldFVwKCkgewogICAgdnggPSAwOwogICAgdnkgPSAtdmVsOwogICAgc3RhcnQgPSAtUEkvMjsKICAgIGVuZCA9IFRXT19QSSArIC1QSS8yOwogICAgc2lncyA9IDE7CiAgICBzaWdlID0gLTE7CiAgfQogIHZvaWQgc2V0RG93bigpIHsKICAgIHZ4ID0gMDsKICAgIHZ5ID0gdmVsOwogICAgc3RhcnQgPSBQSS8yOwogICAgZW5kID0gVFdPX1BJICsgUEkvMjsKICAgIHNpZ3MgPSAxOwogICAgc2lnZSA9IC0xOwogIH0KICB2b2lkIGtleVByZXNzZWQoKSB7CiAgICBpZiAoa2V5ID09IENPREVEKSB7CiAgICAgIHN3aXRjaChrZXlDb2RlKSB7CiAgICAgIGNhc2UgUklHSFQ6CiAgICAgICAgc2V0UmlnaHQoKTsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgTEVGVDoKICAgICAgICBzZXRMZWZ0KCk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIFVQOgogICAgICAgIHNldFVwKCk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIERPV046CiAgICAgICAgc2V0RG93bigpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQogIHZvaWQgbW91dGgoKXsKICAgIG1vdXRoICs9IG9wZW5DbG9zZTsKICAgIGlmIChtb3V0aCA+IFBJLzYgfHwgbW91dGggPCAwKSB7CiAgICAgIG9wZW5DbG9zZSA9IG9wZW5DbG9zZSAqIC0xOwogICAgfQogIH0KICB2b2lkIGRyYXcoKSB7CiAgICAvL2RyYXcKICAgIGZpbGwoMjU1LCAyNTUsIDApOwogICAgYXJjKHgsIHksIHJhZGl1cywgcmFkaXVzLCBzdGFydCtzaWdzKm1vdXRoLCBlbmQrc2lnZSptb3V0aCk7CiAgICAKICAgIC8vdXBkYXRlCiAgICBtb3V0aCgpOwogICAgd2FycCgpOwogICAgcmFpZCgpOwogICAgbW92ZSgpOwogIH0KICB2b2lkIG1vdmUoKSB7CiAgICB4ICs9IHZ4OwogICAgeSArPSB2eTsKICB9CiAgdm9pZCB3YXJwKCkgewogICAgaWYgKHg8LXJhZGl1cykgewogICAgICB4PXdpZHRoK3JhZGl1czsKICAgIH0KICAgIGlmICh4PndpZHRoK3JhZGl1cykgewogICAgICB4PS1yYWRpdXM7CiAgICB9CiAgICBpZiAoeT5oZWlnaHQrcmFkaXVzKSB7CiAgICAgIHk9LXJhZGl1czsKICAgIH0KICAgIGlmICh5PC1yYWRpdXMpIHsKICAgICAgeT1oZWlnaHQrcmFkaXVzOwogICAgfQogIH0KICB2b2lkIHJhaWQoKSB7CiAgICBpZiAoeCA+IHdpZHRoIC0gcmFkaXVzKSB7IAogICAgICBpZiAoeSE9aGVpZ2h0LzIpIHsgCiAgICAgICAgeCA9IHdpZHRoLXJhZGl1czsKICAgICAgfSBlbHNlIHsgCiAgICAgICAgeT1oZWlnaHQvMjsgCiAgICAgICAgaWYgKHg+d2lkdGgrcmFkaXVzKSB7IAogICAgICAgICAgeD0tcmFkaXVzOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKUGFjbWFuIHBhY21hbjsKCnZvaWQgc2V0dXAoKSB7CiAgc2l6ZSgxMDIwLCA1MDApOwogIHNtb290aCgpOwogIGVsbGlwc2VNb2RlKFJBRElVUyk7CiAgcGFjbWFuID0gbmV3IFBhY21hbigpOwp9Cgp2b2lkIGRyYXcoKSB7CiAgYmFja2dyb3VuZCgwKTsKICBwYWNtYW4uZHJhdygpOwp9Cgp2b2lkIGtleVByZXNzZWQoKSB7CiAgcGFjbWFuLmtleVByZXNzZWQoKTsKfQo=