xxxxxxxxxx
271
/* 11/18/24 progress
collision dectection
Taylor Ith
*/
let player = Player();
let ninjastar;
let collisionRadius = 50;
var time = 0;
let gameState = 0;
// global variable to contain image data
//accessed by preload and draw
let charIdleSprite, charWalkSprite, char2HealthSprite;
let ninjastar1move;
let startButton;
let titlescreen;
let backgroundImage;
let titlecard;
let backgroundMusic;
function preload() {
charIdleSprite = loadImage("Sprite/character_Idle.gif");
charWalkSprite = loadImage("Sprite/character_walk.gif");
char2HealthSprite = loadImage("Sprite/sprite_2hp.gif");
ninjastar1move = loadImage("Sprite/NinjaStar2x0.gif");
backgroundMusic = loadSound("audio/8-Bit Ninja.mp3");
// https://opengameart.org/content/8-bit-ninja
startButtomImage = loadImage("bg/startbutton.png");
titlescreen = loadImage("bg/GameBG.png");
backgroundImage = loadImage("bg/GameBG.png");
titlecard = loadImage("bg/DodgeDojo.png");
}
function setup() {
createCanvas(480, 360);
imageMode(CENTER);
ninjastar = Ninjastar();
// backgroundMusic.play();
backgroundMusic.loop(true);
startButton = Button(100, 300, startButton);
}
function draw() {
background(220);
if (gameState == 0) {
startMenu();
} else if (gameState == 1) {
game();
}
}
function startMenu() {
image(titlescreen, width / 2, height / 2);
image(titlecard, width / 2, height / 3.5);
startButton.display();
if (startButton.clicked()) {
gameState = 1;
}
}
function Button(x, y, img) {
// x,y,img arguments are like
let w = 50;
let h = 50;
let isClicked = false;
function display() {
image(startButtomImage, x, y);
}
function clicked() {
if (mouseIsPressed) {
if (
mouseX > x - w / 2 &&
mouseX < x + w / 2 &&
mouseY > y - h / 2 &&
mouseY < y + h / 2
) {
if (!isClicked) {
isClicked = true;
return true;
}
}
} else if (isClicked) {
isClicked = false;
}
return false;
}
return { display, clicked };
}
function game() {
image(backgroundImage, width / 2, height / 2);
player.move();
player.display();
ninjastar.move();
ninjastar.display();
let ninjacollide = detectCollision(player, ninjastar);
if (ninjacollide) {
player.hit();
gameState = 0;
time = 0;
ninjastar.reset();
// reset ninja star position
}
textSize(30); // time indicator
image(charIdleSprite, 100, 20);
text(floor(time / 60), 30, 30);
time = time + 1;
fill("red");
}
function Player() {
let x = 200;
let y = 200;
let animationState = 0;
// 1 = move
// 0 = idle
// 2 = 2hp
function move() {
if (animationState != 2) {
animationState = 0;
}
if (keyIsDown(RIGHT_ARROW)) {
x = x + 5;
animationState = 1; //walk animation
}
if (keyIsDown(LEFT_ARROW)) {
x = x - 5;
animationState = 1; //walk animation
}
if (keyIsDown(UP_ARROW)) {
y = y - 5;
animationState = 1;
}
if (keyIsDown(DOWN_ARROW)) {
y = y + 5;
animationState = 1;
}
}
function display() {
if (animationState == 0) {
image(charIdleSprite, x, y);
} else if (animationState == 1) {
image(charWalkSprite, x, y);
} else if (animationState == 2) {
image(char2HealthSprite, x, y);
}
}
function getPosition() {
return { x, y };
}
function hit() {
animationState = 2;
}
return { move, display, getPosition, hit };
}
function coinFlip() {
return random(-1, 1) > 0;
}
function Ninjastar() {
let x, y;
let speedX, speedY;
let defaultSpeed = 7;
reset();
let animationState = 0;
function move() {
x = x + speedX;
y = y + speedY;
if (x > width || x < 0 || y > height || y < 0) {
reset();
}
}
function reset() {
x = random(0, 500);
y = random(0, 500);
if (coinFlip()) {
x = 0;
if (coinFlip()) {
x = width;
}
} else {
y = 0;
if (coinFlip()) {
y = height;
}
}
let playerPosition = player.getPosition();
let diffX = playerPosition.x - x;
let diffY = playerPosition.y - y;
if (abs(diffX) > abs(diffY)) {
speedX = defaultSpeed * Math.sign(diffX);
speedY = (diffY / diffX) * defaultSpeed * Math.sign(diffY);
} else {
speedX = (diffX / diffY) * defaultSpeed * Math.sign(diffX);
speedY = defaultSpeed * Math.sign(diffY);
}
console.log(x, y, speedX, speedY);
}
function display() {
if (animationState == 0) {
image(ninjastar1move, x, y);
}
}
function getPosition() {
return { x, y };
}
return { move, display, getPosition, reset };
}
//compare the position of two objects
// return true if they are colliding
function detectCollision(objA, objB) {
let aPosition = objA.getPosition();
let bPosition = objB.getPosition();
let d = dist(aPosition.x, aPosition.y, bPosition.x, bPosition.y);
let isColliding = d < collisionRadius;
return isColliding; // returns true or false
}
function mousePressed() {}