That’s a really nice game!
I made a new function handBounceDist1()
. Not sure what to do with overhead in this new function for the right hand. Please correct.
also in the class, I had to change drawHand1()
; you had handLocX, handLocY AND pos for the hand position. Bad. I now have only pos.
Warmest regards,
Chrisir
Full code.
//Controls the game screen. 0 initial screen, 1 game, 2 game-over
int gameScreen = 0;
//Setup to call from Chef to handle keyboard movement fluidly
Chef myChef;
//Array to handle keys
boolean [] keys = new boolean[128];
// -------------------------------------------------------------------------------
//Setup. Screen size. Chef creation.
void setup() {
size(1000, 1000);
meatX=width/4;
meatY=height/5;
myChef = new Chef();
}//
//Draw. Calls on the screen displays. Runs on and on.
void draw() {
if (gameScreen == 0) {
initScreen();
} else if (gameScreen == 1) {
gameScreen();
} else if (gameScreen == 2) {
gameOverScreen();
myChef.drawHand1();
}
}//
// -------------------------------------------------------------------------------
// Inputs
void keyPressed() {
keys[key] = true;
}
void keyReleased() {
keys[key] = false;
}
//------------------------------------------------------------------------------------
//
void handBounceDist0() {
// meat bounces at hand 0
float overhead = mouseY - pmouseY;
if ((meatX+(meatSize/2) > mouseX-(50/2)) && (meatX-(meatSize/2) < mouseX+(50/2))) {
if (dist(meatX, meatY, meatX, mouseY)<=(meatSize/2)+abs(overhead)) {
bottomBounce(mouseY);
if (overhead<0) {
meatY+=overhead;
meatSpeed+=overhead;
}
}
}
}
void handBounceDist1() { // ???? pos.x, pos.y
// meat bounces at hand 1
float overhead = 12; // mouseY - pmouseY;
if ((meatX+(meatSize/2) > myChef.pos.x-(50/2)) && (meatX-(meatSize/2) < myChef.pos.x+(50/2))) {
if (dist(meatX, meatY, meatX, myChef.pos.y)<=(meatSize/2)+abs(overhead)) {
bottomBounce(myChef.pos.y); // ?????
if (overhead<0) {
meatY+=overhead;
meatSpeed+=overhead;
}
}
}
}
//------------------------------------------------------------------------------------
//The kitchen variables.
color kitchenColor = color(166, 164, 159);
float kitchenWidth = 65;
float kitchenHeight = 1500;
float kitchenLocX = 967;
float kitchenLocY = 700;
float wallWidth = 750;
float wallHeight = 80;
//Walls to be called/drawn
void drawKitchen() {
fill(kitchenColor);
rectMode(CENTER);
rect(kitchenLocX, kitchenLocY, kitchenWidth, kitchenHeight);
}
void drawKitchen1() {
fill(kitchenColor);
rectMode(CENTER);
rect(kitchenLocX-934, kitchenLocY, kitchenWidth, kitchenHeight);
}
void drawKitchen2() {
fill(kitchenColor);
rectMode(CENTER);
rect(110, 970, wallWidth, wallHeight);
}
void drawKitchen3() {
fill(kitchenColor);
rectMode(CENTER);
rect(890, 970, wallWidth, wallHeight);
}
//Meat Variables
float gravity = 1;
float meatSpeed = 0;
float meatSpeedX = 1;
float meatX, meatY;
float meatSize = 20;
int meatColor = color(255, 0, 0);
float slowDown = 0.0001;
float bigSlow = 0.1;
float x0 = 450;
float y0 = 900;
float x1 = 550;
//Show the meat
void drawMeat() {
fill(meatColor);
rect(meatX, meatY, meatSize, meatSize);
if (meatX > x0 && meatX < x1 && meatY > y0) {
score++;
}
}
//Gravity for meat
void turnOnGravity() {
meatSpeed += gravity;
meatY += meatSpeed;
meatSpeed -= (meatSpeed * slowDown);
}
//bottom and topBounce are to make the meat bounce
void bottomBounce(float surface) {
meatY = surface-(meatSize/2);
meatSpeed*=-1;
meatSpeed -= (meatSpeed * bigSlow);
}
void topBounce(float surface) {
meatY = surface+(meatSize/2);
meatSpeed*=-1;
meatSpeed -= (meatSpeed * bigSlow);
}
// keeps the meat in the screen
void screenBounce() {
if (meatY+(meatSize/2) > height) {
bottomBounce(height);
}
if (meatY-(meatSize/2) < 0) {
topBounce(0);
}
if (meatX-(meatSize/2) < 0) {
leftBounce(0);
}
if (meatX+(meatSize/2) > width) {
rightBounce(width);
}
}
//Deals with left/right to go with the bottom and topBounces of earlier
void turnOnMeatSpeedX() {
meatX += meatSpeedX;
meatSpeedX -= (meatSpeedX * slowDown);
}
void leftBounce(float surface) {
meatX = surface+(meatSize/2);
meatSpeedX*=-1;
meatSpeedX -= (meatSpeedX * bigSlow);
}
void rightBounce(float surface) {
meatX = surface-(meatSize/2);
meatSpeedX*=-1;
meatSpeedX -= (meatSpeedX * bigSlow);
}
//Score variable
int score = 0;
//The startup screen
void initScreen() {
background(150, 0, 0);
textAlign(CENTER);
textSize(25);
text("YES, CHEF!", height/2, width/2-10);
text("Instructions:", height/2+5, width/2+35);
text("Use Mouse & Keyboard", height/2+5, width/2+70);
text("Deliver Food Through Door", height/2+5, width/2+100);
text("Score Before Time Runs Out!", height/2+5, width/2+130);
text("Click To Continue", height/2+5, width/2+190);
}
//The actual game itself
void gameScreen() {
background(255);
timer();
drawMeat();
turnOnGravity();
turnOnMeatSpeedX();
screenBounce();
myChef.drawHand0();
myChef.drawHand1();
handBounceDist0();
handBounceDist1();
drawKitchen();
drawKitchen1();
drawKitchen2();
drawKitchen3();
fill(0, 0, 0);
textSize(25);
textAlign(CENTER, TOP);
text("SCORE: " +score, height/2, 100);
line(500, 0, 500, 1000);
}
//The game over screen
void gameOverScreen() {
background(0);
textAlign(CENTER);
fill(255);
textSize(25);
text("Game Over", height/2, width/2 - 20);
textSize(25);
}
//Starts the game if we're on the initial screen
void mousePressed() {
if (gameScreen==0) {
startGame();
}
}
// Sets the screen variable to start the game.
void startGame() {
gameScreen=1;
}
//Timer. Sets the variables for the time to two minutes.
String time;
int t;
int interval = 120;
//The actual timer. Switches to Game Over screen when ended, forces noLoop.
void timer()
{
fill(0, 0, 0);
t = interval-int(millis()/1000);
time = nf(t, 0);
if (t == 0) {
gameOverScreen();
noLoop();
}
text(time, 900, 100);
}
// ============================================================================
//Chef class
class Chef {
PVector pos, dir;
Chef() {
pos = new PVector(300+500, -300+500);
dir = new PVector(5, 5);
}
//Hand variables
color handColor = color(215, 176, 174);
float handWidth = 50;
float handHeight = 50;
//float handLocX = 500;
//float handLocY = 500;
float handBounce = 20;
//Draws the first hand. Attaches it to the mouse.
void drawHand0() {
fill(handColor);
float mx0 = constrain(mouseX, 20, 500);
rectMode(CENTER);
rect(mx0, mouseY,
handWidth, handHeight);
}
//Draws the second hand. Attaches it to the keyboard.
void drawHand1() {
fill(handColor);
pushMatrix();
translate(pos.x, pos.y);
rectMode(CENTER);
rect(0, 0,
handWidth, handHeight);
move();
popMatrix();
}
//Keyboard move commands
void move() {
if (keys['a']) //move left
pos.x -= dir.x;
if (keys['d']) //move right
pos.x += dir.x;
if (keys['w']) //move up
pos.y -= dir.y;
if (keys['s']) //move down
pos.y += dir.y;
}
}//class
//