xxxxxxxxxx
//possible values for movement
let movement = [10, -10]
class Food {
constructor() {
this.x = random(width)
this.y = random(height)
}
// draws food
render() {
ellipse(this.x, this.y, 20, 20)
}
}
class Enemy {
constructor() {
this.x = random(width)
this.y = random(height)
this.size = 20
}
render() {
ellipse(this.x, this.y, this.size, this.size)
}
eatFood(fx, fy) {
if (abs(fx - this.x) < this.size && abs(fy - this.y) < this.size) {
this.size += 5
return true
}
return false
}
// move enemy in any direction randomly
randomStep(){
let xstep = random(movement)
let ystep = random(movement)
this.x += xstep
// if enemy leaves the screen then reset on other side
if (this.x > width-10) {
this.x = 10
}
else if (this.x < 10) {
this.x = width - 10
}
this.y += ystep
if (this.y > height- 10) {
this.y = 10
}
else if (this.y < 10) {
this.y = height - 10
}
}
}
class Player {
constructor() {
this.x = width / 2
this.y = height / 2
this.size = 30
}
// draws player
render() {
ellipse(this.x, this.y, this.size, this.size)
}
// takes an absolute position
updatePos(x, y) {
this.x = x
this.y = y
}
// returns true if colliding and increases size
eatFood(fx, fy) {
if (abs(fx - this.x) < this.size/2 && abs(fy - this.y) < this.size/2) {
this.size += 5
return true
}
return false
}
//eats enemy if larger than it, else enemy eats it.
//if equal nothing happens
eatEnemy(enemy) {
if (abs(enemy.x - this.x) < this.size/2 && abs(enemy.y - this.y) < this.size/2) {
if (this.size > enemy.size) {
this.size += enemy.size/3
return 1
}
else if (this.size < enemy.size) {
enemy.size += this.size/3
return 2
}
else {
return 3
}
}
}
}
let food = []
let enemy = []
let player
function setup() {
createCanvas(windowWidth, windowHeight);
background(255, 150, 255)
// populate food array
for (let i = 0; i < 100; i++) {
food.push(new Food())
}
// populate enemy array
for (let i = 0; i < 15; i++) {
enemy.push(new Enemy())
}
// create player
player = new Player()
}
function draw() {
// clear background
background(255, 255, 255)
// render food
fill(255, 255, 255)
stroke(0, 0, 255)
// render food for loop way
for (let i = 0; i < food.length; i++) {
food[i].render()
}
// render player
fill(0, 0, 255)
noStroke()
player.render()
// render enemy for loop way
for (let i = 0; i < enemy.length; i++) {
noStroke()
fill(255,0,0)
enemy[i].render()
}
// move player
player.updatePos(mouseX, mouseY)
//move enemies
for (let i = 0; i < enemy.length; i++) {
enemy[i].randomStep()
enemy[i].render()
}
// collisions for loop way
for (let i = 0; i < food.length; i++) {
if (player.eatFood(food[i].x, food[i].y)) {
food.splice(i, 1)
i-- // account for size decrease
continue
}
for (let j = 0; j < enemy.length; j++){
if (enemy[j].eatFood(food[i].x, food[i].y)){
food.splice(i, 1)
i--
break
}
}
}
for (let i = 0; i < enemy.length; i++) {
if (player.eatEnemy(enemy[i]) == 1) {
enemy.splice(i, 1)
i-- // account for size decrease
}
else if (player.eatEnemy(enemy[i]) == 2){
player.size = 0
noLoop()
background(0)
fill(255)
textSize(30)
text("You lose!!!",width/2, height/2)
//fix this formatting
}
}
if (food.length < 3){
for (i = 0; i < random(0,3); i++) {
food.push(new Food())
}
}
if (enemy.length == 0) {
noLoop()
background(0)
fill(255)
textSize(30)
text("You win!!!",width/2, height/2)
}
}