Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function Timer() {
- this.t = Date.now();
- }
- Timer.prototype = {
- delta: function () {
- return Date.now() - this.t;
- },
- reset: function () {
- this.t = Date.now();
- }
- };
- var map = {
- width: 13,
- height: 13,
- data: [
- [
- ['|', '–', '–', '–', '•', '–', '–', '–', '•', '–', '–', '–', '|'],
- ['|', '*', '•', '•', '•', '•', '•', '•', '•', '•', '•', '*', '|'],
- ['|', '•', '/', '–', '•', '•', '•', '•', '•', '–', '\\', '•', '|'],
- ['|', '•', '|', '•', '•', '•', '•', '•', '•', '•', '|', '•', '|'],
- ['|', '•', '•', '•', '•', '•', '•', '•', '•', '•', '•', '•', '|'],
- ['|', '•', '|', '•', '|', ' ', ' ', ' ', '|', '•', '|', '•', '|'],
- ['|', '•', '•', '•', '•', ' ', ' ', ' ', '•', '•', '•', '•', '|'],
- ['|', '•', '|', '•', '•', '–', '–', '–', '•', '•', '|', '•', '|'],
- ['|', '•', '•', '•', '•', '•', '•', '•', '•', '•', '•', '•', '|'],
- ['|', '•', '|', '•', '•', '•', '•', '•', '•', '•', '|', '•', '|'],
- ['|', '•', '\\', '–', '•', '•', '–', '•', '•', '–', '/', '•', '|'],
- ['|', '*', '•', '•', '•', '•', '•', '•', '•', '•', '•', '*', '|'],
- ['|', '–', '–', '–', '•', '–', '–', '–', '•', '–', '–', '–', '|'],
- ]
- ]
- };
- var level = 0;
- var dots = map.data[level].reduce(function (p, c) {
- p += c.filter(function (d) { return d == '•'}).length;
- return p;
- }, 0);
- var score = 0;
- var player = {
- char: 'c',
- big: {
- is: false,
- duration: 5000,
- timer: null
- },
- dead: false,
- x: 6,
- y: 8,
- color: '#2196F3'
- };
- var enemies = [
- {
- char: '$',
- dead: false,
- x: 6,
- y: 5,
- ox: 6,
- oy: 5,
- dir: getRandomInt(0, 3),
- wait: new Timer(),
- speed: 1300,
- color: '#F44336'
- },
- {
- char: '#',
- dead: false,
- x: 7,
- y: 6,
- ox: 7,
- oy: 6,
- dir: getRandomInt(0, 3),
- wait: new Timer(),
- speed: 1000,
- color: '#9C27B0'
- },
- {
- char: '%',
- dead: false,
- x: 5,
- y: 6,
- ox: 5,
- oy: 6,
- dir: getRandomInt(0, 3),
- wait: new Timer(),
- speed: 500,
- color: '#4CAF50'
- },
- {
- char: '&',
- dead: false,
- x: 6,
- y: 6,
- ox: 5,
- oy: 6,
- dir: getRandomInt(0, 3),
- wait: new Timer(),
- speed: 300,
- color: '#795548'
- }
- ];
- var scoreboard = document.createElement('div');
- document.body.appendChild(scoreboard);
- var board = document.createElement('pre');
- document.body.appendChild(board);
- var keys = {};
- document.addEventListener('keyup', function (e) {
- keys[e.which] = true;
- });
- function pressed(key) {
- if (keys[key]) {
- delete keys[key];
- return true;
- }
- }
- function getRandomInt(min, max) {
- min = Math.ceil(min);
- max = Math.floor(max);
- return Math.floor(Math.random() * (max - min + 1)) + min;
- }
- function checkBoundaries(t, loc) {
- return /\||–|\\|\//.test(loc);
- }
- function update() {
- if (!player.dead) {
- if (pressed(40)) { // down
- if (player.y != map.height - 1) {
- if (!checkBoundaries(player, map.data[level][player.y + 1][player.x])) player.y++;
- } else {
- player.y = 0;
- }
- }
- if (pressed(38)) { // up
- if (player.y != 0) {
- if (!checkBoundaries(player, map.data[level][player.y - 1][player.x])) player.y--;
- } else {
- player.y = map.height - 1;
- }
- }
- if (pressed(37)) { //left
- if (player.x != 0) {
- if (!checkBoundaries(player, map.data[level][player.y][player.x - 1])) player.x--;
- } else {
- player.x = map.width - 1;
- }
- }
- if (pressed(39)) { // right
- if (player.x != map.width - 1) {
- if (!checkBoundaries(player, map.data[level][player.y][player.x + 1])) player.x++;
- } else {
- player.x = 0;
- }
- }
- }
- enemies.forEach(function (enemy) {
- if (!enemy.dead && enemy.wait.delta() > (player.big.is ? enemy.speed * 2 : enemy.speed)) {
- if (enemy.dir == 0) {
- if (enemy.y != 0) {
- if (!checkBoundaries(enemy, map.data[level][enemy.y - 1][enemy.x])) {
- enemy.y--;
- if (getRandomInt(0, 9) == 3) enemy.dir = getRandomInt(0, 3);
- } else {
- enemy.dir = getRandomInt(0, 3);
- }
- } else {
- enemy.y = map.height - 1;
- }
- } else if (enemy.dir == 1) {
- if (enemy.y != map.height - 1) {
- if (!checkBoundaries(enemy, map.data[level][enemy.y + 1][enemy.x])) {
- enemy.y++;
- if (getRandomInt(0, 7) == 2) enemy.dir = getRandomInt(0, 3);
- } else {
- enemy.dir = getRandomInt(0, 3);
- }
- } else {
- enemy.y = 0;
- }
- } else if (enemy.dir == 2) {
- if (enemy.x != 0) {
- if (!checkBoundaries(enemy, map.data[level][enemy.y][enemy.x - 1])) {
- enemy.x--;
- if (getRandomInt(0, 10) == 5) enemy.dir = getRandomInt(0, 3);
- } else {
- enemy.dir = getRandomInt(0, 3);
- }
- } else {
- enemy.x = map.width - 1;
- }
- } else if (enemy.dir == 3) {
- if (enemy.x != map.width - 1) {
- if (!checkBoundaries(enemy, map.data[level][enemy.y][enemy.x + 1])) {
- enemy.x++;
- if (getRandomInt(0, 5) == 3) enemy.dir = getRandomInt(0, 3);
- } else {
- enemy.dir = getRandomInt(0, 3);
- }
- } else {
- enemy.x = 0;
- }
- }
- enemy.wait.reset();
- }
- if (!player.dead && !enemy.dead && player.x == enemy.x && player.y == enemy.y) {
- if (player.big.is) {
- score += 10;
- enemy.dead = true;
- enemy.wait.reset();
- } else {
- player.dead = true;
- }
- }
- if (enemy.dead && enemy.wait.delta() > 5000) {
- enemy.y = enemy.oy;
- enemy.x = enemy.ox;
- enemy.dead = false;
- enemy.wait.reset();
- }
- });
- if (!player.dead && map.data[level][player.y][player.x] == '*') {
- player.big.is = true;
- player.big.timer = new Timer();
- player.char = 'C';
- map.data[level][player.y][player.x] = ' ';
- }
- if (!player.dead && map.data[level][player.y][player.x] == '•') {
- score++;
- dots--;
- map.data[level][player.y][player.x] = ' ';
- }
- if (!player.dead && player.big.is) {
- if (player.big.timer.delta() > player.big.duration) {
- player.big.is = false;
- player.char = 'c';
- player.big.timer = null;
- }
- }
- }
- function draw() {
- while (board.lastChild) {
- board.removeChild(board.lastChild);
- }
- scoreboard.innerText = 'Score: ' + score;
- if (player.dead) {
- scoreboard.style.color = '#F44336';
- scoreboard.innerText = 'You were eat\'n! You scored ' + score + ' points!';
- }
- if (dots == 0) {
- scoreboard.style.color = '#4CAF50';
- scoreboard.innerText = 'You won! You scored ' + score + ' points!';
- }
- for (var y=0; y<map.data[level].length; y++) {
- for (var x=0; x<map.data[level][y].length; x++) {
- var node = document.createElement('span');
- node.innerText = map.data[level][y][x];
- if (map.data[level][y][x] == '•') node.style.color = '#BDBDBD';
- if (map.data[level][y][x] == '|') node.style.color = '#0D47A1';
- if (map.data[level][y][x] == '*') node.style.color = '#F57F17';
- enemies.forEach(function (enemy) {
- if (!enemy.dead && enemy.y == y && enemy.x == x) {
- node.innerText = enemy.char;
- node.style.color = enemy.color;
- if (player.big.is) {
- node.style.color = '#00BCD4';
- }
- }
- });
- if (!player.dead && player.y == y && player.x == x) {
- node.innerText = player.char;
- node.style.color = player.color;
- }
- board.appendChild(node);
- }
- board.appendChild(document.createElement('br'));
- }
- }
- function loop() {
- update();
- draw();
- if (!player.dead && dots != 0) window.requestAnimationFrame(loop);
- }
- window.requestAnimationFrame(loop);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement