logic for eating 🐍

This commit is contained in:
Fredrik Jensen 2017-08-14 10:25:15 +02:00
parent cb7b649529
commit 3f0bee34ce
6 changed files with 131 additions and 25 deletions

View File

@ -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"
},

View File

@ -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',
};

View File

@ -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,
}
};

View File

@ -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();

View File

@ -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]);
}
};

View File

@ -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"