From 3f0bee34ced2d6b02bc4abe3ffd83a5a66ad77ee Mon Sep 17 00:00:00 2001 From: Fredrik Jensen Date: Mon, 14 Aug 2017 10:25:15 +0200 Subject: [PATCH] logic for eating :snake: --- package.json | 3 ++ rollup.config.js | 6 ++++ src/config.js | 12 +++++++ src/index.js | 62 ++++++++++++++++++++++---------- src/utils/create-div-element.js | 10 +++--- yarn.lock | 63 ++++++++++++++++++++++++++++++++- 6 files changed, 131 insertions(+), 25 deletions(-) diff --git a/package.json b/package.json index b011bcb..ef9b2e2 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,12 @@ "babel-core": "^6.25.0", "babel-plugin-external-helpers": "^6.22.0", "babel-preset-es2015": "^6.24.1", + "lodash": "^4.17.4", "rollup": "^0.45.2", "rollup-plugin-babel": "^3.0.1", + "rollup-plugin-commonjs": "^8.1.0", "rollup-plugin-livereload": "^0.4.0", + "rollup-plugin-node-resolve": "^3.0.0", "rollup-plugin-serve": "^0.4.0", "rollup-watch": "^4.3.1" }, diff --git a/rollup.config.js b/rollup.config.js index 8a21e79..80429f7 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,6 +1,8 @@ import babel from 'rollup-plugin-babel'; import serve from 'rollup-plugin-serve'; import livereload from 'rollup-plugin-livereload'; +import resolve from 'rollup-plugin-node-resolve'; +import commonjs from 'rollup-plugin-commonjs'; export default { entry: 'src/index.js', @@ -10,7 +12,11 @@ export default { exclude: 'node_modules/**', }), serve(), + resolve(), livereload('build'), + commonjs({ + include: 'node_modules/**', + }), ], dest: 'build/bundle.js', }; \ No newline at end of file diff --git a/src/config.js b/src/config.js index fb904f2..e3e5c57 100644 --- a/src/config.js +++ b/src/config.js @@ -5,4 +5,16 @@ export default { width: 50, height: 50, }, + snake: { + direction: 'left', + x: 25, + y: 25, + body: 3, + speed: 100, + log: [], + }, + food: { + x: null, + y: null, + } }; \ No newline at end of file diff --git a/src/index.js b/src/index.js index 7894942..3ccb97d 100644 --- a/src/index.js +++ b/src/index.js @@ -1,8 +1,9 @@ import config from './config'; import { createDivElement } from './utils/create-div-element'; +import _ from 'lodash'; -const { dimensions, unit } = config; +const { dimensions, unit, snake, food } = config; /** * Draw the board @@ -34,17 +35,7 @@ for (let i = 0; i < dimensions.height; i++) { * Draw the snake */ -let snake = { - direction: 'left', - x: 10, - y: 10, - body: 10, - speed: 100, - log: [], -}; - -const setSnakeColor = (color, x, y) => { - console.log('hoi', color, x, y); +const setBrickColor = (color, x, y) => { ((document.getElementById(`${x}.${y}`) || {}).style || {}).background = color; }; @@ -52,7 +43,7 @@ const showSnake = () => { for(var i = 0; i < snake.body; i++) { const logEvent = snake.log[snake.log.length - (1 + i)]; - setSnakeColor( + setBrickColor( 'deeppink', (logEvent || {}).x, (logEvent || {}).y, @@ -64,7 +55,7 @@ const hideSnake = () => { for(var i = 0; i < snake.body; i++) { const logEvent = snake.log[snake.log.length - (1 + snake.body + i)]; - setSnakeColor( + setBrickColor( '#eee', (logEvent || {}).x, (logEvent || {}).y, @@ -123,11 +114,6 @@ const moveSnake = (direction) => { }); }; -setInterval(() => { - moveSnake(snake.direction); -}, snake.speed); - - /** * Set key events */ @@ -150,3 +136,41 @@ document.onkeydown = function(e) { break; } }; + +/** + * Make food + */ + +const makeFood = () => { + const x = _.random(50); + const y = _.random(50); + + food.x = x; + food.y = y; + + setBrickColor('blue', x, y); +}; + +/** + * Check if snake is eating + */ + +const checkIfSnakeIsEating = () => { + if (snake.x === food.x && snake.y === food.y) { + makeFood(); + snake.body = snake.body + 1; + snake.speed = snake.speed - 23; + } +}; + +/** + * Run game + */ + +setInterval(() => { + moveSnake(snake.direction); + checkIfSnakeIsEating(); +}, snake.speed); + +makeFood(); + diff --git a/src/utils/create-div-element.js b/src/utils/create-div-element.js index df351d8..6d7868b 100644 --- a/src/utils/create-div-element.js +++ b/src/utils/create-div-element.js @@ -3,14 +3,14 @@ */ export const createDivElement = (name, styles, target) => { - eval[name] = document.createElement('div'); - eval[name].id = name; - Object.assign(eval[name].style, styles); + window[name] = document.createElement('div'); + window[name].id = name; + Object.assign(window[name].style, styles); if (target) { const targetDiv = document.getElementById(target); - targetDiv.appendChild(eval[name]); + targetDiv.appendChild(window[name]); } else { - document.body.appendChild(eval[name]); + document.body.appendChild(window[name]); } }; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 02d9c99..0fc378f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6,6 +6,10 @@ abbrev@1: version "1.1.0" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" +acorn@^4.0.1: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -615,6 +619,12 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" +browser-resolve@^1.11.0: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + browserslist@^2.1.2: version "2.3.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.3.1.tgz#39500a2090330b2a090120ea6c7fc78b6e091c5e" @@ -622,6 +632,10 @@ browserslist@^2.1.2: caniuse-lite "^1.0.30000712" electron-to-chromium "^1.3.17" +builtin-modules@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + caniuse-lite@^1.0.30000712: version "1.0.30000713" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000713.tgz#33957ecb4a2154a5d40a60d13d8bf1cfa0881a8a" @@ -1008,6 +1022,10 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -1113,7 +1131,7 @@ livereload@^0.6.0: opts ">= 1.2.0" ws "^1.1.1" -lodash@^4.2.0: +lodash@^4.17.4, lodash@^4.2.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -1123,6 +1141,12 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0" +magic-string@^0.19.0: + version "0.19.1" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.19.1.tgz#14d768013caf2ec8fdea16a49af82fc377e75201" + dependencies: + vlq "^0.2.1" + micromatch@^2.1.5, micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -1284,6 +1308,10 @@ path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" @@ -1435,6 +1463,16 @@ require-relative@0.8.7: version "0.8.7" resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.6, resolve@^1.1.7: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" + dependencies: + path-parse "^1.0.5" + rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" @@ -1447,12 +1485,31 @@ rollup-plugin-babel@^3.0.1: dependencies: rollup-pluginutils "^1.5.0" +rollup-plugin-commonjs@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.1.0.tgz#8ac9a87e6ea4c0d136e3e0e25ef41058957622b0" + dependencies: + acorn "^4.0.1" + estree-walker "^0.3.0" + magic-string "^0.19.0" + resolve "^1.1.7" + rollup-pluginutils "^2.0.1" + rollup-plugin-livereload@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/rollup-plugin-livereload/-/rollup-plugin-livereload-0.4.0.tgz#915e72d99e74790d4a56183fac7e6d02f49abf03" dependencies: livereload "^0.6.0" +rollup-plugin-node-resolve@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.0.tgz#8b897c4c3030d5001277b0514b25d2ca09683ee0" + dependencies: + browser-resolve "^1.11.0" + builtin-modules "^1.1.0" + is-module "^1.0.0" + resolve "^1.1.6" + rollup-plugin-serve@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/rollup-plugin-serve/-/rollup-plugin-serve-0.4.0.tgz#1ac54a22c08b43e131c7efa7e250bff40788ef06" @@ -1643,6 +1700,10 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vlq@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.2.tgz#e316d5257b40b86bb43cb8d5fea5d7f54d6b0ca1" + wide-align@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"