/* built with Studio Sketchpad:
* https://sketchpad.cc
*
* observe the evolution of this sketch:
* https://studio.sketchpad.cc/sp/pad/view/ro.ttf64eeqPBj/rev.94
*
* authors:
*
*
* GoToLoop
*
*
*
*
*
*
*
*
* license (unless otherwise specified):
* creative commons attribution-share alike 3.0 license.
* https://creativecommons.org/licenses/by-sa/3.0/
*/
/**
* Player Move (v1.2.1)
* by GoToLoop (2014/Dec/07)
*
* Forum.Processing.org/two/discussion/8511/movement-code-messed-up#Item_6
* Studio.ProcessingTogether.com/sp/pad/export/ro.91tcpPtI9LrXp
*/
static final int DIAM = 80, SPD = 4, FPS = 60;
static final color BG = 0350;
Player p;
void setup() {
size(800, 600);
smooth(3);
frameRate(FPS);
ellipseMode(CENTER);
fill(Player.INK);
stroke(Player.OUTLINE);
strokeWeight(Player.BOLD);
p = new Player(width, height, DIAM, SPD);
}
void draw() {
background(BG);
p.move();
p.display();
}
void keyPressed() {
p.setMove(keyCode, true);
}
void keyReleased() {
p.setMove(keyCode, false);
}
final class Player {
static final color INK = #008000, OUTLINE = 0;
static final float BOLD = 2.0;
boolean isLeft, isRight, isUp, isDown;
int x, y;
final int d, v;
Player(final int xx, final int yy, final int dd, final int vv) {
x = xx;
y = yy;
d = dd;
v = vv;
}
void display() {
ellipse(x, y, d, d);
}
void move() {
final int r = d >> 1;
x = constrain(x + v*(int(isRight) - int(isLeft)), r, width - r);
y = constrain(y + v*(int(isDown) - int(isUp)), r, height - r);
}
boolean setMove(final int k, final boolean b) {
switch (k) {
case +'W':
case UP:
return isUp = b;
case +'S':
case DOWN:
return isDown = b;
case +'A':
case LEFT:
return isLeft = b;
case +'D':
case RIGHT:
return isRight = b;
default:
return b;
}
}
}