Skip to content

Commit

Permalink
separate logic from view b00tc4mp#84
Browse files Browse the repository at this point in the history
  • Loading branch information
Eden23 committed Aug 26, 2024
1 parent 7f1f6f6 commit aec84b2
Show file tree
Hide file tree
Showing 29 changed files with 681 additions and 463 deletions.
9 changes: 9 additions & 0 deletions staff/marti-herms/project/dodge/data/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import player from './player.js'
import obstacles from './obstacles.js'

const data = {
player,
obstacles
}

export default data
70 changes: 70 additions & 0 deletions staff/marti-herms/project/dodge/data/obstacles.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import randomNumberGenerator from '../util/randomNumberGenerator.js'
import { SCREEN_WIDTH, SCREEN_HEIGHT } from '../util/constants'

import player from './player.js'

class Obstacle {
constructor(id) {
this.id = id
const type = randomNumberGenerator(1, 3)
const side = randomNumberGenerator(1, 4)

switch (type) {
case 1:
this.width = 15
this.height = 15
this.color = 'blue'
break
case 2:
this.width = 25
this.height = 25
this.color = 'red'
break
case 3:
this.width = 35
this.height = 35
this.color = 'purple'
break
default:
break
}

switch (side) {
case 1:
this.top = randomNumberGenerator(50, SCREEN_HEIGHT - this.height - 50)
this.left = 50
break
case 2:
this.top = 50
this.left = randomNumberGenerator(50, SCREEN_WIDTH - this.width - 50)
break
case 3:
this.top = SCREEN_HEIGHT - this.height - 50
this.left = randomNumberGenerator(50, SCREEN_WIDTH - this.width - 50)
break
case 4:
this.top = randomNumberGenerator(50, SCREEN_HEIGHT - this.height - 50)
this.left = SCREEN_WIDTH - this.width - 50
break
default:
break
}

const dirY = player.item.top - this.top
const dirX = player.item.left - this.left

const magnitude = Math.sqrt(dirY ** 2 + dirX ** 2)

this.yMovement = dirY / magnitude
this.xMovement = dirX / magnitude
}
}

const obstacles = {
items: [],
addObstacle: function (id) { this.items.push(new Obstacle(id)) },
removeObstacle: function (id) { this.items = this.items.filter(obstacle => obstacle.id !== id) },
clear: function () { this.items = [] }
}

export default obstacles
18 changes: 18 additions & 0 deletions staff/marti-herms/project/dodge/data/player.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { SCREEN_WIDTH, SCREEN_HEIGHT } from '../util/constants'

class Player {
constructor() {
this.width = 25
this.height = 25
this.top = (SCREEN_HEIGHT - 25) / 2
this.left = (SCREEN_WIDTH - 25) / 2
this.points = 0
}
}

const player = {
item: new Player(),
clear: function () { this.item = new Player() }
}

export default player
2 changes: 1 addition & 1 deletion staff/marti-herms/project/dodge/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Space Invaders</title>
<title>Dodge</title>
</head>

<body>
Expand Down
27 changes: 27 additions & 0 deletions staff/marti-herms/project/dodge/logic/checkCollision.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import data from '../data'

import { OBS_SIZE, PLAYER_SIZE } from '../util/constants'

export default () => {
const boolean = data.obstacles.items.some(obstacle => {
const obsTop = obstacle.top
const obsLeft = obstacle.left
const obsRight = obstacle.left + obstacle.width
const obsBottom = obstacle.top + obstacle.height

const playerTop = data.player.item.top
const playerLeft = data.player.item.left
const playerRight = data.player.item.left + PLAYER_SIZE
const playerBottom = data.player.item.top + PLAYER_SIZE

if (obsTop > playerTop && obsTop < playerBottom && obsLeft > playerLeft && obsLeft < playerRight ||
obsBottom > playerTop && obsBottom < playerBottom && obsLeft > playerLeft && obsLeft < playerRight ||
obsTop > playerTop && obsTop < playerBottom && obsRight > playerLeft && obsRight < playerRight ||
obsBottom > playerTop && obsBottom < playerBottom && obsRight > playerLeft && obsRight < playerRight) {
return true
}
return false
})

return boolean
}
12 changes: 12 additions & 0 deletions staff/marti-herms/project/dodge/logic/checkOutOfBounds.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import data from '../data'

import { SCREEN_WIDTH, SCREEN_HEIGHT } from '../util/constants'

export default (id) => {
const obstacle = data.obstacles.items.find(obstacle => obstacle.id === id)

if (obstacle.top >= SCREEN_HEIGHT - obstacle.height - 10 || obstacle.top < 0 || obstacle.left >= SCREEN_WIDTH - obstacle.width - 10 || obstacle.left < 0) {
return true
}
return false
}
5 changes: 5 additions & 0 deletions staff/marti-herms/project/dodge/logic/clearObstacles.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import data from '../data'

export default () => {
data.obstacles.clear()
}
5 changes: 5 additions & 0 deletions staff/marti-herms/project/dodge/logic/clearPlayer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import data from '../data'

export default () => {
data.player.clear()
}
5 changes: 5 additions & 0 deletions staff/marti-herms/project/dodge/logic/createObstacle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import data from '../data'

export default (id) => {
data.obstacles.addObstacle(id)
}
5 changes: 5 additions & 0 deletions staff/marti-herms/project/dodge/logic/getObstacles.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import data from '../data'

export default () => {
return data.obstacles.items
}
5 changes: 5 additions & 0 deletions staff/marti-herms/project/dodge/logic/getPlayer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import data from '../data'

export default () => {
return data.player.item
}
5 changes: 5 additions & 0 deletions staff/marti-herms/project/dodge/logic/getPoints.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import data from '../data'

export default () => {
return data.player.item.points
}
29 changes: 29 additions & 0 deletions staff/marti-herms/project/dodge/logic/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import getPlayer from './getPlayer'
import movePlayer from './movePlayer'
import createObstacle from './createObstacle'
import clearPlayer from './clearPlayer'
import clearObstacles from './clearObstacles'
import removeObstacle from './removeObstacle'
import getObstacles from './getObstacles'
import checkCollision from './checkCollision'
import moveObstacles from './moveObstacles'
import checkOutOfBounds from './checkOutOfBounds'
import getPoints from './getPoints'
import setPoints from './setPoints'

const logic = {
movePlayer,
getPlayer,
createObstacle,
clearObstacles,
clearPlayer,
removeObstacle,
getObstacles,
checkCollision,
moveObstacles,
checkOutOfBounds,
getPoints,
setPoints
}

export default logic
12 changes: 12 additions & 0 deletions staff/marti-herms/project/dodge/logic/moveObstacles.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import data from '../data'

import { OBS_PACE } from '../util/constants'

export default () => {
data.obstacles.items = data.obstacles.items.map(obstacle => {
obstacle.top += obstacle.yMovement * OBS_PACE
obstacle.left += obstacle.xMovement * OBS_PACE

return obstacle
})
}
61 changes: 61 additions & 0 deletions staff/marti-herms/project/dodge/logic/movePlayer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import data from '../data'

import { SCREEN_WIDTH, SCREEN_HEIGHT } from '../util/constants'

export default (e) => {
const moveUp = () => {
data.player.item.top = Math.max(0, data.player.item.top - 10)
}

const moveLeft = () => {
data.player.item.left = Math.max(0, data.player.item.left - 10)
}

const moveRight = () => {
data.player.item.left = Math.min(SCREEN_WIDTH - 25, data.player.item.left + 10)
}

const moveDown = () => {
data.player.item.top = Math.min(SCREEN_HEIGHT - 25, data.player.item.top + 10)
}

if (typeof e === 'object')
switch (e.key) {
case 'ArrowUp':
case 'w':
moveUp()
break
case 'ArrowLeft':
case 'a':
moveLeft()
break
case 'ArrowRight':
case 'd':
moveRight()
break
case 'ArrowDown':
case 's':
moveDown()
break
default:
break
}
else {
switch (e) {
case 'up':
moveUp()
break
case 'left':
moveLeft()
break
case 'right':
moveRight()
break
case 'down':
moveDown()
break
default:
break
}
}
}
5 changes: 5 additions & 0 deletions staff/marti-herms/project/dodge/logic/removeObstacle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import data from '../data'

export default (id) => {
data.obstacles.removeObstacle(id)
}
18 changes: 18 additions & 0 deletions staff/marti-herms/project/dodge/logic/setPoints.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import data from '../data'

export default (seconds) => {
if (seconds === 0)
data.player.item.points = 0
else if (seconds < 20)
data.player.item.points += 1
else if (seconds < 30)
data.player.item.points += 5
else if (seconds < 60)
data.player.item.points += 10
else if (seconds < 120)
data.player.item.points += 20
else if (seconds < 240)
data.player.item.points += 40
else if (seconds >= 240)
data.player.item.points += 100
}
Loading

0 comments on commit aec84b2

Please sign in to comment.