/*Carley Johnson
Section E
cbjohsno@andrew.cmu.edu
Final Project
*/
platform = [];
var x, y, y1, y2, y3;
var startScreen = 0;
var platformNumber = 50;
var platformGap = 70;
var cat;
var r = 0;
function preload() {
var cloudPic = "https://i.imgur.com/veId7W2.jpg"
cloudImage = loadImage(cloudPic);
var catPic = "https://i.imgur.com/ooPSMZU.jpg"
catImage = loadImage(catPic);
var titlePic = "https://i.imgur.com/6ehrfne.jpg"
titleScreen = loadImage(titlePic);
}
function Cat() {
this.x = 10;
this.y = 10;
}
function Platform() {
this.x = 10;
this.y = 10;
this.height = 10;
this.width = 100;
}
function setup() {
createCanvas(600, 500);
//cloud placements
x = width / 2;
y = height;
y1 = y + 100;
y2 = y - 75;
y3 = y - 300;
//title screen setup
if (startScreen == 0) {
image(titleScreen, -30, 0, titleScreen.width/2, titleScreen.height/2);
noStroke();
textFont("MV Boli");
fill(230, 181, 224);
textSize(48);
textAlign(CENTER);
text("Move Cat With Mouse,", width/2, height - 95);
text("Click To Start!", width/2, height - 50);
}
angleMode(DEGREES);
//setup platforms
for (i = 0; i < platformNumber; i++) {
platform[i] = new Platform();
platform[i].x = random(0, 400);
platform[i].y = 500 + i * platformGap;
}
//start the platform in the right place
platform[0].x = mouseX;
cat = new Cat();
cat.x = platform[0].x + 50;
cat.y = platform[0].y - 5;
}
function draw() {
if (startScreen == 0) {
}
else if (startScreen == 1) {
//background sky
background(88, 179, 236);
image(cloudImage, x, y, cloudImage.width * 1.5, cloudImage.height * 1.5);
image(cloudImage, x - 200, y1, cloudImage.width * 1.5, cloudImage.height * 1.5);
image(cloudImage, x - 150, y2, cloudImage.width * 1.5, cloudImage.height * 1.5);
image(cloudImage, x - 300, y3, cloudImage.width * 1.5, cloudImage.height * 1.5);
y = y - 1;
y1 = y1 - 1;
y2 = y2 - 1;
y3 = y3 - 1;
//Gameplay
noStroke();
drawPlatform();
drawCat();
//cloud resets
if (y < 0) {
y = height;
}
if (y1 < 0) {
y1 = height;
}
if (y2 < 0) {
y2 = height;
}
if (y3 < 0) {
y3 = height;
}
}
//Cat controls
cat.x = mouseX;
if (mouseX < platform[r].x || mouseX > platform[r].x + 100) {
cat.y = cat.y + 5;
if (cat.y > platform[r].y + 10) {
r++;
}
} else {
cat.y = platform[r].y - 5;
}
}
function mousePressed() {
if (startScreen == 0) {
startScreen = 1;
}
}
function drawPlatform() {
fill(147, 100, 15);
for (i = 0; i < platformNumber; i++) {
rect(platform[i].x, platform[i].y, platform[i].width, platform[i].height);
platform[i].y = 500 + i * platformGap - (frameCount / 0.7 % (500 + i * platformGap));
//Score counter
textSize(20);
stroke(147, 100, 15);
textFont("MV Boli");
fill(147, 100, 15);
text('SCORE:', 475, 30);
var score = parseInt(frameCount / 42) + 1;
text(score, 565, 30);
}
}
function drawCat() {
push();
translate(cat.x, cat.y);
image(catImage, -150, -140, catImage.width/5, catImage.height/5)
pop();
//Game over
if (cat.y < 0 || cat.y > 500) {
stroke(204, 229, 242);
fill(204, 229, 242);
rect(130, 200, 350, 60);
stroke(227, 116, 214);
textFont("MV Boli");
fill(230, 181, 224);
textSize(60);
textAlign(CENTER);
text('Game Over!', 300, 250);
noLoop();
noFill();
noStroke();
}
}
A few things to play:
Click on the start screen quickly – a bug I was unsure how to fix causes the game to start play even while the start screen is up!
Keep your mouse to the left of the screen- this is where the first platform starts!
To play again, reload the page!
Otherwise, I enjoyed working on this project! I like how it looks (I drew the title card, the cat avatar, and the cloud image myself). I wanted it to be cute and slightly doodle-y in style. I picked the colors to go with this feeling. I’m proud of this because I feel like this is the first “experience” I’ve coded. It’s short and sweet, without a ton of major mechanics, but it’s a full experience nonetheless and I’m proud of it. I feel like I was able to tick off more goals of mine they I expected, so overall I’d say it is a personal win. I ended up combining my two possible game play ideas (an upwards platformer or downwards scroller) into a downwards platformer. I picked the cat theme because I was feeling homesick for my own, so I imagined that this was my cat (Soupy) trying to get home!