Головна‎ > ‎JavaScript‎ > ‎

Гра







// Створюємо поле 
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
canvas.width = 512;
canvas.height = 480;
document.body.appendChild(canvas);

var monstersCaught = 0;


// Зображення
var bgImage = new Image();
bgImage.src = "img/tlo.png";    // 512x480

var heroImage = new Image();
heroImage.src = "img/heroy.png";    // 32x32

var monsterImage = new Image();
monsterImage.src = "img/monstr.png";    // 32x32

// Об'єкти гри
var hero = {
     speed: 256,  // швидкість в пікселях за секунду
     x: 0,  
     y: 0 
};

var monster = {
     x: 0, 
     y: 0   
};

var reset = function () {
     hero.x = canvas.width / 2;
     hero.y = canvas.height / 2;

     // Монстр з'являється у випадковому місті
     monster.x = 32 + (Math.random() * (canvas.width - 64));
     monster.y = 32 + (Math.random() * (canvas.height - 64));
};


// Взаємодія з клавіатурою
var keysDown = {};

addEventListener("keydown", function (e) {
     keysDown[e.keyCode] = true;
}, false);

addEventListener("keyup", function (e) {
     delete keysDown[e.keyCode];
}, false);


// Рух об'єктів по полю
var update = function (modifier) {

     if (38 in keysDown) {    // вгору
          hero.y -= hero.speed * modifier;
     }
     if (40 in keysDown) {    // вниз
          hero.y += hero.speed * modifier;
     }
     if (37 in keysDown) {    // вліво
          hero.x -= hero.speed * modifier;
     }
     if (39 in keysDown) {    // вправо
          hero.x += hero.speed * modifier;
     }
 
    // Якщо прямокутник героя наїхав на прямокутник монстра
     if (
          hero.x <= (monster.x + 32)
          && monster.x <= (hero.x + 32)
          && hero.y <= (monster.y + 32)
          && monster.y <= (hero.y + 32)
     ) {
          monstersCaught++;
          reset();
     }
};


// Виводимо
var render = function () {

     ctx.drawImage(bgImage, 0, 0);
     ctx.drawImage(heroImage, hero.x, hero.y);
     ctx.drawImage(monsterImage, monster.x, monster.y);

     ctx.fillStyle = "rgb(250, 250, 250)";
     ctx.font = "24px Helvetica";
     ctx.textAlign = "left";
     ctx.textBaseline = "top";
     ctx.fillText("Монстрів: " + monstersCaught, 32, 32);

}


// Головний цикл гри
var main = function () {
     var now = Date.now();
     var delta = now - then;

     update(delta / 1000);
     render();

     then = now;
};


// Запуск
reset();                           // перезапуск гри з початковими параметрами
var then = Date.now();    // задаємо часовий інтервал
setInterval(main, 1);       // 1 мс, виконуємо так швидко як це можливо