logic for eating 🐍
This commit is contained in:
parent
cb7b649529
commit
3f0bee34ce
@ -13,9 +13,12 @@
|
|||||||
"babel-core": "^6.25.0",
|
"babel-core": "^6.25.0",
|
||||||
"babel-plugin-external-helpers": "^6.22.0",
|
"babel-plugin-external-helpers": "^6.22.0",
|
||||||
"babel-preset-es2015": "^6.24.1",
|
"babel-preset-es2015": "^6.24.1",
|
||||||
|
"lodash": "^4.17.4",
|
||||||
"rollup": "^0.45.2",
|
"rollup": "^0.45.2",
|
||||||
"rollup-plugin-babel": "^3.0.1",
|
"rollup-plugin-babel": "^3.0.1",
|
||||||
|
"rollup-plugin-commonjs": "^8.1.0",
|
||||||
"rollup-plugin-livereload": "^0.4.0",
|
"rollup-plugin-livereload": "^0.4.0",
|
||||||
|
"rollup-plugin-node-resolve": "^3.0.0",
|
||||||
"rollup-plugin-serve": "^0.4.0",
|
"rollup-plugin-serve": "^0.4.0",
|
||||||
"rollup-watch": "^4.3.1"
|
"rollup-watch": "^4.3.1"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
import babel from 'rollup-plugin-babel';
|
import babel from 'rollup-plugin-babel';
|
||||||
import serve from 'rollup-plugin-serve';
|
import serve from 'rollup-plugin-serve';
|
||||||
import livereload from 'rollup-plugin-livereload';
|
import livereload from 'rollup-plugin-livereload';
|
||||||
|
import resolve from 'rollup-plugin-node-resolve';
|
||||||
|
import commonjs from 'rollup-plugin-commonjs';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
entry: 'src/index.js',
|
entry: 'src/index.js',
|
||||||
@ -10,7 +12,11 @@ export default {
|
|||||||
exclude: 'node_modules/**',
|
exclude: 'node_modules/**',
|
||||||
}),
|
}),
|
||||||
serve(),
|
serve(),
|
||||||
|
resolve(),
|
||||||
livereload('build'),
|
livereload('build'),
|
||||||
|
commonjs({
|
||||||
|
include: 'node_modules/**',
|
||||||
|
}),
|
||||||
],
|
],
|
||||||
dest: 'build/bundle.js',
|
dest: 'build/bundle.js',
|
||||||
};
|
};
|
||||||
@ -5,4 +5,16 @@ export default {
|
|||||||
width: 50,
|
width: 50,
|
||||||
height: 50,
|
height: 50,
|
||||||
},
|
},
|
||||||
|
snake: {
|
||||||
|
direction: 'left',
|
||||||
|
x: 25,
|
||||||
|
y: 25,
|
||||||
|
body: 3,
|
||||||
|
speed: 100,
|
||||||
|
log: [],
|
||||||
|
},
|
||||||
|
food: {
|
||||||
|
x: null,
|
||||||
|
y: null,
|
||||||
|
}
|
||||||
};
|
};
|
||||||
62
src/index.js
62
src/index.js
@ -1,8 +1,9 @@
|
|||||||
|
|
||||||
import config from './config';
|
import config from './config';
|
||||||
import { createDivElement } from './utils/create-div-element';
|
import { createDivElement } from './utils/create-div-element';
|
||||||
|
import _ from 'lodash';
|
||||||
|
|
||||||
const { dimensions, unit } = config;
|
const { dimensions, unit, snake, food } = config;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draw the board
|
* Draw the board
|
||||||
@ -34,17 +35,7 @@ for (let i = 0; i < dimensions.height; i++) {
|
|||||||
* Draw the snake
|
* Draw the snake
|
||||||
*/
|
*/
|
||||||
|
|
||||||
let snake = {
|
const setBrickColor = (color, x, y) => {
|
||||||
direction: 'left',
|
|
||||||
x: 10,
|
|
||||||
y: 10,
|
|
||||||
body: 10,
|
|
||||||
speed: 100,
|
|
||||||
log: [],
|
|
||||||
};
|
|
||||||
|
|
||||||
const setSnakeColor = (color, x, y) => {
|
|
||||||
console.log('hoi', color, x, y);
|
|
||||||
((document.getElementById(`${x}.${y}`) || {}).style || {}).background = color;
|
((document.getElementById(`${x}.${y}`) || {}).style || {}).background = color;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -52,7 +43,7 @@ const showSnake = () => {
|
|||||||
for(var i = 0; i < snake.body; i++) {
|
for(var i = 0; i < snake.body; i++) {
|
||||||
const logEvent = snake.log[snake.log.length - (1 + i)];
|
const logEvent = snake.log[snake.log.length - (1 + i)];
|
||||||
|
|
||||||
setSnakeColor(
|
setBrickColor(
|
||||||
'deeppink',
|
'deeppink',
|
||||||
(logEvent || {}).x,
|
(logEvent || {}).x,
|
||||||
(logEvent || {}).y,
|
(logEvent || {}).y,
|
||||||
@ -64,7 +55,7 @@ const hideSnake = () => {
|
|||||||
for(var i = 0; i < snake.body; i++) {
|
for(var i = 0; i < snake.body; i++) {
|
||||||
const logEvent = snake.log[snake.log.length - (1 + snake.body + i)];
|
const logEvent = snake.log[snake.log.length - (1 + snake.body + i)];
|
||||||
|
|
||||||
setSnakeColor(
|
setBrickColor(
|
||||||
'#eee',
|
'#eee',
|
||||||
(logEvent || {}).x,
|
(logEvent || {}).x,
|
||||||
(logEvent || {}).y,
|
(logEvent || {}).y,
|
||||||
@ -123,11 +114,6 @@ const moveSnake = (direction) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
setInterval(() => {
|
|
||||||
moveSnake(snake.direction);
|
|
||||||
}, snake.speed);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set key events
|
* Set key events
|
||||||
*/
|
*/
|
||||||
@ -150,3 +136,41 @@ document.onkeydown = function(e) {
|
|||||||
break;
|
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();
|
||||||
|
|
||||||
|
|||||||
@ -3,14 +3,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
export const createDivElement = (name, styles, target) => {
|
export const createDivElement = (name, styles, target) => {
|
||||||
eval[name] = document.createElement('div');
|
window[name] = document.createElement('div');
|
||||||
eval[name].id = name;
|
window[name].id = name;
|
||||||
Object.assign(eval[name].style, styles);
|
Object.assign(window[name].style, styles);
|
||||||
|
|
||||||
if (target) {
|
if (target) {
|
||||||
const targetDiv = document.getElementById(target);
|
const targetDiv = document.getElementById(target);
|
||||||
targetDiv.appendChild(eval[name]);
|
targetDiv.appendChild(window[name]);
|
||||||
} else {
|
} else {
|
||||||
document.body.appendChild(eval[name]);
|
document.body.appendChild(window[name]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
63
yarn.lock
63
yarn.lock
@ -6,6 +6,10 @@ abbrev@1:
|
|||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
|
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:
|
ajv@^4.9.1:
|
||||||
version "4.11.8"
|
version "4.11.8"
|
||||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
|
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
|
||||||
@ -615,6 +619,12 @@ braces@^1.8.2:
|
|||||||
preserve "^0.2.0"
|
preserve "^0.2.0"
|
||||||
repeat-element "^1.1.2"
|
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:
|
browserslist@^2.1.2:
|
||||||
version "2.3.1"
|
version "2.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.3.1.tgz#39500a2090330b2a090120ea6c7fc78b6e091c5e"
|
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"
|
caniuse-lite "^1.0.30000712"
|
||||||
electron-to-chromium "^1.3.17"
|
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:
|
caniuse-lite@^1.0.30000712:
|
||||||
version "1.0.30000713"
|
version "1.0.30000713"
|
||||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000713.tgz#33957ecb4a2154a5d40a60d13d8bf1cfa0881a8a"
|
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:
|
dependencies:
|
||||||
is-extglob "^1.0.0"
|
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:
|
is-number@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
|
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"
|
opts ">= 1.2.0"
|
||||||
ws "^1.1.1"
|
ws "^1.1.1"
|
||||||
|
|
||||||
lodash@^4.2.0:
|
lodash@^4.17.4, lodash@^4.2.0:
|
||||||
version "4.17.4"
|
version "4.17.4"
|
||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
|
||||||
|
|
||||||
@ -1123,6 +1141,12 @@ loose-envify@^1.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
js-tokens "^3.0.0"
|
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:
|
micromatch@^2.1.5, micromatch@^2.3.11:
|
||||||
version "2.3.11"
|
version "2.3.11"
|
||||||
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
|
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"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
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:
|
performance-now@^0.2.0:
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
|
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"
|
version "0.8.7"
|
||||||
resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de"
|
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:
|
rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1:
|
||||||
version "2.6.1"
|
version "2.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
|
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
|
||||||
@ -1447,12 +1485,31 @@ rollup-plugin-babel@^3.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
rollup-pluginutils "^1.5.0"
|
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:
|
rollup-plugin-livereload@^0.4.0:
|
||||||
version "0.4.0"
|
version "0.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/rollup-plugin-livereload/-/rollup-plugin-livereload-0.4.0.tgz#915e72d99e74790d4a56183fac7e6d02f49abf03"
|
resolved "https://registry.yarnpkg.com/rollup-plugin-livereload/-/rollup-plugin-livereload-0.4.0.tgz#915e72d99e74790d4a56183fac7e6d02f49abf03"
|
||||||
dependencies:
|
dependencies:
|
||||||
livereload "^0.6.0"
|
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:
|
rollup-plugin-serve@^0.4.0:
|
||||||
version "0.4.0"
|
version "0.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/rollup-plugin-serve/-/rollup-plugin-serve-0.4.0.tgz#1ac54a22c08b43e131c7efa7e250bff40788ef06"
|
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"
|
core-util-is "1.0.2"
|
||||||
extsprintf "^1.2.0"
|
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:
|
wide-align@^1.1.0:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
|
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user